aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarc André Tanner <mat@brain-dump.org>2015-10-25 22:20:44 +0100
committerMarc André Tanner <mat@brain-dump.org>2015-10-25 22:46:43 +0100
commite09b9c91e60024488aafd780708346e1655a9aca (patch)
tree574337db5f301a9131093e0a45d972bab3625cdf
parent2a4f0b6374e511dc93161cd7b9a98a1df5c91330 (diff)
downloadvis-e09b9c91e60024488aafd780708346e1655a9aca.tar.gz
vis-e09b9c91e60024488aafd780708346e1655a9aca.tar.xz
vis: introduce vis_register_{get,set} API
-rw-r--r--vis.c27
-rw-r--r--vis.h8
2 files changed, 29 insertions, 6 deletions
diff --git a/vis.c b/vis.c
index 03b2787..6acc55b 100644
--- a/vis.c
+++ b/vis.c
@@ -958,17 +958,20 @@ static const char *selection_restore(Vis *vis, const char *keys, const Arg *arg)
return keys;
}
-static const char *key2register(Vis *vis, const char *keys, Register **reg) {
- *reg = NULL;
+static const char *key2register(Vis *vis, const char *keys, enum VisRegister *reg) {
+ *reg = VIS_REGISTER_INVALID;
if (!keys[0])
return NULL;
if (keys[0] >= 'a' && keys[0] <= 'z')
- *reg = &vis->registers[keys[0] - 'a'];
+ *reg = keys[0] - 'a';
return keys+1;
}
static const char *reg(Vis *vis, const char *keys, const Arg *arg) {
- return key2register(vis, keys, &vis->action.reg);
+ enum VisRegister reg;
+ keys = key2register(vis, keys, &reg);
+ vis_register_set(vis, reg);
+ return keys;
}
static const char *key2mark(Vis *vis, const char *keys, int *mark) {
@@ -1049,8 +1052,9 @@ 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) {
- Register *reg;
- keys = key2register(vis, keys, &reg);
+ enum VisRegister regid;
+ keys = key2register(vis, keys, &regid);
+ Register *reg = vis_register_get(vis, regid);
if (reg) {
int pos = view_cursor_get(vis->win->view);
editor_insert(vis, pos, reg->data, reg->len);
@@ -2902,3 +2906,14 @@ int vis_count_get(Vis *vis) {
void vis_count_set(Vis *vis, int count) {
vis->action.count = count;
}
+
+void vis_register_set(Vis *vis, enum VisRegister reg) {
+ if (reg < LENGTH(vis->registers))
+ vis->action.reg = &vis->registers[reg];
+}
+
+Register *vis_register_get(Vis *vis, enum VisRegister reg) {
+ if (reg < LENGTH(vis->registers))
+ return &vis->registers[reg];
+ return NULL;
+}
diff --git a/vis.h b/vis.h
index d2099bf..c98b51b 100644
--- a/vis.h
+++ b/vis.h
@@ -168,6 +168,14 @@ enum VisMark {
void vis_mark_set(Vis*, enum VisMark mark, size_t pos);
+enum VisRegister {
+ /* TODO: temporary */
+ VIS_REGISTER_INVALID = REG_LAST,
+};
+
+void vis_register_set(Vis*, enum VisRegister);
+Register *vis_register_get(Vis*, enum VisRegister);
+
void vis_repeat(Vis*);
bool vis_cmd(Vis*, const char *cmdline);