From 54b307b8bbe92cac45ce73e2909d5464af3181f7 Mon Sep 17 00:00:00 2001 From: maskar Date: Fri, 27 Mar 2026 22:10:43 -0500 Subject: [PATCH 1/3] feat(terminal): add Cmd+Arrow and Shift+Enter keyboard shortcuts - Cmd+Left/Right sends Home/End escape sequences (macOS) - Shift+Enter sends Alt+Enter for multi-line input in CLI agents --- src/components/TerminalView.tsx | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/src/components/TerminalView.tsx b/src/components/TerminalView.tsx index 7252801b..df926d4c 100644 --- a/src/components/TerminalView.tsx +++ b/src/components/TerminalView.tsx @@ -171,7 +171,10 @@ export function TerminalView(props: TerminalViewProps) { }); term.attachCustomKeyEventHandler((e: KeyboardEvent) => { - if (e.type !== 'keydown') return true; + if (e.type !== 'keydown') { + if (e.key === 'Enter' && e.shiftKey) return false; + return true; + } // Let global app shortcuts pass through to the window handler if (matchesGlobalShortcut(e)) return false; @@ -197,6 +200,25 @@ export function TerminalView(props: TerminalViewProps) { return false; } + // Shift+Enter → send as Alt+Enter (newline in CLI agents like Claude Code) + if (e.key === 'Enter' && e.shiftKey) { + e.preventDefault(); + enqueueInput('\x1b\r'); + return false; + } + + // CmdOrCtrl+Left/Right → Home/End escape sequences + if ((isMac ? e.metaKey : e.ctrlKey) && !e.altKey && !(isMac ? e.ctrlKey : e.metaKey)) { + if (e.key === 'ArrowLeft') { + enqueueInput('\x1b[H'); // Home + return false; + } + if (e.key === 'ArrowRight') { + enqueueInput('\x1b[F'); // End + return false; + } + } + return true; }); From 9ae44409cb3c3c7d5546a340aaa6427b790de4d6 Mon Sep 17 00:00:00 2001 From: Johannes Millan Date: Sat, 28 Mar 2026 17:27:05 +0100 Subject: [PATCH 2/3] fix(terminal): add preventDefault to Cmd+Arrow, restrict to macOS only MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Add e.preventDefault() to Cmd+Left/Right to prevent Electron browser-level back-navigation - Restrict Cmd+Arrow → Home/End to macOS only since Ctrl+Arrow is word-jump on Linux - Add comment explaining Shift+Enter keyup suppression --- src/components/TerminalView.tsx | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/components/TerminalView.tsx b/src/components/TerminalView.tsx index df926d4c..38296650 100644 --- a/src/components/TerminalView.tsx +++ b/src/components/TerminalView.tsx @@ -172,6 +172,7 @@ export function TerminalView(props: TerminalViewProps) { term.attachCustomKeyEventHandler((e: KeyboardEvent) => { if (e.type !== 'keydown') { + // Suppress Shift+Enter keyup so xterm doesn't echo a bare Enter if (e.key === 'Enter' && e.shiftKey) return false; return true; } @@ -207,13 +208,15 @@ export function TerminalView(props: TerminalViewProps) { return false; } - // CmdOrCtrl+Left/Right → Home/End escape sequences - if ((isMac ? e.metaKey : e.ctrlKey) && !e.altKey && !(isMac ? e.ctrlKey : e.metaKey)) { + // Cmd+Left/Right → Home/End (macOS only; on Linux Ctrl+Arrow is word-jump) + if (isMac && e.metaKey && !e.altKey && !e.ctrlKey) { if (e.key === 'ArrowLeft') { + e.preventDefault(); enqueueInput('\x1b[H'); // Home return false; } if (e.key === 'ArrowRight') { + e.preventDefault(); enqueueInput('\x1b[F'); // End return false; } From 5c968f433daba32fcf2b6b592aba5074094cabe7 Mon Sep 17 00:00:00 2001 From: Johannes Millan Date: Sat, 28 Mar 2026 17:30:53 +0100 Subject: [PATCH 3/3] fix(terminal): tighten modifier guards for keyboard shortcuts - Shift+Enter: exclude Cmd/Ctrl/Alt so compound combos pass through - Cmd+Arrow: exclude Shift to not intercept Cmd+Shift+Arrow selection --- src/components/TerminalView.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/TerminalView.tsx b/src/components/TerminalView.tsx index 38296650..d60f415c 100644 --- a/src/components/TerminalView.tsx +++ b/src/components/TerminalView.tsx @@ -202,14 +202,14 @@ export function TerminalView(props: TerminalViewProps) { } // Shift+Enter → send as Alt+Enter (newline in CLI agents like Claude Code) - if (e.key === 'Enter' && e.shiftKey) { + if (e.key === 'Enter' && e.shiftKey && !e.metaKey && !e.ctrlKey && !e.altKey) { e.preventDefault(); enqueueInput('\x1b\r'); return false; } // Cmd+Left/Right → Home/End (macOS only; on Linux Ctrl+Arrow is word-jump) - if (isMac && e.metaKey && !e.altKey && !e.ctrlKey) { + if (isMac && e.metaKey && !e.altKey && !e.ctrlKey && !e.shiftKey) { if (e.key === 'ArrowLeft') { e.preventDefault(); enqueueInput('\x1b[H'); // Home