diff options
Diffstat (limited to 'src/input/encode.rs')
| -rw-r--r-- | src/input/encode.rs | 18 |
1 files changed, 12 insertions, 6 deletions
diff --git a/src/input/encode.rs b/src/input/encode.rs index cd59b0f4..c475e0da 100644 --- a/src/input/encode.rs +++ b/src/input/encode.rs @@ -16,8 +16,10 @@ pub fn encode_key(key: KeyEvent, protocol: KeyboardProtocol) -> Vec<u8> { } pub fn encode_terminal_key(key: TerminalKey, protocol: KeyboardProtocol) -> Vec<u8> { - if key.is_text_commit { - return encode_text_input(&key).unwrap_or_default(); + if key.kind != crossterm::event::KeyEventKind::Release { + if let Some(text) = &key.generated_text { + return text.as_bytes().to_vec(); + } } // A release event only produces bytes when the pane protocol reports event @@ -282,10 +284,7 @@ fn encode_legacy(key: TerminalKey) -> Vec<u8> { // Alt modifier on character keys: prefix with ESC if mods.contains(KeyModifiers::ALT) { - let inner = TerminalKey { - modifiers: mods.difference(KeyModifiers::ALT), - ..key - }; + let inner = key.with_modifiers(mods.difference(KeyModifiers::ALT)); let mut bytes = vec![0x1b]; bytes.extend(encode_legacy_inner(inner)); return bytes; @@ -950,6 +949,13 @@ mod tests { encode_key(release, KeyboardProtocol::Kitty { flags: 3 }), b"\x1b[106;1:3u" ); + + let mut malformed_release = TerminalKey::from(release); + malformed_release.generated_text = Some("j".to_owned()); + assert_eq!( + encode_terminal_key(malformed_release, KeyboardProtocol::Kitty { flags: 3 }), + b"\x1b[106;1:3u" + ); } #[test] |
