summaryrefslogtreecommitdiffstats
path: root/source/ap/vim/patches/7.3.632
diff options
context:
space:
mode:
Diffstat (limited to 'source/ap/vim/patches/7.3.632')
-rw-r--r--source/ap/vim/patches/7.3.632537
1 files changed, 537 insertions, 0 deletions
diff --git a/source/ap/vim/patches/7.3.632 b/source/ap/vim/patches/7.3.632
new file mode 100644
index 000000000..9e38969e6
--- /dev/null
+++ b/source/ap/vim/patches/7.3.632
@@ -0,0 +1,537 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.3.632
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.632
+Problem: Cannot select beyond 222 columns with the mouse in xterm.
+Solution: Add support for SGR mouse tracking. (Hayaki Saito)
+Files: runtime/doc/options.txt, src/feature.h, src/keymap.h, src/misc2.c,
+ src/option.h, src/os_unix.c, src/term.c, src/version.c
+
+
+*** ../vim-7.3.631/runtime/doc/options.txt 2012-07-10 16:49:08.000000000 +0200
+--- runtime/doc/options.txt 2012-08-15 16:04:26.000000000 +0200
+***************
+*** 7383,7388 ****
+--- 7424,7435 ----
+ jsbterm JSB term mouse handling.
+ *pterm-mouse*
+ pterm QNX pterm mouse handling.
++ *urxvt-mouse*
++ urxvt Mouse handling for the urxvt (rxvt-unicode) terminal.
++ *sgr-mouse*
++ sgr Mouse handling for the terminal that emits SGR-styled
++ mouse reporting. Works with xterm version 277 or
++ later.
+
+ The mouse handling must be enabled at compile time |+mouse_xterm|
+ |+mouse_dec| |+mouse_netterm|.
+***************
+*** 7395,7400 ****
+--- 7442,7448 ----
+ or "xterm2" already. The main use of this option is to set it to
+ "xterm", when the terminal name doesn't start with "xterm", but it can
+ handle xterm mouse codes.
++ The "sgr" value will be set if the xterm version is 277 or later.
+ The "xterm2" value will be set if the xterm version is reported to be
+ 95 or higher. This only works when compiled with the |+termresponse|
+ feature and if |t_RV| is set to the escape sequence to request the
+*** ../vim-7.3.631/src/feature.h 2012-04-25 16:50:44.000000000 +0200
+--- src/feature.h 2012-08-15 15:46:07.000000000 +0200
+***************
+*** 1056,1061 ****
+--- 1056,1064 ----
+ # ifdef FEAT_BIG
+ # define FEAT_MOUSE_URXVT
+ # endif
++ # ifdef FEAT_BIG
++ # define FEAT_MOUSE_SGR
++ # endif
+ # if defined(FEAT_NORMAL) && (defined(MSDOS) || defined(WIN3264))
+ # define DOS_MOUSE
+ # endif
+***************
+*** 1077,1082 ****
+--- 1080,1090 ----
+ # define FEAT_MOUSE_XTERM
+ #endif
+
++ /* sgr is a small variation of mouse_xterm, and shares its code */
++ #if defined(FEAT_MOUSE_SGR) && !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) \
+***************
+*** 1087,1093 ****
+ || 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))
+--- 1095,1102 ----
+ || defined(FEAT_MOUSE_JSB) \
+ || defined(FEAT_MOUSE_PTERM) \
+ || defined(FEAT_SYSMOUSE) \
+! || defined(FEAT_MOUSE_URXVT) \
+! || defined(FEAT_MOUSE_SGR))
+ # define FEAT_MOUSE_TTY /* include non-GUI mouse support */
+ #endif
+ #if !defined(FEAT_MOUSE) && (defined(FEAT_MOUSE_TTY) || defined(FEAT_GUI))
+*** ../vim-7.3.631/src/keymap.h 2012-01-20 17:15:47.000000000 +0100
+--- src/keymap.h 2012-08-15 15:46:07.000000000 +0200
+***************
+*** 110,115 ****
+--- 110,118 ----
+ /* Used for the urxvt mouse. */
+ #define KS_URXVT_MOUSE 238
+
++ /* Used for the sgr mouse. */
++ #define KS_SGR_MOUSE 237
++
+ /*
+ * Filler used after KS_SPECIAL and others
+ */
+***************
+*** 412,417 ****
+--- 415,421 ----
+ #define K_JSBTERM_MOUSE TERMCAP2KEY(KS_JSBTERM_MOUSE, KE_FILLER)
+ #define K_PTERM_MOUSE TERMCAP2KEY(KS_PTERM_MOUSE, KE_FILLER)
+ #define K_URXVT_MOUSE TERMCAP2KEY(KS_URXVT_MOUSE, KE_FILLER)
++ #define K_SGR_MOUSE TERMCAP2KEY(KS_SGR_MOUSE, KE_FILLER)
+
+ #define K_SELECT TERMCAP2KEY(KS_SELECT, KE_FILLER)
+ #define K_TEAROFF TERMCAP2KEY(KS_TEAROFF, KE_FILLER)
+*** ../vim-7.3.631/src/misc2.c 2012-08-15 14:04:50.000000000 +0200
+--- src/misc2.c 2012-08-15 15:46:07.000000000 +0200
+***************
+*** 2433,2438 ****
+--- 2433,2441 ----
+ #ifdef FEAT_MOUSE_URXVT
+ {K_URXVT_MOUSE, (char_u *)"UrxvtMouse"},
+ #endif
++ #ifdef FEAT_MOUSE_SGR
++ {K_SGR_MOUSE, (char_u *)"SgrMouse"},
++ #endif
+ {K_LEFTMOUSE, (char_u *)"LeftMouse"},
+ {K_LEFTMOUSE_NM, (char_u *)"LeftMouseNM"},
+ {K_LEFTDRAG, (char_u *)"LeftDrag"},
+*** ../vim-7.3.631/src/option.h 2012-07-10 16:49:08.000000000 +0200
+--- src/option.h 2012-08-15 15:46:07.000000000 +0200
+***************
+*** 822,828 ****
+ 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", "urxvt", NULL};
+ # endif
+ # define TTYM_XTERM 0x01
+ # define TTYM_XTERM2 0x02
+--- 822,828 ----
+ 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", "urxvt", "sgr", NULL};
+ # endif
+ # define TTYM_XTERM 0x01
+ # define TTYM_XTERM2 0x02
+***************
+*** 831,836 ****
+--- 831,837 ----
+ # define TTYM_JSBTERM 0x10
+ # define TTYM_PTERM 0x20
+ # define TTYM_URXVT 0x40
++ # define TTYM_SGR 0x80
+ #endif
+ EXTERN char_u *p_udir; /* 'undodir' */
+ EXTERN long p_ul; /* 'undolevels' */
+*** ../vim-7.3.631/src/os_unix.c 2012-04-20 15:55:10.000000000 +0200
+--- src/os_unix.c 2012-08-15 16:06:54.000000000 +0200
+***************
+*** 2159,2168 ****
+--- 2159,2171 ----
+ * Return 1 for "xterm".
+ * Return 2 for "xterm2".
+ * Return 3 for "urxvt".
++ * Return 4 for "sgr".
+ */
+ int
+ use_xterm_mouse()
+ {
++ if (ttym_flags == TTYM_SGR)
++ return 4;
+ if (ttym_flags == TTYM_URXVT)
+ return 3;
+ if (ttym_flags == TTYM_XTERM2)
+***************
+*** 3339,3345 ****
+ 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")
+--- 3342,3349 ----
+ 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")
+***************
+*** 3348,3353 ****
+--- 3352,3368 ----
+ }
+ # endif
+
++ # ifdef FEAT_MOUSE_SGR
++ if (ttym_flags == TTYM_SGR)
++ {
++ out_str_nf((char_u *)
++ (on
++ ? IF_EB("\033[?1006h", ESC_STR "[?1006h")
++ : IF_EB("\033[?1006l", ESC_STR "[?1006l")));
++ ison = on;
++ }
++ # endif
++
+ if (xterm_mouse_vers > 0)
+ {
+ if (on) /* enable mouse events, use mouse tracking if available */
+***************
+*** 3577,3582 ****
+--- 3592,3618 ----
+ else
+ del_mouse_termcode(KS_URXVT_MOUSE);
+ # endif
++ # ifdef FEAT_MOUSE_SGR
++ /* same as the dec mouse */
++ if (use_xterm_mouse() == 4
++ # ifdef FEAT_GUI
++ && !gui.in_use
++ # endif
++ )
++ {
++ set_mouse_termcode(KS_SGR_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_SGR_MOUSE);
++ # endif
+ }
+ #endif
+
+*** ../vim-7.3.631/src/term.c 2012-02-05 22:05:44.000000000 +0100
+--- src/term.c 2012-08-15 16:14:09.000000000 +0200
+***************
+*** 1997,2002 ****
+--- 1997,2003 ----
+ # define HMT_JSBTERM 8
+ # define HMT_PTERM 16
+ # define HMT_URXVT 32
++ # define HMT_SGR 64
+ static int has_mouse_termcode = 0;
+ # endif
+
+***************
+*** 2037,2042 ****
+--- 2038,2048 ----
+ has_mouse_termcode |= HMT_URXVT;
+ else
+ # endif
++ # ifdef FEAT_MOUSE_SGR
++ if (n == KS_SGR_MOUSE)
++ has_mouse_termcode |= HMT_SGR;
++ else
++ # endif
+ has_mouse_termcode |= HMT_NORMAL;
+ # endif
+ }
+***************
+*** 2079,2084 ****
+--- 2085,2095 ----
+ has_mouse_termcode &= ~HMT_URXVT;
+ else
+ # endif
++ # ifdef FEAT_MOUSE_SGR
++ if (n == KS_SGR_MOUSE)
++ has_mouse_termcode &= ~HMT_SGR;
++ else
++ # endif
+ has_mouse_termcode &= ~HMT_NORMAL;
+ # endif
+ }
+***************
+*** 4023,4029 ****
+ #ifdef FEAT_TERMRESPONSE
+ if (key_name[0] == NUL
+ /* URXVT mouse uses <ESC>[#;#;#M, but we are matching <ESC>[ */
+! || key_name[0] == KS_URXVT_MOUSE)
+ {
+ /* Check for xterm version string: "<Esc>[>{x};{vers};{y}c". Also
+ * eat other possible responses to t_RV, rxvt returns
+--- 4034,4041 ----
+ #ifdef FEAT_TERMRESPONSE
+ if (key_name[0] == NUL
+ /* URXVT mouse uses <ESC>[#;#;#M, but we are matching <ESC>[ */
+! || key_name[0] == KS_URXVT_MOUSE
+! || key_name[0] == KS_SGR_MOUSE)
+ {
+ /* Check for xterm version string: "<Esc>[>{x};{vers};{y}c". Also
+ * eat other possible responses to t_RV, rxvt returns
+***************
+*** 4061,4066 ****
+--- 4073,4088 ----
+
+ if (tp[1 + (tp[0] != CSI)] == '>' && j == 2)
+ {
++ # ifdef TTYM_SGR
++ if (extra >= 277
++ # ifdef TTYM_URXVT
++ && ttym_flags != TTYM_URXVT
++ # endif
++ )
++ set_option_value((char_u *)"ttym", 0L,
++ (char_u *)"sgr", 0);
++ else
++ # endif
+ /* if xterm version >= 95 use mouse dragging */
+ if (extra >= 95
+ # ifdef TTYM_URXVT
+***************
+*** 4147,4167 ****
+ /*
+ * If it is a mouse click, get the coordinates.
+ */
+! if (key_name[0] == (int)KS_MOUSE
+ # ifdef FEAT_MOUSE_JSB
+! || key_name[0] == (int)KS_JSBTERM_MOUSE
+ # endif
+ # ifdef FEAT_MOUSE_NET
+! || key_name[0] == (int)KS_NETTERM_MOUSE
+ # endif
+ # ifdef FEAT_MOUSE_DEC
+! || key_name[0] == (int)KS_DEC_MOUSE
+ # endif
+ # ifdef FEAT_MOUSE_PTERM
+! || key_name[0] == (int)KS_PTERM_MOUSE
+ # endif
+ # ifdef FEAT_MOUSE_URXVT
+! || key_name[0] == (int)KS_URXVT_MOUSE
+ # endif
+ )
+ {
+--- 4169,4192 ----
+ /*
+ * If it is a mouse click, get the coordinates.
+ */
+! if (key_name[0] == KS_MOUSE
+ # ifdef FEAT_MOUSE_JSB
+! || key_name[0] == KS_JSBTERM_MOUSE
+ # endif
+ # ifdef FEAT_MOUSE_NET
+! || key_name[0] == KS_NETTERM_MOUSE
+ # endif
+ # ifdef FEAT_MOUSE_DEC
+! || key_name[0] == KS_DEC_MOUSE
+ # endif
+ # ifdef FEAT_MOUSE_PTERM
+! || key_name[0] == KS_PTERM_MOUSE
+ # endif
+ # ifdef FEAT_MOUSE_URXVT
+! || key_name[0] == KS_URXVT_MOUSE
+! # endif
+! # ifdef FEAT_MOUSE_SGR
+! || key_name[0] == KS_SGR_MOUSE
+ # endif
+ )
+ {
+***************
+*** 4243,4250 ****
+ }
+ }
+
+! # ifdef FEAT_MOUSE_URXVT
+! if (key_name[0] == (int)KS_URXVT_MOUSE)
+ {
+ for (;;)
+ {
+--- 4268,4276 ----
+ }
+ }
+
+! # if defined(FEAT_MOUSE_URXVT) || defined(FEAT_MOUSE_SGR)
+! if (key_name[0] == KS_URXVT_MOUSE
+! || key_name[0] == KS_SGR_MOUSE)
+ {
+ for (;;)
+ {
+***************
+*** 4256,4261 ****
+--- 4282,4301 ----
+ * ^-- row
+ * ^----- column
+ * ^-------- code
++ *
++ * SGR 1006 mouse reporting mode:
++ * Almost identical to xterm mouse mode, except the values
++ * are decimal instead of bytes.
++ *
++ * \033[<%d;%d;%dM
++ * ^-- row
++ * ^----- column
++ * ^-------- code
++ *
++ * \033[<%d;%d;%dm : mouse release event
++ * ^-- row
++ * ^----- column
++ * ^-------- code
+ */
+ p = tp + slen;
+
+***************
+*** 4263,4294 ****
+ if (*p++ != ';')
+ return -1;
+
+ mouse_col = getdigits(&p) - 1;
+ if (*p++ != ';')
+ return -1;
+
+ mouse_row = getdigits(&p) - 1;
+! if (*p++ != 'M')
+ return -1;
+
+ slen += (int)(p - (tp + slen));
+
+ /* skip this one if next one has same code (like xterm
+ * case) */
+ j = termcodes[idx].len;
+! if (STRNCMP(tp, tp + slen, (size_t)j) == 0) {
+! /* check if the command is complete by looking for the
+! * M */
+ int slen2;
+ int cmd_complete = 0;
+! for (slen2 = slen; slen2 < len; slen2++) {
+! if (tp[slen2] == 'M') {
+ cmd_complete = 1;
+ break;
+ }
+ }
+ p += j;
+! if (cmd_complete && getdigits(&p) == mouse_code) {
+ slen += j; /* skip the \033[ */
+ continue;
+ }
+--- 4303,4348 ----
+ if (*p++ != ';')
+ return -1;
+
++ /* when mouse reporting is SGR, add 32 to mouse code */
++ if (key_name[0] == KS_SGR_MOUSE)
++ mouse_code += 32;
++
+ mouse_col = getdigits(&p) - 1;
+ if (*p++ != ';')
+ return -1;
+
+ mouse_row = getdigits(&p) - 1;
+! if (key_name[0] == KS_SGR_MOUSE && *p == 'm')
+! mouse_code |= MOUSE_RELEASE;
+! else if (*p != 'M')
+ return -1;
++ p++;
+
+ slen += (int)(p - (tp + slen));
+
+ /* skip this one if next one has same code (like xterm
+ * case) */
+ j = termcodes[idx].len;
+! if (STRNCMP(tp, tp + slen, (size_t)j) == 0)
+! {
+ int slen2;
+ int cmd_complete = 0;
+!
+! /* check if the command is complete by looking for the
+! * 'M' */
+! for (slen2 = slen; slen2 < len; slen2++)
+! {
+! if (tp[slen2] == 'M'
+! || (key_name[0] == KS_SGR_MOUSE
+! && tp[slen2] == 'm'))
+! {
+ cmd_complete = 1;
+ break;
+ }
+ }
+ p += j;
+! if (cmd_complete && getdigits(&p) == mouse_code)
+! {
+ slen += j; /* skip the \033[ */
+ continue;
+ }
+***************
+*** 4302,4307 ****
+--- 4356,4364 ----
+ #ifdef FEAT_MOUSE_URXVT
+ || key_name[0] == (int)KS_URXVT_MOUSE
+ #endif
++ #ifdef FEAT_MOUSE_SGR
++ || key_name[0] == KS_SGR_MOUSE
++ #endif
+ )
+ {
+ # if !defined(MSWIN) && !defined(MSDOS)
+*** ../vim-7.3.631/src/version.c 2012-08-15 14:04:50.000000000 +0200
+--- src/version.c 2012-08-15 15:47:30.000000000 +0200
+***************
+*** 384,389 ****
+--- 384,394 ----
+ # else
+ "-mouse_urxvt",
+ # endif
++ # ifdef FEAT_MOUSE_SGR
++ "+mouse_sgr",
++ # else
++ "-mouse_sgr",
++ # endif
+ #endif
+ #ifdef __QNX__
+ # ifdef FEAT_MOUSE_PTERM
+*** ../vim-7.3.631/src/version.c 2012-08-15 14:04:50.000000000 +0200
+--- src/version.c 2012-08-15 15:47:30.000000000 +0200
+***************
+*** 716,717 ****
+--- 721,724 ----
+ { /* Add new patch number below this line */
++ /**/
++ 632,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+243. You unsuccessfully try to download a pizza from www.dominos.com.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///