From 19c4f8aa853bca99da406dab96b09ca85a29dbcd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc=20Andr=C3=A9=20Tanner?= Date: Sat, 17 Dec 2016 10:41:20 +0100 Subject: vis: always remove consumed keys from input queue When given a mapping like: :map! insert >> ><>x> whose end is a prefix of another mapping we should still remove all already consumed keys from the input queue. Fixes #436 --- vis.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'vis.c') diff --git a/vis.c b/vis.c index 2d9c4e8..1926d62 100644 --- a/vis.c +++ b/vis.c @@ -909,10 +909,11 @@ static void vis_keys_process(Vis *vis, size_t pos) { } else if (binding->alias) { buffer_remove(buf, start - buf->data, end - start); buffer_insert0(buf, start - buf->data, binding->alias); - cur = start; + cur = end = start; } } else if (prefix) { /* incomplete key binding? */ cur = end; + end = start; } else { /* no keybinding */ KeyAction *action = NULL; if (start[0] == '<' && end[-1] == '>') { @@ -937,8 +938,7 @@ static void vis_keys_process(Vis *vis, size_t pos) { } } - if (!prefix) - buffer_remove(buf, keys - buf->data, end - keys); + buffer_remove(buf, keys - buf->data, end - keys); } void vis_keys_feed(Vis *vis, const char *input) { -- cgit v1.2.3