patch 9.0.0918: MS-Windows: modifier keys do not work with mouse scroll event
Problem: MS-Windows: modifier keys do not work with mouse scroll events.
Solution: Use K_SPECIAL instead of CSI for the modifier keys. (Christopher
Plewright, closes #11587)
diff --git a/src/term.c b/src/term.c
index 61c2311..3b2c3c0 100644
--- a/src/term.c
+++ b/src/term.c
@@ -5125,7 +5125,7 @@
csi_len, offset, buf, bufsize, buflen);
}
- // Key without modifier (bad Kitty may send this):
+ // Key without modifier (Kitty sends this for Esc):
// {lead}{key}u
else if (argc == 1 && trail == 'u')
{
@@ -5456,6 +5456,23 @@
}
else
#endif // FEAT_GUI
+#ifdef MSWIN
+ if (len >= 3 && tp[0] == CSI && tp[1] == KS_EXTRA
+ && (tp[2] == KE_MOUSEUP
+ || tp[2] == KE_MOUSEDOWN
+ || tp[2] == KE_MOUSELEFT
+ || tp[2] == KE_MOUSERIGHT))
+ {
+ // MS-Windows console sends mouse scroll events encoded:
+ // - CSI
+ // - KS_EXTRA
+ // - {KE_MOUSE[UP|DOWN|LEFT|RIGHT]}
+ slen = 3;
+ key_name[0] = tp[1];
+ key_name[1] = tp[2];
+ }
+ else
+#endif
{
int mouse_index_found = -1;