mirror of
https://github.com/stablyai/orca.git
synced 2026-09-22 00:02:31 +00:00
fix(terminal): distinguish IME Process keys from Enter
Adapted from #11273 commitsc690ee609,506524085, andcc69fa7bf.
This commit is contained in:
@@ -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
|
||||
)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user