aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--main.c54
-rw-r--r--vis.c19
-rw-r--r--vis.h1
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, &reg);
+ 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, &reg);
+ 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, &reg);
+ 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, &regid);
+ 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 */