Skip to content

Commit 2fe436d

Browse files
committed
Handle Kitty return in enter detection
1 parent 2353140 commit 2fe436d

2 files changed

Lines changed: 13 additions & 3 deletions

File tree

cli/src/utils/__tests__/terminal-enter-detection.test.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,16 @@ describe('terminal enter detection', () => {
2626
expect(isLinefeedActingAsEnter()).toBe(false)
2727
})
2828

29+
test('marks Kitty CSI-u Return as return seen', () => {
30+
expect(
31+
shouldMarkReturnKeySeen({ name: 'return', sequence: '\x1b[13u' }),
32+
).toBe(true)
33+
34+
markReturnKeySeenForKey({ name: 'return', sequence: '\x1b[13u' })
35+
36+
expect(isLinefeedActingAsEnter()).toBe(false)
37+
})
38+
2939
test('does not mark keypad Enter escape sequences as return seen', () => {
3040
expect(
3141
shouldMarkReturnKeySeen({ name: 'kpenter', sequence: '\x1b[57414u' }),

cli/src/utils/terminal-enter-detection.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import { isKeypadEnter } from './keypad-keys'
2+
13
/**
24
* Most terminals send \r for Enter and \n for Ctrl+J. A few niche Linux
35
* terminal emulators send \n for Enter instead, making the two
@@ -15,9 +17,7 @@ const defaultHasSeenReturnKey = process.platform === 'darwin'
1517
let hasSeenReturnKey = defaultHasSeenReturnKey
1618

1719
export function shouldMarkReturnKeySeen(key: EnterDetectionKey): boolean {
18-
return (
19-
(key.name === 'return' || key.name === 'enter') && key.sequence === '\r'
20-
)
20+
return (key.name === 'return' || key.name === 'enter') && !isKeypadEnter(key)
2121
}
2222

2323
export function markReturnKeySeen(): void {

0 commit comments

Comments
 (0)