aboutsummaryrefslogtreecommitdiff
path: root/src/client
diff options
context:
space:
mode:
authorOgulcan Celik <ogulcancelik@gmail.com>2026-07-02 16:22:11 +0300
committerOgulcan Celik <ogulcancelik@gmail.com>2026-07-02 16:22:11 +0300
commitf4d216b63d010987775dc6eaf92afa72f86f2816 (patch)
tree3af6b07d744a581231a6dabf49e658c6640fdfed /src/client
parent885dbcd19e5dc1ba3ac2fe96ce714cf6906a458c (diff)
fix: preserve windows backspace input
refs #907 refs #920
Diffstat (limited to 'src/client')
-rw-r--r--src/client/input/windows_vti.rs25
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()