diff options
| author | Ogulcan Celik <ogulcancelik@gmail.com> | 2026-07-02 16:22:11 +0300 |
|---|---|---|
| committer | Ogulcan Celik <ogulcancelik@gmail.com> | 2026-07-02 16:22:11 +0300 |
| commit | f4d216b63d010987775dc6eaf92afa72f86f2816 (patch) | |
| tree | 3af6b07d744a581231a6dabf49e658c6640fdfed /src/client | |
| parent | 885dbcd19e5dc1ba3ac2fe96ce714cf6906a458c (diff) | |
fix: preserve windows backspace input
refs #907
refs #920
Diffstat (limited to 'src/client')
| -rw-r--r-- | src/client/input/windows_vti.rs | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/src/client/input/windows_vti.rs b/src/client/input/windows_vti.rs index 49e77909..6404e586 100644 --- a/src/client/input/windows_vti.rs +++ b/src/client/input/windows_vti.rs @@ -497,6 +497,10 @@ impl WindowsInputMapper { return None; } + if record.virtual_key_code != 0 && (record.unicode < 0x20 || record.unicode == 0x7f) { + return None; + } + self.synthetic_utf16_unit_to_bytes(record.unicode) } @@ -1567,6 +1571,27 @@ mod tests { } #[test] + fn vti_win32_input_mode_backspace_stays_backspace() { + let records = "\x1b[8;14;8;1;0;1_\x1b[8;14;8;0;0;1_".chars().map(key_char); + + assert_eq!( + translate(records), + vec![ + crate::protocol::ClientInputEvent::Key { + code: crate::protocol::ClientKeyCode::Backspace, + modifiers: 0, + kind: crate::protocol::ClientKeyKind::Press, + }, + crate::protocol::ClientInputEvent::Key { + code: crate::protocol::ClientKeyCode::Backspace, + modifiers: 0, + kind: crate::protocol::ClientKeyKind::Release, + }, + ] + ); + } + + #[test] fn vti_win32_input_mode_ctrl_j_preserves_lf_control_key() { let records = "\x1b[74;36;10;1;8;1_\x1b[74;36;10;0;8;1_" .chars() |
