summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarek Szuba <marecki@gentoo.org>2020-12-31 14:45:19 +0000
committerMarek Szuba <marecki@gentoo.org>2020-12-31 14:52:49 +0000
commit01fa0495e04575b2295bfb0afe2164caba7511e4 (patch)
tree0061a2d9bcf391fe24e69333a0e91aaef52d1981 /x11-terms/rxvt-unicode/files
parentmedia-gfx/meshlab: version bump to 2012.12 (diff)
downloadgentoo-01fa0495e04575b2295bfb0afe2164caba7511e4.tar.gz
gentoo-01fa0495e04575b2295bfb0afe2164caba7511e4.tar.bz2
gentoo-01fa0495e04575b2295bfb0afe2164caba7511e4.zip
x11-terms/rxvt-unicode: Optionally support xterm SGR 1006 mouse extension
Needed in order for mouse tracking to work properly in large terminals, for all applications which do not the urxvt 1015 extension (and not many do). Relies on a third-party patch (ported from AUR, and extended to make this feature dependent on a build-time flag, by the bug reporter), as upstream allegedly refused to implement this. Suggested-by: Oscar L <oscar_bugs@nym.hush.com> Closes: https://bugs.gentoo.org/761787 Signed-off-by: Marek Szuba <marecki@gentoo.org>
Diffstat (limited to 'x11-terms/rxvt-unicode/files')
-rw-r--r--x11-terms/rxvt-unicode/files/rxvt-unicode-9.22-sgr-mouse-mode-flag.patch165
1 files changed, 165 insertions, 0 deletions
diff --git a/x11-terms/rxvt-unicode/files/rxvt-unicode-9.22-sgr-mouse-mode-flag.patch b/x11-terms/rxvt-unicode/files/rxvt-unicode-9.22-sgr-mouse-mode-flag.patch
new file mode 100644
index 000000000000..3f6f5d90618e
--- /dev/null
+++ b/x11-terms/rxvt-unicode/files/rxvt-unicode-9.22-sgr-mouse-mode-flag.patch
@@ -0,0 +1,165 @@
+diff --git a/config.h.in b/config.h.in
+index 914d606..b869bfb 100644
+--- a/config.h.in
++++ b/config.h.in
+@@ -9,6 +9,9 @@
+ /* Define if you want handling for rarely used but handy features */
+ #undef ENABLE_FRILLS
+
++/* Define if you want support for SGR mouse mode 1006 */
++#undef ENABLE_SGRMOUSE
++
+ /* Define if you can embed a perl interpreter */
+ #undef ENABLE_PERL
+
+diff --git a/configure.ac b/configure.ac
+index 0da3b59..c8b9c80 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -76,6 +76,7 @@ AC_SEARCH_LIBS(gethostbyname, nsl)
+ AC_SEARCH_LIBS(socket, socket)
+
+ support_frills=yes
++support_sgrmouse=yes
+ support_inheritpixmap=yes
+ support_fading=yes
+ support_keepscrolling=yes
+@@ -109,6 +110,7 @@ AC_ARG_ENABLE(everything,
+ [
+ if test x$enableval = xno; then
+ support_frills=no
++ support_sgrmouse=no
+ support_inheritpixmap=no
+ support_fading=no
+ support_keepscrolling=no
+@@ -137,6 +139,7 @@ AC_ARG_ENABLE(everything,
+ fi
+ if test x$enableval = xyes; then
+ support_frills=yes
++ support_sgrmouse=yes
+ support_inheritpixmap=yes
+ support_fading=yes
+ support_keepscrolling=yes
+@@ -359,6 +362,12 @@ AC_ARG_ENABLE(frills,
+ support_frills=$enableval
+ fi])
+
++AC_ARG_ENABLE(sgrmouse,
++ [ --enable-sgrmouse enable support for SGR mouse mode 1006],
++ [if test x$enableval = xyes -o x$enableval = xno; then
++ support_sgrmouse=$enableval
++ fi])
++
+ AC_ARG_ENABLE(keepscrolling,
+ [ --enable-keepscrolling enable continual scrolling on scrollbar arrow press],
+ [if test x$enableval = xyes -o x$enableval = xno; then
+@@ -666,6 +675,9 @@ fi
+ if test x$support_frills = xyes; then
+ AC_DEFINE(ENABLE_FRILLS, 1, Define if you want handling for rarely used but handy features)
+ fi
++if test x$support_sgrmouse = xyes; then
++ AC_DEFINE(ENABLE_SGRMOUSE, 1, Define if you want support for SGR mouse mode 1006)
++fi
+ if test x$support_mousewheel = xyes; then
+ AC_DEFINE(MOUSE_WHEEL, 1, Define to use wheel events (button4 and button5) to scroll)
+ fi
+diff --git a/src/command.C b/src/command.C
+index 7b79f51..a62ef87 100644
+--- a/src/command.C
++++ b/src/command.C
+@@ -1282,6 +1282,13 @@ rxvt_term::mouse_report (XButtonEvent &ev)
+ int button_number, key_state = 0;
+ int x, y;
+ int code = 32;
++ bool mode_sgr = false;
++
++#if ENABLE_SGRMOUSE
++ if (priv_modes & PrivMode_ExtMouseSgr) mode_sgr = true;
++#endif
++
++ if (mode_sgr) code = 0;
+
+ x = Pixel2Col (ev.x) + 1;
+ y = Pixel2Row (ev.y) + 1;
+@@ -1296,11 +1303,18 @@ rxvt_term::mouse_report (XButtonEvent &ev)
+ code += 32;
+ }
+
+- if (MEvent.button == AnyButton)
++ if (!(mode_sgr) && 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;
+@@ -1361,6 +1375,15 @@ rxvt_term::mouse_report (XButtonEvent &ev)
+ wint_t (32 + x),
+ wint_t (32 + y));
+ else
++#endif
++#if ENABLE_SGRMOUSE
++ if (mode_sgr)
++ tt_printf ("\033[<%d;%d;%d%c",
++ code + button_number + key_state,
++ x,
++ y,
++ (ev.type == ButtonRelease ? 'm' : 'M'));
++ else
+ #endif
+ tt_printf ("\033[M%c%c%c",
+ code + button_number + key_state,
+@@ -2904,7 +2927,7 @@ rxvt_term::process_csi_seq ()
+ 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);
+@@ -3710,6 +3733,9 @@ rxvt_term::process_terminal_mode (int mode, int priv ecb_unused, unsigned int na
+ { 1003, PrivMode_MouseAnyEvent },
+ #if ENABLE_FRILLS
+ { 1005, PrivMode_ExtModeMouse },
++#endif
++#if ENABLE_SGRMOUSE
++ { 1006, PrivMode_ExtMouseSgr },
+ #endif
+ { 1010, PrivMode_TtyOutputInh }, // rxvt extension
+ { 1011, PrivMode_Keypress }, // rxvt extension
+diff --git a/src/rxvt.h b/src/rxvt.h
+index 5c7cf66..2ffd3fb 100644
+--- a/src/rxvt.h
++++ b/src/rxvt.h
+@@ -645,6 +645,7 @@ enum {
+ #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<<27) // sgr mouse extension
+
+ #define PrivMode_mouse_report (PrivMode_MouseX10|PrivMode_MouseX11|PrivMode_MouseBtnEvent|PrivMode_MouseAnyEvent)
+
+diff --git a/src/xdefaults.C b/src/xdefaults.C
+index 894aa8d..e5952b7 100644
+--- a/src/xdefaults.C
++++ b/src/xdefaults.C
+@@ -359,6 +359,9 @@ static const char optionsstring[] = "options: "
+ #if defined(ENABLE_FRILLS)
+ "frills,"
+ #endif
++#if defined(ENABLE_SGRMOUSE)
++ "sgrmouse,"
++#endif
+ #if defined(SELECTION_SCROLLING)
+ "selectionscrolling,"
+ #endif