90 lines
3.3 KiB
Diff
90 lines
3.3 KiB
Diff
--- 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 @@
|
|
{ 1003, PrivMode_MouseAnyEvent },
|
|
#if ENABLE_FRILLS
|
|
{ 1004, PrivMode_FocusEvent },
|
|
{ 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_ExtMouseRight (1UL<<24) // xterm pseudo-utf-8, but works in non-utf-8-locales
|
|
#define PrivMode_BlinkingCursor (1UL<<25)
|
|
#define PrivMode_FocusEvent (1UL<<26)
|
|
+#define PrivMode_ExtMouseSgr (1UL<<27) // sgr mouse extension
|
|
|
|
#define PrivMode_mouse_report (PrivMode_MouseX10|PrivMode_MouseX11|PrivMode_MouseBtnEvent|PrivMode_MouseAnyEvent)
|
|
|