From c842748302d33bcf41c6b796a43d9dbbf44cdc29 Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Thu, 20 Oct 2011 21:09:35 +0200 Subject: updated for version 7.3.343 Problem: No mouse support for urxvt. Solution: Implement urxvt mouse support, also for > 252 columns. (Yiding Jia) --- src/feature.h | 21 +++++++++++++++++---- src/keymap.h | 9 ++++++--- src/option.h | 3 ++- src/os_unix.c | 38 ++++++++++++++++++++++++++++++++++++++ src/version.c | 7 +++++++ 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 @@ -709,6 +714,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 343, /**/ 342, /**/ -- cgit v1.2.3