aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarc André Tanner <mat@brain-dump.org>2015-11-03 16:34:37 +0100
committerMarc André Tanner <mat@brain-dump.org>2015-11-03 16:39:17 +0100
commitce14602c3bd22b1b2793da18dda49f921c72cf88 (patch)
treee55dfbc6be5cc49d435a564b244b5f3fdce95081
parent250cdf484891e835f20c8624570daef0722e296f (diff)
downloadvis-ce14602c3bd22b1b2793da18dda49f921c72cf88.tar.gz
vis-ce14602c3bd22b1b2793da18dda49f921c72cf88.tar.xz
vis: make single character replace (r command) repeatable
-rw-r--r--main.c16
1 files changed, 9 insertions, 7 deletions
diff --git a/main.c b/main.c
index 4cc00cd..36b9bcd 100644
--- a/main.c
+++ b/main.c
@@ -1195,14 +1195,16 @@ static const char *replace(Vis *vis, const char *keys, const Arg *arg) {
if (!keys[0])
return NULL;
const char *next = vis_key_next(vis, keys);
+ if (!next)
+ return NULL;
size_t len = next - keys;
- /* TODO: fix
- action_reset(vis, &vis->action_prev);
- vis->action_prev.op = &ops[OP_REPEAT_REPLACE];
- buffer_put(&vis->buffer_repeat, keys, len);
- */
- vis_replace_key(vis, keys, len);
- text_snapshot(vis_text(vis));
+ char key[len+1];
+ memcpy(key, keys, len);
+ key[len] = '\0';
+ vis_operator(vis, OP_REPLACE);
+ vis_motion(vis, MOVE_NOP);
+ vis_keys_inject(vis, next, key);
+ vis_keys_inject(vis, next+len, "<Escape>");
return next;
}