From d025b245f6cd2ae11183cc863471ae544d10d5f3 Mon Sep 17 00:00:00 2001 From: Johannes Altmanninger Date: Mon, 8 Apr 2024 17:33:26 +0200 Subject: [PATCH] Fix parsing of single-digit function keys --- src/key.rs | 4 ++-- src/tests/key.rs | 7 ++++++- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/src/key.rs b/src/key.rs index 4cd7b9426..30223aeb9 100644 --- a/src/key.rs +++ b/src/key.rs @@ -233,6 +233,7 @@ pub(crate) fn parse_keys(value: &wstr) -> Result, WString> { && !value.contains('-') && !value.contains(KEY_SEPARATOR) && !KEY_NAMES.iter().any(|(_codepoint, name)| name == value)) + && value.as_char_slice()[0] != 'F' || (first == '\x1b' || first == ascii_control(first)) { // Hack: treat as legacy syntax (meaning: not comma separated) if @@ -282,9 +283,8 @@ pub(crate) fn parse_keys(value: &wstr) -> Result, WString> { Ok(n) if (1..=12).contains(&n) => function_key(u32::try_from(n).unwrap()), _ => { return Err(wgettext_fmt!( - "only F1 through F12 are supported, not '%s'", + "only F1 through F12 are supported, not 'F%s'", num, - full_key_name )); } }; diff --git a/src/tests/key.rs b/src/tests/key.rs index d3b75773d..69583b7d1 100644 --- a/src/tests/key.rs +++ b/src/tests/key.rs @@ -1,4 +1,4 @@ -use crate::key::{self, ctrl, parse_keys, Key}; +use crate::key::{self, ctrl, function_key, parse_keys, Key}; use crate::wchar::prelude::*; #[test] @@ -10,4 +10,9 @@ fn test_parse_key() { assert_eq!(parse_keys(L!("\x1b")), Ok(vec![Key::from_raw(key::Escape)])); assert_eq!(parse_keys(L!("ctrl-a")), Ok(vec![ctrl('a')])); assert_eq!(parse_keys(L!("\x01")), Ok(vec![ctrl('a')])); + assert!(parse_keys(L!("F0")).is_err()); + assert_eq!( + parse_keys(L!("F1")), + Ok(vec![Key::from_raw(function_key(1))]) + ); }