feat: Alt+V keybinding for clipboard image paste
Alt key combos pass through all terminal emulators (sent as ESC + key), unlike Ctrl+V which terminals intercept for text paste. This is the reliable way to attach clipboard images on WSL2, Windows Terminal, VSCode, and SSH sessions where Ctrl+V never reaches the application for image-only clipboard content. Also adds 'Paste image: Alt+V (or /paste)' hint to /help output.
This commit is contained in:
parent
014a5b712d
commit
e93b4d1dcd
1 changed files with 18 additions and 1 deletions
19
cli.py
19
cli.py
|
|
@ -1246,7 +1246,8 @@ class HermesCLI:
|
||||||
_cprint(f" {_GOLD}{cmd:<22}{_RST} {_DIM}-{_RST} {info['description']}")
|
_cprint(f" {_GOLD}{cmd:<22}{_RST} {_DIM}-{_RST} {info['description']}")
|
||||||
|
|
||||||
_cprint(f"\n {_DIM}Tip: Just type your message to chat with Hermes!{_RST}")
|
_cprint(f"\n {_DIM}Tip: Just type your message to chat with Hermes!{_RST}")
|
||||||
_cprint(f" {_DIM}Multi-line: Alt+Enter for a new line{_RST}\n")
|
_cprint(f" {_DIM}Multi-line: Alt+Enter for a new line{_RST}")
|
||||||
|
_cprint(f" {_DIM}Paste image: Alt+V (or /paste){_RST}\n")
|
||||||
|
|
||||||
def show_tools(self):
|
def show_tools(self):
|
||||||
"""Display available tools with kawaii ASCII art."""
|
"""Display available tools with kawaii ASCII art."""
|
||||||
|
|
@ -2644,6 +2645,22 @@ class HermesCLI:
|
||||||
if self._try_attach_clipboard_image():
|
if self._try_attach_clipboard_image():
|
||||||
event.app.invalidate()
|
event.app.invalidate()
|
||||||
|
|
||||||
|
@kb.add('escape', 'v')
|
||||||
|
def handle_alt_v(event):
|
||||||
|
"""Alt+V — paste image from clipboard.
|
||||||
|
|
||||||
|
Alt key combos pass through all terminal emulators (sent as
|
||||||
|
ESC + key), unlike Ctrl+V which terminals intercept for text
|
||||||
|
paste. This is the reliable way to attach clipboard images
|
||||||
|
on WSL2, VSCode, and any terminal over SSH where Ctrl+V
|
||||||
|
can't reach the application for image-only clipboard.
|
||||||
|
"""
|
||||||
|
if self._try_attach_clipboard_image():
|
||||||
|
event.app.invalidate()
|
||||||
|
else:
|
||||||
|
# No image found — show a hint
|
||||||
|
pass # silent when no image (avoid noise on accidental press)
|
||||||
|
|
||||||
# Dynamic prompt: shows Hermes symbol when agent is working,
|
# Dynamic prompt: shows Hermes symbol when agent is working,
|
||||||
# or answer prompt when clarify freetext mode is active.
|
# or answer prompt when clarify freetext mode is active.
|
||||||
cli_ref = self
|
cli_ref = self
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue