Patch 7.3.343
Problem:    No mouse support for urxvt.
Solution:   Implement urxvt mouse support, also for > 252 columns.  (Yiding
            Jia)
Files:      src/feature.h, src/keymap.h, src/option.h, src/os_unix.c,
            src/term.c, src/version.c


*** ../vim-7.3.342/src/feature.h        2011-05-19 13:40:47.000000000 +0200
--- src/feature.h       2011-10-20 21:02:15.000000000 +0200
***************
*** 1053,1058 ****
--- 1053,1061 ----
  # 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,1080 ****
  #if defined(FEAT_NORMAL) && defined(HAVE_SYSMOUSE)
  # define FEAT_SYSMOUSE
  #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))
  # define FEAT_MOUSE_TTY               /* include non-GUI mouse support */
  #endif
  #if !defined(FEAT_MOUSE) && (defined(FEAT_MOUSE_TTY) || defined(FEAT_GUI))
--- 1071,1093 ----
  #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_URXVT))
  # define FEAT_MOUSE_TTY               /* include non-GUI mouse support */
  #endif
  #if !defined(FEAT_MOUSE) && (defined(FEAT_MOUSE_TTY) || defined(FEAT_GUI))
*** ../vim-7.3.342/src/keymap.h 2010-08-15 21:57:32.000000000 +0200
--- src/keymap.h        2011-10-20 21:00:37.000000000 +0200
***************
*** 92,104 ****
   */
  #define KS_TEAROFF            244
  
! /* used for JSB term mouse */
  #define KS_JSBTERM_MOUSE      243
  
! /* used a termcap entry that produces a normal character */
  #define KS_KEY                        242
  
! /* Used for the qnx pterm mouse */
  #define KS_PTERM_MOUSE                241
  
  /* Used for click in a tab pages label. */
--- 92,104 ----
   */
  #define KS_TEAROFF            244
  
! /* Used for JSB term mouse. */
  #define KS_JSBTERM_MOUSE      243
  
! /* Used a termcap entry that produces a normal character. */
  #define KS_KEY                        242
  
! /* Used for the qnx pterm mouse. */
  #define KS_PTERM_MOUSE                241
  
  /* Used for click in a tab pages label. */
***************
*** 107,112 ****
--- 107,115 ----
  /* 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
   */
*** ../vim-7.3.342/src/option.h 2011-09-30 14:44:49.000000000 +0200
--- src/option.h        2011-10-20 19:38:59.000000000 +0200
***************
*** 819,825 ****
  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};
  # endif
  # define TTYM_XTERM           0x01
  # define TTYM_XTERM2          0x02
--- 819,825 ----
  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
***************
*** 827,832 ****
--- 827,833 ----
  # 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' */
*** ../vim-7.3.342/src/os_unix.c        2011-10-12 21:04:15.000000000 +0200
--- src/os_unix.c       2011-10-20 21:02:00.000000000 +0200
***************
*** 2158,2167 ****
--- 2158,2170 ----
   * 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,3323 ****
--- 3321,3337 ----
        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,3439 ****
--- 3448,3456 ----
  {
  # 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,3528 ****
--- 3540,3566 ----
      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
  
*** ../vim-7.3.342/src/version.c        2011-10-20 18:24:16.000000000 +0200
--- src/version.c       2011-10-20 19:40:48.000000000 +0200
***************
*** 380,383 ****
--- 380,388 ----
        "-mouse_xterm",
  # endif
+ # ifdef FEAT_MOUSE_URXVT
+       "+mouse_urxvt",
+ # else
+       "-mouse_urxvt",
+ # endif
  #endif
  #ifdef __QNX__
***************
*** 711,712 ****
--- 716,719 ----
  {   /* Add new patch number below this line */
+ /**/
+     343,
  /**/

-- 
Warning label on a superhero Halloween costume:
"Caution: Cape does not enable user to fly."

 /// 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