Enhance multiline input handling in HermesCLI
- Patched prompt_toolkit to recognize Shift+Enter as a distinct key for inserting new lines, improving the multiline input experience. - Added Alt+Enter as a fallback for terminals that do not support Shift+Enter, ensuring consistent functionality across different environments. - Updated user instructions to reflect the new key bindings for multiline input.
This commit is contained in:
parent
d7cef744ec
commit
d9a8e421a4
1 changed files with 16 additions and 3 deletions
19
cli.py
19
cli.py
|
|
@ -37,10 +37,18 @@ from prompt_toolkit.layout.dimension import Dimension
|
||||||
from prompt_toolkit.widgets import TextArea
|
from prompt_toolkit.widgets import TextArea
|
||||||
from prompt_toolkit.key_binding import KeyBindings
|
from prompt_toolkit.key_binding import KeyBindings
|
||||||
from prompt_toolkit.completion import Completer, Completion
|
from prompt_toolkit.completion import Completer, Completion
|
||||||
|
from prompt_toolkit.keys import Keys
|
||||||
import threading
|
import threading
|
||||||
import queue
|
import queue
|
||||||
import tempfile
|
import tempfile
|
||||||
|
|
||||||
|
# Patch prompt_toolkit to recognize Shift+Enter as a distinct key.
|
||||||
|
# By default, the xterm "disambiguated modified keys" sequence for Shift+Enter
|
||||||
|
# (\x1b[27;2;13~) is mapped to ControlM (same as plain Enter). We remap it to
|
||||||
|
# a unique key tuple so we can bind Shift+Enter to insert a newline.
|
||||||
|
from prompt_toolkit.input.ansi_escape_sequences import ANSI_SEQUENCES
|
||||||
|
ANSI_SEQUENCES["\x1b[27;2;13~"] = (Keys.Escape, Keys.ControlJ) # Shift+Enter
|
||||||
|
|
||||||
# Load environment variables first
|
# Load environment variables first
|
||||||
from dotenv import load_dotenv
|
from dotenv import load_dotenv
|
||||||
env_path = Path(__file__).parent / '.env'
|
env_path = Path(__file__).parent / '.env'
|
||||||
|
|
@ -829,7 +837,7 @@ class HermesCLI:
|
||||||
|
|
||||||
print()
|
print()
|
||||||
print(" Tip: Just type your message to chat with Hermes!")
|
print(" Tip: Just type your message to chat with Hermes!")
|
||||||
print(" Multi-line: End a line with \\ to continue on next line")
|
print(" Multi-line: Shift+Enter for a new line (Alt+Enter as fallback)")
|
||||||
print()
|
print()
|
||||||
|
|
||||||
def show_tools(self):
|
def show_tools(self):
|
||||||
|
|
@ -1549,9 +1557,14 @@ class HermesCLI:
|
||||||
self._pending_input.put(text)
|
self._pending_input.put(text)
|
||||||
event.app.current_buffer.reset()
|
event.app.current_buffer.reset()
|
||||||
|
|
||||||
@kb.add('s-enter')
|
@kb.add('escape', 'c-j')
|
||||||
def handle_shift_enter(event):
|
def handle_shift_enter(event):
|
||||||
"""Shift+Enter inserts a newline for multi-line input."""
|
"""Shift+Enter inserts a newline (via patched ANSI sequence)."""
|
||||||
|
event.current_buffer.insert_text('\n')
|
||||||
|
|
||||||
|
@kb.add('escape', 'enter')
|
||||||
|
def handle_alt_enter(event):
|
||||||
|
"""Alt+Enter also inserts a newline (fallback for terminals without Shift+Enter)."""
|
||||||
event.current_buffer.insert_text('\n')
|
event.current_buffer.insert_text('\n')
|
||||||
|
|
||||||
@kb.add('c-c')
|
@kb.add('c-c')
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue