diff options
Diffstat (limited to 'sgr-mouse-mode.patch')
-rw-r--r-- | sgr-mouse-mode.patch | 90 |
1 files changed, 90 insertions, 0 deletions
diff --git a/sgr-mouse-mode.patch b/sgr-mouse-mode.patch new file mode 100644 index 000000000000..186e8fdb74f8 --- /dev/null +++ b/sgr-mouse-mode.patch @@ -0,0 +1,90 @@ +--- src/command.C 2014-12-13 13:22:09.000000000 +0100 ++++ src/command.C 2016-01-13 04:50:39.161862513 +0100 +@@ -1280,6 +1280,8 @@ + int x, y; + int code = 32; + ++ if (priv_modes & PrivMode_ExtMouseSgr) code = 0; ++ + x = Pixel2Col (ev.x) + 1; + y = Pixel2Row (ev.y) + 1; + +@@ -1293,11 +1295,18 @@ + code += 32; + } + +- if (MEvent.button == AnyButton) ++ if (!(priv_modes & PrivMode_ExtMouseSgr) && MEvent.button == AnyButton) + button_number = 3; + else + { +- button_number = MEvent.button - Button1; ++ if (ev.type == MotionNotify) { ++ if (ev.state & Button1Mask) button_number = 0; ++ else if (ev.state & Button2Mask) button_number = 1; ++ else if (ev.state & Button3Mask) button_number = 2; ++ else return; ++ } else { ++ button_number = ev.button - Button1; ++ } + /* add 0x3D for wheel events, like xterm does */ + if (button_number >= 3) + button_number += 64 - 3; +@@ -1347,16 +1356,22 @@ + #endif + + #if ENABLE_FRILLS ++ if (priv_modes & PrivMode_ExtMouseSgr) ++ tt_printf ("\033[<%d;%d;%d%c", ++ code + button_number + key_state, ++ x, ++ y, ++ (ev.type == ButtonRelease ? 'm' : 'M')); +- if (priv_modes & PrivMode_ExtMouseRight) ++ else if (priv_modes & PrivMode_ExtMouseRight) + tt_printf ("\033[%d;%d;%dM", + code + button_number + key_state, + x, + y); + else if (priv_modes & PrivMode_ExtModeMouse) + tt_printf ("\033[M%c%lc%lc", + code + button_number + key_state, + wint_t (32 + x), + wint_t (32 + y)); + else + #endif + tt_printf ("\033[M%c%c%c", +@@ -2908,7 +2913,7 @@ + scr_soft_reset (); + + static const int pm_h[] = { 7, 25 }; +- static const int pm_l[] = { 1, 3, 4, 5, 6, 9, 66, 1000, 1001, 1005, 1015, 1049 }; ++ static const int pm_l[] = { 1, 3, 4, 5, 6, 9, 66, 1000, 1001, 1002, 1003, 1005, 1006, 1015, 1049 }; + + process_terminal_mode ('h', 0, ecb_array_length (pm_h), pm_h); + process_terminal_mode ('l', 0, ecb_array_length (pm_l), pm_l); +@@ -3713,13 +3718,14 @@ + { 1002, PrivMode_MouseBtnEvent }, + { 1003, PrivMode_MouseAnyEvent }, + #if ENABLE_FRILLS + { 1005, PrivMode_ExtModeMouse }, ++ { 1006, PrivMode_ExtMouseSgr }, + #endif + { 1010, PrivMode_TtyOutputInh }, // rxvt extension + { 1011, PrivMode_Keypress }, // rxvt extension + #if ENABLE_FRILLS + { 1015, PrivMode_ExtMouseRight }, // urxvt extension of 1005 + #endif + // 1035 enable modifiers for alt, numlock NYI + // 1036 send ESC for meta keys NYI + // 1037 send DEL for keypad delete NYI +--- src/rxvt.h 2014-12-17 16:33:08.000000000 +0100 ++++ src/rxvt.h 2016-01-13 03:42:31.508911380 +0100 +@@ -644,6 +644,7 @@ + #define PrivMode_ExtModeMouse (1UL<<23) // xterm pseudo-utf-8 hack + #define PrivMode_ExtMouseRight (1UL<<24) // xterm pseudo-utf-8, but works in non-utf-8-locales + #define PrivMode_BlinkingCursor (1UL<<25) ++#define PrivMode_ExtMouseSgr (1UL<<26) // sgr mouse extension + + #define PrivMode_mouse_report (PrivMode_MouseX10|PrivMode_MouseX11|PrivMode_MouseBtnEvent|PrivMode_MouseAnyEvent) + |