From 95bae46af604f1fda07c8e7b92a278e28792c427 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc=20Andr=C3=A9=20Tanner?= Date: Thu, 25 Feb 2016 16:25:14 +0100 Subject: vis: use standard registers for macro recordings Also support upper case register to append to an existing macro. --- main.c | 55 +++++++++++++++++++++++-------------------------------- 1 file changed, 23 insertions(+), 32 deletions(-) (limited to 'main.c') diff --git a/main.c b/main.c index 6cd7d18..f3bbc3f 100644 --- a/main.c +++ b/main.c @@ -1124,31 +1124,39 @@ static const char *nop(Vis *vis, const char *keys, const Arg *arg) { return keys; } -static const char *key2macro(Vis *vis, const char *keys, enum VisMacro *macro) { - *macro = VIS_MACRO_INVALID; - if (keys[0] >= 'a' && keys[0] <= 'z') - *macro = keys[0] - 'a'; - else if (keys[0] == '@') - *macro = VIS_MACRO_LAST_RECORDED; - else if (keys[0] == '\0') +static const char *key2register(Vis *vis, const char *keys, enum VisRegister *reg) { + *reg = VIS_REG_INVALID; + if (!keys[0]) return NULL; + if ('a' <= keys[0] && keys[0] <= 'z') + *reg = keys[0] - 'a'; + else if ('A' <= keys[0] && keys[0] <= 'Z') + *reg = VIS_REG_A + keys[0] - 'A'; + else if (keys[0] == '*' || keys[0] == '+') + *reg = VIS_REG_CLIPBOARD; + else if (keys[0] == '_') + *reg = VIS_REG_BLACKHOLE; + else if (keys[0] == '0') + *reg = VIS_REG_ZERO; + else if (keys[0] == '@') + *reg = VIS_MACRO_LAST_RECORDED; return keys+1; } static const char *macro_record(Vis *vis, const char *keys, const Arg *arg) { - if (vis_macro_record_stop(vis)) - return keys; - enum VisMacro macro; - keys = key2macro(vis, keys, ¯o); - vis_macro_record(vis, macro); + if (!vis_macro_record_stop(vis)) { + enum VisRegister reg; + keys = key2register(vis, keys, ®); + vis_macro_record(vis, reg); + } vis_draw(vis); return keys; } static const char *macro_replay(Vis *vis, const char *keys, const Arg *arg) { - enum VisMacro macro; - keys = key2macro(vis, keys, ¯o); - vis_macro_replay(vis, macro); + enum VisRegister reg; + keys = key2register(vis, keys, ®); + vis_macro_replay(vis, reg); return keys; } @@ -1389,23 +1397,6 @@ static const char *selection_restore(Vis *vis, const char *keys, const Arg *arg) return keys; } -static const char *key2register(Vis *vis, const char *keys, enum VisRegister *reg) { - *reg = VIS_REG_INVALID; - if (!keys[0]) - return NULL; - if (keys[0] >= 'a' && keys[0] <= 'z') - *reg = keys[0] - 'a'; - else if (keys[0] >= 'A' && keys[0] <= 'Z') - *reg = VIS_REG_A + keys[0] - 'A'; - else if (keys[0] == '*' || keys[0] == '+') - *reg = VIS_REG_CLIPBOARD; - else if (keys[0] == '_') - *reg = VIS_REG_BLACKHOLE; - else if (keys[0] == '0') - *reg = VIS_REG_ZERO; - return keys+1; -} - static const char *reg(Vis *vis, const char *keys, const Arg *arg) { enum VisRegister reg; keys = key2register(vis, keys, ®); -- cgit v1.2.3