fix: preserve literal f terminal input
CI / rust (push) Successful in 4m14s

This commit is contained in:
2026-08-31 17:32:37 -07:00
parent 46cf116812
commit e7ca1d0a73
+11 -1
View File
@@ -1484,7 +1484,11 @@ fn terminal_key_from_parts(
"delete" => TerminalKey::Delete,
"pageup" => TerminalKey::PageUp,
"pagedown" => TerminalKey::PageDown,
function if function.starts_with('f') => {
function
if function.strip_prefix('f').is_some_and(|suffix| {
!suffix.is_empty() && suffix.bytes().all(|byte| byte.is_ascii_digit())
}) =>
{
let number = function.strip_prefix('f')?.parse::<u8>().ok()?;
TerminalKey::Function(number)
}
@@ -1557,6 +1561,12 @@ mod tests {
let enter = terminal_key_from_parts("enter", None, KeyModifiers::default()).unwrap();
assert_eq!(enter.key, TerminalKey::Enter);
let literal_f = terminal_key_from_parts("f", Some("f"), KeyModifiers::default()).unwrap();
assert_eq!(literal_f.key, TerminalKey::Text("f".into()));
let function = terminal_key_from_parts("f12", None, KeyModifiers::default()).unwrap();
assert_eq!(function.key, TerminalKey::Function(12));
let composed = terminal_key_from_parts("é", Some("é"), KeyModifiers::default()).unwrap();
assert_eq!(composed.key, TerminalKey::Text("é".into()));
}