diff --git a/src/common/input/Keyboard.test.ts b/src/common/input/Keyboard.test.ts index 9bde7594..8c7f0dbc 100644 --- a/src/common/input/Keyboard.test.ts +++ b/src/common/input/Keyboard.test.ts @@ -350,7 +350,15 @@ describe('Keyboard', () => { }); it('should return proper sequence for ctrl+@', () => { - assert.equal(testEvaluateKeyboardEvent({ ctrlKey: true, shiftKey: true, keyCode: 50, key: '@' }).key, '\x00'); + assert.equal(testEvaluateKeyboardEvent({ ctrlKey: true, shiftKey: true, keyCode: 50, code: 'Digit2', key: '@' }).key, '\x00'); + }); + + it('should return proper sequence for ctrl+^', () => { + assert.equal(testEvaluateKeyboardEvent({ ctrlKey: true, shiftKey: true, keyCode: 54, code: 'Digit6', key: '^' }).key, '\x1e'); + }); + + it('should return proper sequence for ctrl+_', () => { + assert.equal(testEvaluateKeyboardEvent({ ctrlKey: true, shiftKey: true, keyCode: 189, code: 'Minus', key: '_' }).key, '\x1f'); }); }); diff --git a/src/common/input/Keyboard.ts b/src/common/input/Keyboard.ts index 31e66740..32085467 100644 --- a/src/common/input/Keyboard.ts +++ b/src/common/input/Keyboard.ts @@ -360,12 +360,11 @@ export function evaluateKeyboardEvent( // Include only keys that that result in a _single_ character; don't include num lock, // volume up, etc. result.key = ev.key; - } else if (ev.key && ev.ctrlKey) { - if (ev.key === '_') { // ^_ - result.key = C0.US; - } - if (ev.key === '@') { // ^ + shift + 2 = ^ + @ - result.key = C0.NUL; + } else if (ev.key && ev.ctrlKey && ev.shiftKey) { + switch (ev.code) { + case 'Minus': result.key = C0.US; break; // ^_ (Ctrl+Shift+-_ + case 'Digit2': result.key = C0.NUL; break; // ^@ (Ctrl+Shift+2) + case 'Digit6': result.key = C0.RS; break; // ^^ (Ctrl+Shift+6) } } break;