From 94093acb0aaefd7136108d402e25f3bdb86bde73 Mon Sep 17 00:00:00 2001 From: Can Celik Date: Mon, 17 Aug 2026 23:26:18 +0300 Subject: fix: match Windows Ctrl+digit keybindings (#2913) refs #2910 --- src/client/input/windows_vti.rs | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/client/input/windows_vti.rs b/src/client/input/windows_vti.rs index c95cbc43..dcf804c1 100644 --- a/src/client/input/windows_vti.rs +++ b/src/client/input/windows_vti.rs @@ -683,7 +683,9 @@ impl WindowsInputMapper { if key.unicode == 0 { self.pending_high_surrogate = None; } - if modifiers.contains(crossterm::event::KeyModifiers::CONTROL) { + if modifiers.contains(crossterm::event::KeyModifiers::CONTROL) + && !(0x30..=0x39).contains(&key.virtual_key_code) + { if let Some(code) = windows_unicode_control_to_key_code(key.unicode) { self.pending_high_surrogate = None; return Some(crate::protocol::ClientInputEvent::Key { @@ -1426,12 +1428,13 @@ mod tests { } #[test] - fn vti_real_non_letter_control_records_are_preserved() { + fn vti_control_records_keep_physical_digit_identity() { let cases = [ (0x20, 0x00, ' '), + (0x31, 0x00, '1'), (0xdc, 0x1c, '\\'), (0xdd, 0x1d, ']'), - (0x36, 0x1e, '^'), + (0x36, 0x1e, '6'), (0xbd, 0x1f, '-'), ]; -- cgit v1.2.3