Improve keyboard code parsing (#13307)

This commit is contained in:
Tommaso Sciortino
2025-11-18 11:49:08 -08:00
committed by GitHub
parent 36b0a86c69
commit b916d79fe2
2 changed files with 8 additions and 3 deletions

View File

@@ -406,6 +406,7 @@ describe('KeypressContext', () => {
describe('Parameterized functional keys', () => {
it.each([
// Parameterized
{ sequence: `\x1b[1;129A`, expected: { name: 'up' } },
{ sequence: `\x1b[1;2H`, expected: { name: 'home', shift: true } },
{ sequence: `\x1b[1;5F`, expected: { name: 'end', ctrl: true } },
{ sequence: `\x1b[1;1P`, expected: { name: 'f1' } },
@@ -449,6 +450,10 @@ describe('KeypressContext', () => {
sequence: `\x1b[F`,
expected: { name: 'end', ctrl: false, meta: false, shift: false },
},
{
sequence: `\x1b[5H`,
expected: { name: 'home', ctrl: true, meta: false, shift: false },
},
])(
'should recognize sequence "$sequence" as $expected.name',
({ sequence, expected }) => {

View File

@@ -405,9 +405,9 @@ function* emitKeys(
code += match[1] + match[3];
// Defaults to '1' if no modifier exists, resulting in a 0 modifier value
modifier = parseInt(match[2] ?? '1', 10) - 1;
} else if ((match = /^((\d;)?(\d))?([A-Za-z])$/.exec(cmd))) {
code += match[4];
modifier = parseInt(match[3] ?? '1', 10) - 1;
} else if ((match = /^(\d+)?(?:;(\d+))?([A-Za-z])$/.exec(cmd))) {
code += match[3];
modifier = parseInt(match[2] ?? match[1] ?? '1', 10) - 1;
} else {
code += cmd;
}