Enhance CLI layout with floating completion menu

- Updated the layout in HermesCLI to include a floating completion menu, improving user experience by providing real-time suggestions as users type.
- Refactored the layout structure to utilize FloatContainer, ensuring the input area remains accessible while displaying the completion menu dynamically.
This commit is contained in:
teknium1
2026-02-17 23:04:48 -08:00
parent 50ef18644b
commit 225ae32e7a

24
cli.py
View File

@@ -32,8 +32,9 @@ from prompt_toolkit.history import FileHistory
from prompt_toolkit.styles import Style as PTStyle
from prompt_toolkit.patch_stdout import patch_stdout
from prompt_toolkit.application import Application
from prompt_toolkit.layout import Layout, HSplit, Window, FormattedTextControl
from prompt_toolkit.layout import Layout, HSplit, Window, FormattedTextControl, Float, FloatContainer
from prompt_toolkit.layout.dimension import Dimension
from prompt_toolkit.layout.menus import CompletionsMenu
from prompt_toolkit.widgets import TextArea
from prompt_toolkit.key_binding import KeyBindings
from prompt_toolkit.completion import Completer, Completion
@@ -1654,13 +1655,22 @@ class HermesCLI:
height=get_hint_height,
)
# Layout with dynamic spacer and input at bottom
# Layout with dynamic spacer, input at bottom, and floating completion menu
layout = Layout(
HSplit([
Window(height=0), # Expands to push everything to bottom
spacer,
input_area,
])
FloatContainer(
content=HSplit([
Window(height=0), # Expands to push everything to bottom
spacer,
input_area,
]),
floats=[
Float(
xcursor=True,
ycursor=True,
content=CompletionsMenu(max_height=12, scroll_offset=1),
)
],
)
)
# Style for the application