diff options
| author | Marc André Tanner <mat@brain-dump.org> | 2015-11-03 16:34:37 +0100 |
|---|---|---|
| committer | Marc André Tanner <mat@brain-dump.org> | 2015-11-03 16:39:17 +0100 |
| commit | ce14602c3bd22b1b2793da18dda49f921c72cf88 (patch) | |
| tree | e55dfbc6be5cc49d435a564b244b5f3fdce95081 /main.c | |
| parent | 250cdf484891e835f20c8624570daef0722e296f (diff) | |
| download | vis-ce14602c3bd22b1b2793da18dda49f921c72cf88.tar.gz vis-ce14602c3bd22b1b2793da18dda49f921c72cf88.tar.xz | |
vis: make single character replace (r command) repeatable
Diffstat (limited to 'main.c')
| -rw-r--r-- | main.c | 16 |
1 files changed, 9 insertions, 7 deletions
@@ -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; } |
