From a23e33539d861d53906a353bcf7a748f37ae693f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc=20Andr=C3=A9=20Tanner?= Date: Mon, 19 Dec 2016 13:10:54 +0100 Subject: vis: introduce vis_register_from utility function --- main.c | 54 +++++++++++++++++------------------------------------- vis.c | 19 +++++++++++++++++++ vis.h | 1 + 3 files changed, 37 insertions(+), 37 deletions(-) diff --git a/main.c b/main.c index 80a6ede..bf41bd5 100644 --- a/main.c +++ b/main.c @@ -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) { diff --git a/vis.c b/vis.c index 1926d62..55c55ce 100644 --- a/vis.c +++ b/vis.c @@ -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]; diff --git a/vis.h b/vis.h index fd0e300..74794b6 100644 --- a/vis.h +++ b/vis.h @@ -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 */ -- cgit v1.2.3