diff options
| -rw-r--r-- | main.c | 54 | ||||
| -rw-r--r-- | vis.c | 19 | ||||
| -rw-r--r-- | vis.h | 1 |
3 files changed, 37 insertions, 37 deletions
@@ -1245,46 +1245,24 @@ static const char *nop(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 ('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; - else if (keys[0] == '/') - *reg = VIS_REG_SEARCH; - else if (keys[0] == ':') - *reg = VIS_REG_COMMAND; - else if (keys[0] == '!') - *reg = VIS_REG_SHELL; - return keys+1; -} - static const char *macro_record(Vis *vis, const char *keys, const Arg *arg) { if (!vis_macro_record_stop(vis)) { - enum VisRegister reg; - keys = key2register(vis, keys, ®); + if (!keys[0]) + return NULL; + enum VisRegister reg = vis_register_from(vis, keys[0]); vis_macro_record(vis, reg); + keys++; } vis_draw(vis); return keys; } static const char *macro_replay(Vis *vis, const char *keys, const Arg *arg) { - enum VisRegister reg; - keys = key2register(vis, keys, ®); + if (!keys[0]) + return NULL; + enum VisRegister reg = vis_register_from(vis, keys[0]); vis_macro_replay(vis, reg); - return keys; + return keys+1; } static const char *suspend(Vis *vis, const char *keys, const Arg *arg) { @@ -1749,10 +1727,11 @@ static const char *selection_restore(Vis *vis, const char *keys, const Arg *arg) } static const char *reg(Vis *vis, const char *keys, const Arg *arg) { - enum VisRegister reg; - keys = key2register(vis, keys, ®); + if (!keys[0]) + return NULL; + enum VisRegister reg = vis_register_from(vis, keys[0]); vis_register_set(vis, reg); - return keys; + return keys+1; } static const char *mark_set(Vis *vis, const char *keys, const Arg *arg) { @@ -1820,12 +1799,13 @@ static const char *delete(Vis *vis, const char *keys, const Arg *arg) { } static const char *insert_register(Vis *vis, const char *keys, const Arg *arg) { - enum VisRegister regid; - keys = key2register(vis, keys, ®id); + if (!keys[0]) + return NULL; + enum VisRegister reg = vis_register_from(vis, keys[0]); size_t len; - const char *data = vis_register_get(vis, regid, &len); + const char *data = vis_register_get(vis, reg, &len); vis_insert_key(vis, data, len); - return keys; + return keys+1; } static const char *prompt_show(Vis *vis, const char *keys, const Arg *arg) { @@ -1235,6 +1235,25 @@ void vis_count_set(Vis *vis, int count) { vis->action.count = (count >= 0 ? count : VIS_COUNT_UNKNOWN); } +enum VisRegister vis_register_from(Vis *vis, char reg) { + switch (reg) { + case '*': /* fall through */ + case '+': return VIS_REG_CLIPBOARD; + case '_': return VIS_REG_BLACKHOLE; + case '0': return VIS_REG_ZERO; + case '@': return VIS_MACRO_LAST_RECORDED; + case '/': return VIS_REG_SEARCH; + case ':': return VIS_REG_COMMAND; + case '!': return VIS_REG_SHELL; + default: + if ('a' <= reg && reg <= 'z') + return VIS_REG_a + reg - 'a'; + else if ('A' <= reg && reg <= 'Z') + return VIS_REG_A + reg - 'A'; + return VIS_REG_INVALID; + } +} + void vis_register_set(Vis *vis, enum VisRegister reg) { if (reg >= VIS_REG_A && reg <= VIS_REG_Z) { vis->action.reg = &vis->registers[reg - VIS_REG_A]; @@ -412,6 +412,7 @@ enum VisRegister { VIS_MACRO_LAST_RECORDED, /* pseudo macro referring to last recorded one */ }; +enum VisRegister vis_register_from(Vis*, char reg); /* set the register to use, if none is given the DEFAULT register is used */ void vis_register_set(Vis*, enum VisRegister); /* get register content */ |
