feat(tui): recognize X1 and X2 mouse events

Ref:
https://invisible-island.net/xterm/ctlseqs/ctlseqs.html#h3-Other-buttons
This commit is contained in:
zeertzjq
2025-01-21 20:50:33 +08:00
parent d7aba51d39
commit 44dbfcfba4
3 changed files with 11 additions and 0 deletions

View File

@ -403,6 +403,7 @@ static unsigned handle_mouse_event(const char **ptr, uint8_t *buf, unsigned bufs
if (type != KS_EXTRA if (type != KS_EXTRA
|| !((mouse_code >= KE_LEFTMOUSE && mouse_code <= KE_RIGHTRELEASE) || !((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_MOUSEDOWN && mouse_code <= KE_MOUSERIGHT)
|| mouse_code == KE_MOUSEMOVE)) { || mouse_code == KE_MOUSEMOVE)) {
return bufsize; return bufsize;

View File

@ -387,6 +387,10 @@ static void forward_mouse_event(TermInput *input, TermKeyKey *key)
len += (size_t)snprintf(buf + len, sizeof(buf) - len, "Middle"); len += (size_t)snprintf(buf + len, sizeof(buf) - len, "Middle");
} else if (button == 3) { } else if (button == 3) {
len += (size_t)snprintf(buf + len, sizeof(buf) - len, "Right"); 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) { switch (ev) {

View File

@ -327,6 +327,12 @@ TermKeyResult termkey_interpret_mouse(TermKey *tk, const TermKeyKey *key, TermKe
btn = code + 4 - 64; btn = code + 4 - 64;
break; break;
case 128:
case 129:
*event = drag ? TERMKEY_MOUSE_DRAG : TERMKEY_MOUSE_PRESS;
btn = code + 8 - 128;
break;
default: default:
*event = TERMKEY_MOUSE_UNKNOWN; *event = TERMKEY_MOUSE_UNKNOWN;
} }