diff --git a/doc_src/cmds/bind.rst b/doc_src/cmds/bind.rst index 914a30b61..554deb1f9 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, pressing :kbd:`w` while holding the Alt modifier is written as ``alt-w``. Key names are case-sensitive; for example ``alt-W`` is the same as ``alt-shift-w``. ``ctrl-x,ctrl-e`` would mean pressing :kbd:`ctrl-x` followed by :kbd:`ctrl-e`. diff --git a/src/key.rs b/src/key.rs index 22ef27243..665dee7eb 100644 --- a/src/key.rs +++ b/src/key.rs @@ -281,8 +281,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 e99ee575a..4b8350759 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!(