This commit is contained in:
@@ -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()));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user