vis
a vi-like editor based on Plan 9's structural regular expressions
git clone https://9o.is/git/vis.git
commit d4a9d4977afc813510f9e6aab86f8d3794c28859 parent 9f16ef0b66770a19312200501086146912331d1e Author: Marc André Tanner <mat@brain-dump.org> Date: Sat, 19 Sep 2015 16:11:59 +0200 vis: add rudimentary support for key aliases This will eventually be exposed via a :map style command. Diffstat:
| M | editor.h | | | 1 | + |
| M | vis.c | | | 13 | +++++++++---- |
2 files changed, 10 insertions(+), 4 deletions(-)
diff --git a/editor.h b/editor.h @@ -33,6 +33,7 @@ typedef struct { /* returns a pointer to the first not consumed character in keys * or NULL if not enough input was available to complete the command */ const Arg arg; + const char *alias; } KeyBinding; typedef struct Mode Mode; diff --git a/vis.c b/vis.c @@ -2625,10 +2625,15 @@ static const char *keypress(const char *input) { *end = tmp; if (binding) { /* exact match */ - end = (char*)binding->func(end, &binding->arg); - if (!end) - break; - start = cur = end; + if (binding->func) { + end = (char*)binding->func(end, &binding->arg); + if (!end) + break; + start = cur = end; + } else { /* alias */ + buffer_put0(&vis->input_queue, end); + buffer_prepend0(&vis->input_queue, binding->alias); + } } else if (prefix) { /* incomplete key binding? */ cur = end; } else { /* no keybinding */