From e882323b0a412bb7abe4e3a7283fa715b55f5f40 Mon Sep 17 00:00:00 2001 From: Charles Packer Date: Thu, 5 Feb 2026 16:41:27 -0800 Subject: [PATCH] fix: restore Shift+Enter by normalizing \n before parseKeypress (#839) Co-authored-by: Letta --- vendor/ink/build/hooks/use-input.js | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/vendor/ink/build/hooks/use-input.js b/vendor/ink/build/hooks/use-input.js index 0a1f5e8..bdfe365 100644 --- a/vendor/ink/build/hooks/use-input.js +++ b/vendor/ink/build/hooks/use-input.js @@ -53,6 +53,15 @@ const useInput = (inputHandler, options = {}) => { return; } + // Normalize bare \n (Linux Enter) to \r before parsing. + // parseKeypress maps \r to name:'return' but \n to name:'enter'. + // Only 'return' should set key.return=true - treating 'enter' as + // return breaks Shift+Enter on terminals that emit a stray \n + // alongside the CSI u sequence. + if (data === '\n') { + data = '\r'; + } + let keypress = parseKeypress(data); // CSI u fallback: iTerm2 3.5+, Kitty, and other modern terminals send @@ -124,7 +133,7 @@ const useInput = (inputHandler, options = {}) => { rightArrow: keypress.name === 'right', pageDown: keypress.name === 'pagedown', pageUp: keypress.name === 'pageup', - return: keypress.name === 'return' || keypress.name === 'enter', + return: keypress.name === 'return', escape: keypress.name === 'escape', ctrl: keypress.ctrl, shift: keypress.shift,