diff --git a/doc_src/cmds/bind.rst b/doc_src/cmds/bind.rst index a40438d25..4506cc70b 100644 --- a/doc_src/cmds/bind.rst +++ b/doc_src/cmds/bind.rst @@ -23,7 +23,7 @@ If both ``KEYS`` and ``COMMAND`` are given, ``bind`` adds (or replaces) a bindin If only ``KEYS`` is given, any existing binding in the given ``MODE`` will be printed. ``KEYS`` is a comma-separated list of key names. -Modifier keys can be specified by prefixing a key name with a combination of ``ctrl-``, ``alt-`` and ``shift-``. +Modifier keys can be specified by prefixing a key name with a combination of ``ctrl-``/``c-``, ``alt-``/``a-`` and ``shift-``. For example, :kbd:`Alt`\ +\ :kbd:`w` is written as ``alt-w``. Key names are case-sensitive; for example ``alt-W`` is the same as ``alt-shift-w``. diff --git a/src/key.rs b/src/key.rs index 0cc38a259..6028c67e1 100644 --- a/src/key.rs +++ b/src/key.rs @@ -259,8 +259,8 @@ pub(crate) fn parse_keys(value: &wstr) -> Result, WString> { for _i in 0..num_keys.checked_sub(1).unwrap() { let modifier = components.next().unwrap(); match modifier { - _ if modifier == "ctrl" => modifiers.ctrl = true, - _ if modifier == "alt" => modifiers.alt = true, + _ if modifier == "ctrl" || modifier == "c" => modifiers.ctrl = true, + _ if modifier == "alt" || modifier == "a" => modifiers.alt = true, _ if modifier == "shift" => modifiers.shift = true, _ => { return Err(wgettext_fmt!( diff --git a/src/tests/key.rs b/src/tests/key.rs index 69583b7d1..c25b8225b 100644 --- a/src/tests/key.rs +++ b/src/tests/key.rs @@ -9,6 +9,7 @@ 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!("c-a")), Ok(vec![ctrl('a')])); assert_eq!(parse_keys(L!("\x01")), Ok(vec![ctrl('a')])); assert!(parse_keys(L!("F0")).is_err()); assert_eq!(