aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorzeertzjq <zeertzjq@outlook.com>2025-01-21 20:50:33 +0800
committerzeertzjq <zeertzjq@outlook.com>2025-01-21 21:01:46 +0800
commit44dbfcfba4b09bb0e38f4a3f1960fa256a7bed71 (patch)
tree0476446d9629bea7965635d3ddb8df79449b329d
parentd7aba51d39c7409ef388ed7cffe3e31d9fcec163 (diff)
downloadrneovim-44dbfcfba4b09bb0e38f4a3f1960fa256a7bed71.tar.gz
rneovim-44dbfcfba4b09bb0e38f4a3f1960fa256a7bed71.tar.bz2
rneovim-44dbfcfba4b09bb0e38f4a3f1960fa256a7bed71.zip
feat(tui): recognize X1 and X2 mouse events
Ref: https://invisible-island.net/xterm/ctlseqs/ctlseqs.html#h3-Other-buttons
-rw-r--r--src/nvim/os/input.c1
-rw-r--r--src/nvim/tui/input.c4
-rw-r--r--src/nvim/tui/termkey/driver-csi.c6
3 files changed, 11 insertions, 0 deletions
diff --git a/src/nvim/os/input.c b/src/nvim/os/input.c
index 579b08c554..3259fb500b 100644
--- a/src/nvim/os/input.c
+++ b/src/nvim/os/input.c
@@ -403,6 +403,7 @@ static unsigned handle_mouse_event(const char **ptr, uint8_t *buf, unsigned bufs
if (type != KS_EXTRA
|| !((mouse_code >= KE_LEFTMOUSE && mouse_code <= KE_RIGHTRELEASE)
+ || (mouse_code >= KE_X1MOUSE && mouse_code <= KE_X2RELEASE)
|| (mouse_code >= KE_MOUSEDOWN && mouse_code <= KE_MOUSERIGHT)
|| mouse_code == KE_MOUSEMOVE)) {
return bufsize;
diff --git a/src/nvim/tui/input.c b/src/nvim/tui/input.c
index 9d901e94ce..1f73f2d135 100644
--- a/src/nvim/tui/input.c
+++ b/src/nvim/tui/input.c
@@ -387,6 +387,10 @@ static void forward_mouse_event(TermInput *input, TermKeyKey *key)
len += (size_t)snprintf(buf + len, sizeof(buf) - len, "Middle");
} else if (button == 3) {
len += (size_t)snprintf(buf + len, sizeof(buf) - len, "Right");
+ } else if (button == 8) {
+ len += (size_t)snprintf(buf + len, sizeof(buf) - len, "X1");
+ } else if (button == 9) {
+ len += (size_t)snprintf(buf + len, sizeof(buf) - len, "X2");
}
switch (ev) {
diff --git a/src/nvim/tui/termkey/driver-csi.c b/src/nvim/tui/termkey/driver-csi.c
index 9741ec72b9..d427be50ff 100644
--- a/src/nvim/tui/termkey/driver-csi.c
+++ b/src/nvim/tui/termkey/driver-csi.c
@@ -327,6 +327,12 @@ TermKeyResult termkey_interpret_mouse(TermKey *tk, const TermKeyKey *key, TermKe
btn = code + 4 - 64;
break;
+ case 128:
+ case 129:
+ *event = drag ? TERMKEY_MOUSE_DRAG : TERMKEY_MOUSE_PRESS;
+ btn = code + 8 - 128;
+ break;
+
default:
*event = TERMKEY_MOUSE_UNKNOWN;
}