summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2011-10-20 21:09:35 +0200
committerBram Moolenaar <Bram@vim.org>2011-10-20 21:09:35 +0200
commitc842748302d33bcf41c6b796a43d9dbbf44cdc29 (patch)
treed16038ab394271bfe0e2765cdec768746d767378
parent62dbdc4a5ae16900d17473dbfe3be3acea321bf0 (diff)
updated for version 7.3.343v7.3.343
Problem: No mouse support for urxvt. Solution: Implement urxvt mouse support, also for > 252 columns. (Yiding Jia)
-rw-r--r--src/feature.h21
-rw-r--r--src/keymap.h9
-rw-r--r--src/option.h3
-rw-r--r--src/os_unix.c38
-rw-r--r--src/version.c7
5 files changed, 70 insertions, 8 deletions
diff --git a/src/feature.h b/src/feature.h
index 2fdd901b32..6d5387ed0d 100644
--- a/src/feature.h
+++ b/src/feature.h
@@ -1053,6 +1053,9 @@
# ifdef FEAT_BIG
# define FEAT_MOUSE_DEC
# endif
+# ifdef FEAT_BIG
+# define FEAT_MOUSE_URXVT
+# endif
# if defined(FEAT_NORMAL) && (defined(MSDOS) || defined(WIN3264))
# define DOS_MOUSE
# endif
@@ -1068,13 +1071,23 @@
#if defined(FEAT_NORMAL) && defined(HAVE_SYSMOUSE)
# define FEAT_SYSMOUSE
#endif
+
+/* urxvt is a small variation of mouse_xterm, and shares its code */
+#if defined(FEAT_MOUSE_URXVT) && !defined(FEAT_MOUSE_XTERM)
+# define FEAT_MOUSE_XTERM
+#endif
+
/* Define FEAT_MOUSE when any of the above is defined or FEAT_GUI. */
#if !defined(FEAT_MOUSE_TTY) \
&& (defined(FEAT_MOUSE_XTERM) \
- || defined(FEAT_MOUSE_NET) || defined(FEAT_MOUSE_DEC) \
- || defined(DOS_MOUSE) || defined(FEAT_MOUSE_GPM) \
- || defined(FEAT_MOUSE_JSB) || defined(FEAT_MOUSE_PTERM) \
- || defined(FEAT_SYSMOUSE))
+ || defined(FEAT_MOUSE_NET) \
+ || defined(FEAT_MOUSE_DEC) \
+ || defined(DOS_MOUSE) \
+ || defined(FEAT_MOUSE_GPM) \
+ || defined(FEAT_MOUSE_JSB) \
+ || defined(FEAT_MOUSE_PTERM) \
+ || defined(FEAT_SYSMOUSE) \
+ || defined(FEAT_MOUSE_URXVT))
# define FEAT_MOUSE_TTY /* include non-GUI mouse support */
#endif
#if !defined(FEAT_MOUSE) && (defined(FEAT_MOUSE_TTY) || defined(FEAT_GUI))
diff --git a/src/keymap.h b/src/keymap.h
index 16d128a881..8ec009387f 100644
--- a/src/keymap.h
+++ b/src/keymap.h
@@ -92,13 +92,13 @@
*/
#define KS_TEAROFF 244
-/* used for JSB term mouse */
+/* Used for JSB term mouse. */
#define KS_JSBTERM_MOUSE 243
-/* used a termcap entry that produces a normal character */
+/* Used a termcap entry that produces a normal character. */
#define KS_KEY 242
-/* Used for the qnx pterm mouse */
+/* Used for the qnx pterm mouse. */
#define KS_PTERM_MOUSE 241
/* Used for click in a tab pages label. */
@@ -107,6 +107,9 @@
/* Used for menu in a tab pages line. */
#define KS_TABMENU 239
+/* Used for the urxvt mouse. */
+#define KS_URXVT_MOUSE 238
+
/*
* Filler used after KS_SPECIAL and others
*/
diff --git a/src/option.h b/src/option.h
index 1d4d950d1b..21c2753422 100644
--- a/src/option.h
+++ b/src/option.h
@@ -819,7 +819,7 @@ EXTERN long p_ttyscroll; /* 'ttyscroll' */
EXTERN char_u *p_ttym; /* 'ttymouse' */
EXTERN unsigned ttym_flags;
# ifdef IN_OPTION_C
-static char *(p_ttym_values[]) = {"xterm", "xterm2", "dec", "netterm", "jsbterm", "pterm", NULL};
+static char *(p_ttym_values[]) = {"xterm", "xterm2", "dec", "netterm", "jsbterm", "pterm", "urxvt", NULL};
# endif
# define TTYM_XTERM 0x01
# define TTYM_XTERM2 0x02
@@ -827,6 +827,7 @@ static char *(p_ttym_values[]) = {"xterm", "xterm2", "dec", "netterm", "jsbterm"
# define TTYM_NETTERM 0x08
# define TTYM_JSBTERM 0x10
# define TTYM_PTERM 0x20
+# define TTYM_URXVT 0x40
#endif
EXTERN char_u *p_udir; /* 'undodir' */
EXTERN long p_ul; /* 'undolevels' */
diff --git a/src/os_unix.c b/src/os_unix.c
index 48176e1803..cdf5abe7fe 100644
--- a/src/os_unix.c
+++ b/src/os_unix.c
@@ -2158,10 +2158,13 @@ use_xterm_like_mouse(name)
* Return non-zero when using an xterm mouse, according to 'ttymouse'.
* Return 1 for "xterm".
* Return 2 for "xterm2".
+ * Return 3 for "urxvt".
*/
int
use_xterm_mouse()
{
+ if (ttym_flags == TTYM_URXVT)
+ return 3;
if (ttym_flags == TTYM_XTERM2)
return 2;
if (ttym_flags == TTYM_XTERM)
@@ -3318,6 +3321,17 @@ mch_setmouse(on)
return;
xterm_mouse_vers = use_xterm_mouse();
+
+# ifdef FEAT_MOUSE_URXVT
+ if (ttym_flags == TTYM_URXVT) {
+ out_str_nf((char_u *)
+ (on
+ ? IF_EB("\033[?1015h", ESC_STR "[?1015h")
+ : IF_EB("\033[?1015l", ESC_STR "[?1015l")));
+ ison = on;
+ }
+# endif
+
if (xterm_mouse_vers > 0)
{
if (on) /* enable mouse events, use mouse tracking if available */
@@ -3434,6 +3448,9 @@ check_mouse_termcode()
{
# ifdef FEAT_MOUSE_XTERM
if (use_xterm_mouse()
+# ifdef FEAT_MOUSE_URXVT
+ && use_xterm_mouse() != 3
+# endif
# ifdef FEAT_GUI
&& !gui.in_use
# endif
@@ -3523,6 +3540,27 @@ check_mouse_termcode()
else
del_mouse_termcode(KS_PTERM_MOUSE);
# endif
+# ifdef FEAT_MOUSE_URXVT
+ /* same as the dec mouse */
+ if (use_xterm_mouse() == 3
+# ifdef FEAT_GUI
+ && !gui.in_use
+# endif
+ )
+ {
+ set_mouse_termcode(KS_URXVT_MOUSE, (char_u *)(term_is_8bit(T_NAME)
+ ? IF_EB("\233", CSI_STR)
+ : IF_EB("\033[", ESC_STR "[")));
+
+ if (*p_mouse != NUL)
+ {
+ mch_setmouse(FALSE);
+ setmouse();
+ }
+ }
+ else
+ del_mouse_termcode(KS_URXVT_MOUSE);
+# endif
}
#endif
diff --git a/src/version.c b/src/version.c
index 260378d672..9fe48f3c72 100644
--- a/src/version.c
+++ b/src/version.c
@@ -379,6 +379,11 @@ static char *(features[]) =
# else
"-mouse_xterm",
# endif
+# ifdef FEAT_MOUSE_URXVT
+ "+mouse_urxvt",
+# else
+ "-mouse_urxvt",
+# endif
#endif
#ifdef __QNX__
# ifdef FEAT_MOUSE_PTERM
@@ -710,6 +715,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 343,
+/**/
342,
/**/
341,