From 1c97e40a6a3744c888b58a9aa495a6fc4b9a7612 Mon Sep 17 00:00:00 2001 From: Daniel Imms <2193314+Tyriar@users.noreply.github.com> Date: Thu, 1 Jan 2026 04:41:41 -0800 Subject: [PATCH] Support ctrl+^ -> RS, move to physical key Fixes #2797 Part of #1862 --- src/common/input/Keyboard.test.ts | 4 ++++ src/common/input/Keyboard.ts | 11 +++++------ 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/src/common/input/Keyboard.test.ts b/src/common/input/Keyboard.test.ts index 9bde7594..cc36c1d0 100644 --- a/src/common/input/Keyboard.test.ts +++ b/src/common/input/Keyboard.test.ts @@ -353,5 +353,9 @@ describe('Keyboard', () => { assert.equal(testEvaluateKeyboardEvent({ ctrlKey: true, shiftKey: true, keyCode: 50, key: '@' }).key, '\x00'); }); + it('should return proper sequence for ctrl+^', () => { + assert.equal(testEvaluateKeyboardEvent({ ctrlKey: true, shiftKey: true, keyCode: 54, key: '^' }).key, '\x1e'); + }); + }); }); 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;