diff options
author | zeertzjq <zeertzjq@outlook.com> | 2022-08-30 10:55:00 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-08-30 10:55:00 +0800 |
commit | 568737d5b39a4b58cab05d4edc2599653979770c (patch) | |
tree | 462d6c51b17dd983ed337fceca752c7a819da995 /src | |
parent | 7f20d61e0036433a819cb89aa73baf81d4ff5d2c (diff) | |
download | rneovim-568737d5b39a4b58cab05d4edc2599653979770c.tar.gz rneovim-568737d5b39a4b58cab05d4edc2599653979770c.tar.bz2 rneovim-568737d5b39a4b58cab05d4edc2599653979770c.zip |
feat(tui): recognize sidescroll events (#19992)
Ref https://invisible-island.net/xterm/ctlseqs/ctlseqs.html#h3-Other-buttons
This works in xterm and kitty.
CSI < 66 ; x ; y M sequence is for ScrollWheelLeft.
CSI < 67 ; x ; y M sequence is for ScrollWheelRight.
Diffstat (limited to 'src')
-rw-r--r-- | src/nvim/tui/input.c | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/src/nvim/tui/input.c b/src/nvim/tui/input.c index 03cfb830e6..d269878f46 100644 --- a/src/nvim/tui/input.c +++ b/src/nvim/tui/input.c @@ -398,6 +398,14 @@ static void forward_mouse_event(TermInput *input, TermKeyKey *key) button = last_pressed_button; } + if (ev == TERMKEY_MOUSE_UNKNOWN && !(key->code.mouse[0] & 0x20)) { + int code = key->code.mouse[0] & ~0x3c; + if (code == 66 || code == 67) { + ev = TERMKEY_MOUSE_PRESS; + button = code - 60; + } + } + if (button == 0 || (ev != TERMKEY_MOUSE_PRESS && ev != TERMKEY_MOUSE_DRAG && ev != TERMKEY_MOUSE_RELEASE)) { return; @@ -431,8 +439,11 @@ static void forward_mouse_event(TermInput *input, TermKeyKey *key) if (button == 4) { len += (size_t)snprintf(buf + len, sizeof(buf) - len, "ScrollWheelUp"); } else if (button == 5) { - len += (size_t)snprintf(buf + len, sizeof(buf) - len, - "ScrollWheelDown"); + len += (size_t)snprintf(buf + len, sizeof(buf) - len, "ScrollWheelDown"); + } else if (button == 6) { + len += (size_t)snprintf(buf + len, sizeof(buf) - len, "ScrollWheelLeft"); + } else if (button == 7) { + len += (size_t)snprintf(buf + len, sizeof(buf) - len, "ScrollWheelRight"); } else { len += (size_t)snprintf(buf + len, sizeof(buf) - len, "Mouse"); last_pressed_button = button; |