strop_engine/editor/
macros.rs1use super::Editor;
7
8impl Editor {
9 pub(crate) fn macro_toggle(&mut self, reg: char) {
13 self.recording = Some(reg);
14 self.macros.insert(reg, Vec::new());
15 self.message = format!("recording @{reg}");
16 }
17
18 pub(crate) fn macro_play(&mut self, reg: char, count: usize) {
21 let Some(keys) = self.macros.get(®).cloned() else {
22 self.message = format!("register @{reg} is empty");
23 return;
24 };
25 if keys.is_empty() {
26 self.message = format!("register @{reg} is empty");
27 return;
28 }
29 self.last_macro = Some(reg);
30 let depth = self.macro_depth;
31 if depth >= 64 {
32 self.message = "macro recursion too deep".into();
33 return;
34 }
35 if self.resolution.enabled {
36 self.queue_macro(keys, count, depth + 1);
37 return;
38 }
39 for _ in 0..count {
40 for key in &keys {
41 if self.should_quit {
42 return;
43 }
44 self.macro_depth = depth + 1;
45 self.feed(*key);
46 self.macro_depth = depth;
47 }
48 }
49 }
50
51 pub(crate) fn macro_again(&mut self, count: usize) {
53 match self.last_macro {
54 Some(reg) => self.macro_play(reg, count),
55 None => self.message = "no macro replayed yet".into(),
56 }
57 }
58}