aboutsummaryrefslogtreecommitdiff
path: root/vis.c
diff options
context:
space:
mode:
authorEz Diy <ezdiy@outlook.com>2020-09-17 00:43:27 +0200
committerEz Diy <ezdiy@outlook.com>2020-09-17 00:43:27 +0200
commitdaf4b8d3894cca25b3015d35e9168b7b2569d43b (patch)
tree46845a28fab402fb91ec4409a00684e048133eb3 /vis.c
parent1b9d70eafc24eaa82c2796fa6d72a482bb09dba9 (diff)
downloadvis-daf4b8d3894cca25b3015d35e9168b7b2569d43b.tar.gz
vis-daf4b8d3894cca25b3015d35e9168b7b2569d43b.tar.xz
Pass up terminal CSI as events to Lua.
Diffstat (limited to 'vis.c')
-rw-r--r--vis.c15
1 files changed, 15 insertions, 0 deletions
diff --git a/vis.c b/vis.c
index c4e8fa1..182ee98 100644
--- a/vis.c
+++ b/vis.c
@@ -100,6 +100,10 @@ bool vis_event_emit(Vis *vis, enum VisEvents id, ...) {
if (vis->event->quit)
vis->event->quit(vis);
break;
+ case VIS_EVENT_TERM_CSI:
+ if (vis->event->term_csi)
+ vis->event->term_csi(vis, va_arg(ap, const long *));
+ break;
}
va_end(ap);
@@ -1304,6 +1308,17 @@ static const char *getkey(Vis *vis) {
}
TermKey *termkey = vis->ui->termkey_get(vis->ui);
+ if (key.type == TERMKEY_TYPE_UNKNOWN_CSI) {
+ long args[18];
+ size_t nargs;
+ unsigned long cmd;
+ if (termkey_interpret_csi(termkey, &key, &args[2], &nargs, &cmd) == TERMKEY_RES_KEY) {
+ args[0] = (long)cmd;
+ args[1] = nargs;
+ vis_event_emit(vis, VIS_EVENT_TERM_CSI, args);
+ }
+ return getkey(vis);
+ }
termkey_strfkey(termkey, vis->key, sizeof(vis->key), &key, TERMKEY_FORMAT_VIM);
return vis->key;
}