]> granicus.if.org Git - vim/commitdiff
updated for version 7.3.353 v7.3.353
authorBram Moolenaar <Bram@vim.org>
Wed, 26 Oct 2011 21:48:20 +0000 (23:48 +0200)
committerBram Moolenaar <Bram@vim.org>
Wed, 26 Oct 2011 21:48:20 +0000 (23:48 +0200)
Problem:    Missing part of the urxvt patch.
Solution:   Add the change in term.c

src/term.c
src/version.c

index 7798480eaa1419b0b1b6dcf3c5b670f4ebf2a2ed..3fab538f8a270ab25efea27f3a488a9fd135cc71 100644 (file)
@@ -4008,7 +4008,9 @@ check_termcode(max_offset, buf, buflen)
        }
 
 #ifdef FEAT_TERMRESPONSE
-       if (key_name[0] == NUL)
+       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
@@ -4047,7 +4049,7 @@ check_termcode(max_offset, buf, buflen)
                    if (tp[1 + (tp[0] != CSI)] == '>' && j == 2)
                    {
                        /* if xterm version >= 95 use mouse dragging */
-                       if (extra >= 95)
+                       if (extra >= 95 && ttym_flags != TTYM_URXVT)
                            set_option_value((char_u *)"ttym", 0L,
                                                       (char_u *)"xterm2", 0);
                        /* if xterm version >= 141 try to get termcap codes */
@@ -4140,6 +4142,9 @@ check_termcode(max_offset, buf, buflen)
 # 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
                )
        {
@@ -4219,7 +4224,69 @@ check_termcode(max_offset, buf, buflen)
                    else
                        break;
                }
+           }
+
+# ifdef FEAT_MOUSE_URXVT
+           if (key_name[0] == (int)KS_URXVT_MOUSE)
+           {
+               for (;;)
+               {
+                   /* URXVT 1015 mouse reporting mode:
+                    * Almost identical to xterm mouse mode, except the values
+                    * are decimal instead of bytes.
+                    *
+                    * \033[%d;%d;%dM
+                    *            ^-- row
+                    *         ^----- column
+                    *      ^-------- code
+                    */
+                   p = tp + slen;
+
+                   mouse_code = getdigits(&p);
+                   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;
+                       }
+                   }
+                   break;
+               }
+           }
+# endif
+
+       if (key_name[0] == (int)KS_MOUSE
+#ifdef FEAT_MOUSE_URXVT
+           || key_name[0] == (int)KS_URXVT_MOUSE
+#endif
+           )
+       {
 #  if !defined(MSWIN) && !defined(MSDOS)
                /*
                 * Handle mouse events.
index aed1266fb8593f350070ee7e8fb5b9cbc5bccff8..a72be66eef794cbb2e1327c2eb9c17ef6effb065 100644 (file)
@@ -714,6 +714,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    353,
 /**/
     352,
 /**/