aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorChih-Hsuan Yen <yan12125@gmail.com>2018-01-29 22:47:25 +0800
committerJustin M. Keyes <justinkz@gmail.com>2018-01-31 23:55:15 +0100
commit3a5721e91ba890718319213154ba6964c9dca4d2 (patch)
treef65352a4ab4c382a5ca26f5c807fed32c544f02f /src
parent6452831cf985bd31d16eb5a04b345038f45d203f (diff)
downloadrneovim-3a5721e91ba890718319213154ba6964c9dca4d2.tar.gz
rneovim-3a5721e91ba890718319213154ba6964c9dca4d2.tar.bz2
rneovim-3a5721e91ba890718319213154ba6964c9dca4d2.zip
tui: libtermkey: force CSI driver for mouse input #7948
Fixes #7932 Nvim (tui.c) always enables SGR mouse (TUIData.unibi_ext.enable_mouse). But if libtermkey sees key_mouse (kmous) in terminfo its terminfo driver (driver-ti.c) will be activated, which by accident only supports X10 protocol. The libtermkey CSI driver (driver-csi.c), in contrast, supports SGR. We can force libtermkey to ignore the terminfo key_mouse entry by returning NULL in the tui_tk_ti_getstr hook. That forces the CSI driver. What is the effect of returning NULL from `tui_tk_ti_getstr()`? - libtermkey `driver-ti.c:load_terminfo()` skips the entry. - `termkey.c:peekkey()` iterates through all drivers, it finds `TERMKEY_RES_NONE` for the ti driver and falls back to the CSI driver.
Diffstat (limited to 'src')
-rw-r--r--src/nvim/tui/tui.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/src/nvim/tui/tui.c b/src/nvim/tui/tui.c
index 2dfe7faa04..70e19e1d93 100644
--- a/src/nvim/tui/tui.c
+++ b/src/nvim/tui/tui.c
@@ -1813,6 +1813,12 @@ static const char *tui_tk_ti_getstr(const char *name, const char *value,
if (value != NULL && strequal(stty_erase, value)) {
return stty_erase[0] == DEL ? CTRL_H_STR : DEL_STR;
}
+ } else if (strequal(name, "key_mouse")) {
+ DLOG("libtermkey:kmous=%s", value);
+ // If key_mouse is found, libtermkey uses its terminfo driver (driver-ti.c)
+ // for mouse input, which by accident only supports X10 protocol.
+ // Force libtermkey to fallback to its CSI driver (driver-csi.c). #7948
+ return NULL;
}
return value;