summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--helix-view/src/input.rs60
1 files changed, 59 insertions, 1 deletions
diff --git a/helix-view/src/input.rs b/helix-view/src/input.rs
index 87a0bfca..0f4ffaac 100644
--- a/helix-view/src/input.rs
+++ b/helix-view/src/input.rs
@@ -549,7 +549,7 @@ pub fn parse_macro(keys_str: &str) -> anyhow::Result<Vec<KeyEvent>> {
if c == ">" {
keys_res = Err(anyhow!("Unmatched '>'"));
} else if c != "<" {
- keys.push(c);
+ keys.push(if c == "-" { keys::MINUS } else { c });
i += end_i;
} else {
match s.find('>').context("'>' expected") {
@@ -813,6 +813,64 @@ mod test {
},
])
);
+
+ assert_eq!(
+ parse_macro(":w aa-bb.txt<ret>").ok(),
+ Some(vec![
+ KeyEvent {
+ code: KeyCode::Char(':'),
+ modifiers: KeyModifiers::NONE,
+ },
+ KeyEvent {
+ code: KeyCode::Char('w'),
+ modifiers: KeyModifiers::NONE,
+ },
+ KeyEvent {
+ code: KeyCode::Char(' '),
+ modifiers: KeyModifiers::NONE,
+ },
+ KeyEvent {
+ code: KeyCode::Char('a'),
+ modifiers: KeyModifiers::NONE,
+ },
+ KeyEvent {
+ code: KeyCode::Char('a'),
+ modifiers: KeyModifiers::NONE,
+ },
+ KeyEvent {
+ code: KeyCode::Char('-'),
+ modifiers: KeyModifiers::NONE,
+ },
+ KeyEvent {
+ code: KeyCode::Char('b'),
+ modifiers: KeyModifiers::NONE,
+ },
+ KeyEvent {
+ code: KeyCode::Char('b'),
+ modifiers: KeyModifiers::NONE,
+ },
+ KeyEvent {
+ code: KeyCode::Char('.'),
+ modifiers: KeyModifiers::NONE,
+ },
+ KeyEvent {
+ code: KeyCode::Char('t'),
+ modifiers: KeyModifiers::NONE,
+ },
+ KeyEvent {
+ code: KeyCode::Char('x'),
+ modifiers: KeyModifiers::NONE,
+ },
+ KeyEvent {
+ code: KeyCode::Char('t'),
+ modifiers: KeyModifiers::NONE,
+ },
+ KeyEvent {
+ code: KeyCode::Enter,
+ modifiers: KeyModifiers::NONE,
+ },
+ ])
+ );
}
#[test]