@@ -549,7 +549,7 @@ pub fn parse_macro(keys_str: &str) -> anyhow::Result<Vec<KeyEvent>> {
549 if c == ">" {
549 if c == ">" {
550 keys_res = Err(anyhow!("Unmatched '>'"));
550 keys_res = Err(anyhow!("Unmatched '>'"));
551 } else if c != "<" {
551 } else if c != "<" {
552− keys.push(c);
552+ keys.push(if c == "-" { keys::MINUS } else { c });
553 i += end_i;
553 i += end_i;
555 match s.find('>').context("'>' expected") {
555 match s.find('>').context("'>' expected") {
@@ -813,6 +813,64 @@ mod test {
818+ parse_macro(":w aa-bb.txt<ret>").ok(),
821+ code: KeyCode::Char(':'),
822+ modifiers: KeyModifiers::NONE,
825+ code: KeyCode::Char('w'),
826+ modifiers: KeyModifiers::NONE,
829+ code: KeyCode::Char(' '),
830+ modifiers: KeyModifiers::NONE,
833+ code: KeyCode::Char('a'),
834+ modifiers: KeyModifiers::NONE,
837+ code: KeyCode::Char('a'),
838+ modifiers: KeyModifiers::NONE,
841+ code: KeyCode::Char('-'),
842+ modifiers: KeyModifiers::NONE,
845+ code: KeyCode::Char('b'),
846+ modifiers: KeyModifiers::NONE,
849+ code: KeyCode::Char('b'),
850+ modifiers: KeyModifiers::NONE,
853+ code: KeyCode::Char('.'),
854+ modifiers: KeyModifiers::NONE,
857+ code: KeyCode::Char('t'),
858+ modifiers: KeyModifiers::NONE,
861+ code: KeyCode::Char('x'),
862+ modifiers: KeyModifiers::NONE,
865+ code: KeyCode::Char('t'),
866+ modifiers: KeyModifiers::NONE,
869+ code: KeyCode::Enter,
870+ modifiers: KeyModifiers::NONE,