diff options
| author | Can Celik <ogulcancelik@gmail.com> | 2026-08-17 23:26:18 +0300 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2026-08-17 23:26:18 +0300 |
| commit | 94093acb0aaefd7136108d402e25f3bdb86bde73 (patch) | |
| tree | dbcebc660eba9edc267ced9e343ea10e1ea6dc5c /src/client | |
| parent | d2cbcd415cb598891f093d05b0052213047aa6bc (diff) | |
fix: match Windows Ctrl+digit keybindings (#2913)
refs #2910
Diffstat (limited to 'src/client')
| -rw-r--r-- | src/client/input/windows_vti.rs | 9 |
1 files changed, 6 insertions, 3 deletions
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, '-'), ]; |
