Patch 7.3.353 (after 7.3.343)
Problem:    Missing part of the urxvt patch.
Solution:   Add the change in term.c
Files:      src/term.c


*** ../vim-7.3.352/src/term.c   2011-09-14 14:43:21.000000000 +0200
--- src/term.c  2011-10-26 23:48:01.000000000 +0200
***************
*** 4008,4014 ****
        }
  
  #ifdef FEAT_TERMRESPONSE
!       if (key_name[0] == NUL)
        {
            /* Check for xterm version string: "<Esc>[>{x};{vers};{y}c".  Also
             * eat other possible responses to t_RV, rxvt returns
--- 4008,4016 ----
        }
  
  #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
***************
*** 4047,4053 ****
                    if (tp[1 + (tp[0] != CSI)] == '>' && j == 2)
                    {
                        /* if xterm version >= 95 use mouse dragging */
!                       if (extra >= 95)
                            set_option_value((char_u *)"ttym", 0L,
                                                       (char_u *)"xterm2", 0);
                        /* if xterm version >= 141 try to get termcap codes */
--- 4049,4055 ----
                    if (tp[1 + (tp[0] != CSI)] == '>' && j == 2)
                    {
                        /* if xterm version >= 95 use mouse dragging */
!                       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 */
***************
*** 4141,4146 ****
--- 4143,4151 ----
  # ifdef FEAT_MOUSE_PTERM
                || key_name[0] == (int)KS_PTERM_MOUSE
  # endif
+ # ifdef FEAT_MOUSE_URXVT
+               || key_name[0] == (int)KS_URXVT_MOUSE
+ # endif
                )
        {
            is_click = is_drag = FALSE;
***************
*** 4219,4225 ****
--- 4224,4292 ----
                    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.
*** ../vim-7.3.352/src/version.c        2011-10-26 22:02:10.000000000 +0200
--- src/version.c       2011-10-26 23:43:26.000000000 +0200
***************
*** 716,717 ****
--- 716,719 ----
  {   /* Add new patch number below this line */
+ /**/
+     353,
  /**/

-- 
hundred-and-one symptoms of being an internet addict:
99. The hum of a cooling fan and the click of keys is comforting to you.

 /// Bram Moolenaar -- [email protected] -- 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    ///

-- 
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

Raspunde prin e-mail lui