commit:     01fa0495e04575b2295bfb0afe2164caba7511e4
Author:     Marek Szuba <marecki <AT> gentoo <DOT> org>
AuthorDate: Thu Dec 31 14:45:19 2020 +0000
Commit:     Marek Szuba <marecki <AT> gentoo <DOT> org>
CommitDate: Thu Dec 31 14:52:49 2020 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=01fa0495

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 <AT> nym.hush.com>
Closes: https://bugs.gentoo.org/761787
Signed-off-by: Marek Szuba <marecki <AT> gentoo.org>

 .../rxvt-unicode-9.22-sgr-mouse-mode-flag.patch    | 165 +++++++++++++++++++++
 x11-terms/rxvt-unicode/metadata.xml                |   3 +
 x11-terms/rxvt-unicode/rxvt-unicode-9.22-r7.ebuild | 112 ++++++++++++++
 3 files changed, 280 insertions(+)

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 00000000000..3f6f5d90618
--- /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

diff --git a/x11-terms/rxvt-unicode/metadata.xml 
b/x11-terms/rxvt-unicode/metadata.xml
index e088706493d..b2f262896f2 100644
--- a/x11-terms/rxvt-unicode/metadata.xml
+++ b/x11-terms/rxvt-unicode/metadata.xml
@@ -21,6 +21,9 @@
 <flag name="iso14755">Enable ISO-14755 support</flag>
 <flag name="mousewheel">Enable scrolling via mouse wheel or buttons 4 and 
5</flag>
 <flag name="perl">Enable perl script support. You can still disable this at 
runtime with -pe ""</flag>
+<flag name="sgrmouse">Enable unofficial support for the xterm SGR 1006 
mouse-tracking extension.
+       Needed to properly support mouse events for terminals with more than 223
+       rows or columns, in applications not supporting the urxvt 1015 
extension.</flag>
 <flag name="unicode3">Use 21 instead of 16 bits to represent unicode 
characters</flag>
 <flag name="utmp">Enable utmp support</flag>
 <flag name="wtmp">Enable wtmp support</flag>

diff --git a/x11-terms/rxvt-unicode/rxvt-unicode-9.22-r7.ebuild 
b/x11-terms/rxvt-unicode/rxvt-unicode-9.22-r7.ebuild
new file mode 100644
index 00000000000..3f1cb44b6c4
--- /dev/null
+++ b/x11-terms/rxvt-unicode/rxvt-unicode-9.22-r7.ebuild
@@ -0,0 +1,112 @@
+# Copyright 1999-2020 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=7
+
+inherit autotools desktop systemd
+
+COLOUR_PATCH_NAME="${PN}-9.22_24-bit-color_cpixl-20201108.patch"
+
+DESCRIPTION="rxvt clone with xft and unicode support"
+HOMEPAGE="http://software.schmorp.de/pkg/rxvt-unicode.html";
+SRC_URI="http://dist.schmorp.de/rxvt-unicode/Attic/${P}.tar.bz2
+       https://dev.gentoo.org/~marecki/dists/${PN}/${COLOUR_PATCH_NAME}.xz";
+
+LICENSE="GPL-3"
+SLOT="0"
+KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~ia64 ~mips ~ppc ~ppc64 ~sparc ~x86 
~amd64-linux ~x86-linux ~ppc-macos ~x64-macos ~x86-macos ~sparc-solaris"
+IUSE="-24-bit-color 256-color blink fading-colors +font-styles gdk-pixbuf 
iso14755 +mousewheel
+       +perl -sgrmouse startup-notification unicode3 +utmp +wtmp xft"
+
+RESTRICT="test"
+
+RDEPEND=">=sys-libs/ncurses-5.7-r6:=
+       media-libs/fontconfig
+       x11-libs/libX11
+       x11-libs/libXrender
+       gdk-pixbuf? ( x11-libs/gdk-pixbuf )
+       kernel_Darwin? ( dev-perl/Mac-Pasteboard )
+       perl? ( dev-lang/perl:= )
+       startup-notification? ( x11-libs/startup-notification )
+       xft? ( x11-libs/libXft )"
+DEPEND="${RDEPEND}
+       x11-base/xorg-proto"
+BDEPEND="virtual/pkgconfig"
+
+PATCHES=(
+       "${FILESDIR}"/${PN}-9.06-case-insensitive-fs.patch
+       "${FILESDIR}"/${PN}-9.21-xsubpp.patch
+       "${FILESDIR}"/${PN}-9.22-sgr-mouse-mode-flag.patch
+       "${WORKDIR}"/${COLOUR_PATCH_NAME}
+)
+DOCS=(
+       Changes
+       README.FAQ
+       doc/README.xvt
+       doc/changes.txt
+       doc/etc/${PN}.term{cap,info}
+       doc/rxvt-tabbed
+)
+
+src_prepare() {
+       default
+
+       # kill the rxvt-unicode terminfo file - #192083
+       sed -i -e "/rxvt-unicode.terminfo/d" doc/Makefile.in || die "sed failed"
+
+       eautoreconf
+}
+
+src_configure() {
+       # --enable-everything goes first: the order of the arguments matters
+       econf --enable-everything \
+               $(use_enable 24-bit-color) \
+               $(use_enable 256-color) \
+               $(use_enable blink text-blink) \
+               $(use_enable fading-colors fading) \
+               $(use_enable font-styles) \
+               $(use_enable gdk-pixbuf pixbuf) \
+               $(use_enable iso14755) \
+               $(use_enable mousewheel) \
+               $(use_enable perl) \
+               $(use_enable sgrmouse) \
+               $(use_enable startup-notification) \
+               $(use_enable unicode3) \
+               $(use_enable utmp) \
+               $(use_enable wtmp) \
+               $(use_enable xft)
+}
+
+src_compile() {
+       default
+
+       sed -i \
+               -e 's/RXVT_BASENAME = "rxvt"/RXVT_BASENAME = "urxvt"/' \
+               "${S}"/doc/rxvt-tabbed || die
+}
+
+src_install() {
+       default
+
+       systemd_douserunit "${FILESDIR}"/urxvtd.service
+
+       make_desktop_entry urxvt rxvt-unicode utilities-terminal \
+               "System;TerminalEmulator"
+}
+
+pkg_postinst() {
+       if use 24-bit-color; then
+               ewarn
+               ewarn "You have enabled 24-bit colour support in ${PN}, which 
is UNOFFICIAL and INCOMPLETE."
+               ewarn "You may or may not encounter visual glitches or 
stability issues. When in doubt,"
+               ewarn "rebuild =${CATEGORY}/${PF} with USE=-24-bit-color (the 
default setting)."
+               ewarn
+       fi
+
+       if use sgrmouse; then
+               ewarn
+               ewarn "Support for the SGR 1006 mouse extension in ${PN} is 
UNOFFICIAL and provided as-is."
+               ewarn "When in doubt, rebuild =${CATEGORY}/${PF} with 
USE=-sgrmouse (the default setting)."
+               ewarn
+       fi
+}

Reply via email to