fix(terminal): distinguish IME Process keys from Enter

Adapted from #11273 commits c690ee609, 506524085, and cc69fa7bf.
This commit is contained in:
kunsanglee
2026-08-03 01:30:58 -07:00
committed by OrcaWin
parent 9e42b5fd41
commit 8af6876510
2 changed files with 19 additions and 8 deletions
@@ -325,6 +325,7 @@ describe('isTerminalImeProcessEnter', () => {
const event = (overrides: Partial<KeyboardEvent> = {}) =>
({
key: 'Process',
code: 'Enter',
keyCode: 229,
metaKey: false,
ctrlKey: false,
@@ -333,19 +334,24 @@ describe('isTerminalImeProcessEnter', () => {
...overrides
}) as KeyboardEvent
it.each([{ shiftKey: true }, { shiftKey: false, ctrlKey: true }])(
'recognizes a Windows IME modifier Enter reported as Process',
(modifiers) => {
expect(isTerminalImeProcessEnter(event(modifiers))).toBe(true)
}
)
it.each([
{ shiftKey: true },
{ shiftKey: false, ctrlKey: true },
{ code: 'NumpadEnter' },
{ code: '' },
{ code: 'Unidentified' }
])('recognizes a Windows IME modifier Enter reported as Process', (modifiers) => {
expect(isTerminalImeProcessEnter(event(modifiers))).toBe(true)
})
it.each([
{ key: 'Enter' },
{ keyCode: 13 },
{ shiftKey: false },
{ ctrlKey: true },
{ altKey: true }
{ altKey: true },
{ code: 'KeyQ' },
{ code: 'ArrowLeft' }
])('rejects a non-IME or ambiguous Process key', (override) => {
expect(isTerminalImeProcessEnter(event(override))).toBe(false)
})
@@ -107,11 +107,16 @@ export function getTerminalImeModifiedEnterKind(
}
export function isTerminalImeProcessEnter(
event: Pick<KeyboardEvent, 'key' | 'keyCode' | 'metaKey' | 'ctrlKey' | 'altKey' | 'shiftKey'>
event: Pick<
KeyboardEvent,
'key' | 'code' | 'keyCode' | 'metaKey' | 'ctrlKey' | 'altKey' | 'shiftKey'
>
): boolean {
const { code } = event
return (
event.key === 'Process' &&
event.keyCode === 229 &&
(!code || code === 'Unidentified' || code === 'Enter' || code === 'NumpadEnter') &&
getTerminalImeModifiedEnterKind(event) !== null
)
}