From 546917d21ca10214c24d3871c92b81265de6958c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc=20Andr=C3=A9=20Tanner?= Date: Tue, 11 Jul 2017 23:31:15 +0200 Subject: vis: handle further input after mark and register specifiers This fixes #531 in a more robust way. The key handling functions should be able to handle additional input passed to them as is for example the case when processing the `gv` mapping. --- main.c | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/main.c b/main.c index 5c5399a..c911c69 100644 --- a/main.c +++ b/main.c @@ -1276,8 +1276,9 @@ static const char *macro_record(Vis *vis, const char *keys, const Arg *arg) { if (!vis_macro_record_stop(vis)) { if (!keys[0]) return NULL; - if (keys[1]) - return vis_keys_next(vis, keys); + const char *next = vis_keys_next(vis, keys); + if (next - keys > 1) + return next; enum VisRegister reg = vis_register_from(vis, keys[0]); vis_macro_record(vis, reg); keys++; @@ -1289,8 +1290,9 @@ static const char *macro_record(Vis *vis, const char *keys, const Arg *arg) { static const char *macro_replay(Vis *vis, const char *keys, const Arg *arg) { if (!keys[0]) return NULL; - if (keys[1]) - return vis_keys_next(vis, keys); + const char *next = vis_keys_next(vis, keys); + if (next - keys > 1) + return next; enum VisRegister reg = vis_register_from(vis, keys[0]); vis_macro_replay(vis, reg); return keys+1; @@ -1985,8 +1987,9 @@ static const char *selection_end(Vis *vis, const char *keys, const Arg *arg) { static const char *reg(Vis *vis, const char *keys, const Arg *arg) { if (!keys[0]) return NULL; - if (keys[1]) - return vis_keys_next(vis, keys); + const char *next = vis_keys_next(vis, keys); + if (next - keys > 1) + return next; enum VisRegister reg = vis_register_from(vis, keys[0]); vis_register(vis, reg); return keys+1; @@ -1995,8 +1998,9 @@ static const char *reg(Vis *vis, const char *keys, const Arg *arg) { static const char *mark(Vis *vis, const char *keys, const Arg *arg) { if (!keys[0]) return NULL; - if (keys[1]) - return vis_keys_next(vis, keys); + const char *next = vis_keys_next(vis, keys); + if (next - keys > 1) + return next; enum VisMark mark = vis_mark_from(vis, keys[0]); vis_mark(vis, mark); return keys+1; @@ -2061,8 +2065,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) { if (!keys[0]) return NULL; - if (keys[1]) - return vis_keys_next(vis, keys); + const char *next = vis_keys_next(vis, keys); + if (next - keys > 1) + return next; enum VisRegister reg = vis_register_from(vis, keys[0]); if (reg != VIS_REG_INVALID) { vis_register(vis, reg); -- cgit v1.2.3