fix: 修复 Ctrl+Enter 在标准终端中应插入换行而非发送消息

- parse-keypress.ts: \n (LF) 字节标记为 ctrl=true,因为标准终端中
  Ctrl+Enter 发送 \n,需与普通 Enter (\r) 区分
- defaultBindings.ts: 新增 ctrl+enter -> chat:newline 快捷键绑定,
  支持 Kitty 键盘协议终端(如 Windows Terminal 1.25+)

Co-Authored-By: Sonnet-4.6-CoStrict <noreply@anthropic.com>
This commit is contained in:
Askhz 2026-05-19 16:16:24 +08:00
parent 321be8a128
commit 728af38c52
2 changed files with 9 additions and 1 deletions

View File

@ -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') {

View File

@ -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)