aboutsummaryrefslogtreecommitdiff
path: root/src/input/encode.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/input/encode.rs')
-rw-r--r--src/input/encode.rs18
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]