aboutsummaryrefslogtreecommitdiff
path: root/helix-term
diff options
context:
space:
mode:
authorOmnikar2021-12-25 08:38:14 +0000
committerBlaž Hrastnik2021-12-27 01:13:18 +0000
commit8340d73545a0757ff3ddd83d019b3d41a923f017 (patch)
tree9582703f858c0b61ec3b659f11567ba08d5a3b20 /helix-term
parent2d4bc0aec743c6d62344da6fda2c0c84e75a82be (diff)
Extract macro parsing to `helix-view` and add unit tests
Diffstat (limited to 'helix-term')
-rw-r--r--helix-term/src/commands.rs35
1 files changed, 2 insertions, 33 deletions
diff --git a/helix-term/src/commands.rs b/helix-term/src/commands.rs
index 4e0f3ef7..524c50ce 100644
--- a/helix-term/src/commands.rs
+++ b/helix-term/src/commands.rs
@@ -6037,39 +6037,8 @@ fn record_macro(cx: &mut Context) {
fn replay_macro(cx: &mut Context) {
let reg = cx.register.unwrap_or('@');
- // TODO: macro keys should be parsed one by one and not space delimited (see kak)
let keys: Vec<KeyEvent> = if let Some([keys_str]) = cx.editor.registers.read(reg) {
- let mut keys_res: anyhow::Result<_> = Ok(Vec::new());
- let mut i = 0;
- while let Ok(keys) = &mut keys_res {
- if i >= keys_str.len() {
- break;
- }
- if !keys_str.is_char_boundary(i) {
- i += 1;
- continue;
- }
-
- let s = &keys_str[i..];
- let mut end_i = 1;
- while !s.is_char_boundary(end_i) {
- end_i += 1;
- }
- let c = &s[..end_i];
- if c != "<" {
- keys.push(c);
- i += end_i;
- } else {
- match s.find('>').context("'>' expected") {
- Ok(end_i) => {
- keys.push(&s[1..end_i]);
- i += end_i + 1;
- }
- Err(err) => keys_res = Err(err),
- }
- }
- }
- match keys_res.and_then(|keys| keys.into_iter().map(str::parse).collect()) {
+ match helix_view::input::parse_macro(keys_str) {
Ok(keys) => keys,
Err(err) => {
cx.editor.set_error(format!("Invalid macro: {}", err));
@@ -6080,8 +6049,8 @@ fn replay_macro(cx: &mut Context) {
cx.editor.set_error(format!("Register [{}] empty", reg));
return;
};
- let count = cx.count();
+ let count = cx.count();
cx.callback = Some(Box::new(
move |compositor: &mut Compositor, cx: &mut compositor::Context| {
for _ in 0..count {