diff --git a/packages/@ant/ink/src/core/parse-keypress.ts b/packages/@ant/ink/src/core/parse-keypress.ts index 6febc862e..012eb889a 100644 --- a/packages/@ant/ink/src/core/parse-keypress.ts +++ b/packages/@ant/ink/src/core/parse-keypress.ts @@ -697,12 +697,17 @@ function parseKeypress(s: string = ''): ParsedKey { return createNavKey(s, 'mouse', false) } - if (s === '\r' || s === '\r\n') { + if (s === '\r\n') { + key.raw = undefined + key.name = 'return' + key.ctrl = true + } else if (s === '\r') { key.raw = undefined key.name = 'return' } else if (s === '\n') { key.raw = undefined key.name = 'return' + key.ctrl = true } else if (s === '\t') { key.name = 'tab' } else if (s === '\b' || s === '\x1b\b') { diff --git a/src/keybindings/defaultBindings.ts b/src/keybindings/defaultBindings.ts index 1d9ef10e2..9cb835ea5 100644 --- a/src/keybindings/defaultBindings.ts +++ b/src/keybindings/defaultBindings.ts @@ -71,6 +71,9 @@ export const DEFAULT_BINDINGS: KeybindingBlock[] = [ 'meta+o': 'chat:fastMode', 'meta+t': 'chat:thinkingToggle', enter: 'chat:submit', + // Ctrl+Enter inserts a newline (Kitty keyboard protocol terminals only; + // standard terminals cannot distinguish ctrl+enter from plain enter). + 'ctrl+enter': 'chat:newline', up: 'history:previous', down: 'history:next', // Editing shortcuts (defined here, migration in progress)