]> granicus.if.org Git - vim/commitdiff
updated for version 7.0-155 v7.0.155
authorBram Moolenaar <Bram@vim.org>
Wed, 1 Nov 2006 14:32:36 +0000 (14:32 +0000)
committerBram Moolenaar <Bram@vim.org>
Wed, 1 Nov 2006 14:32:36 +0000 (14:32 +0000)
runtime/doc/eval.txt
src/eval.c
src/version.c
src/vim.h

index caafd75ac65d0b6fa3672704a321b63dc3c8bbd3..7c928ea84a4b493d32dc1446f15ef9656d77f58d 100644 (file)
@@ -1,4 +1,4 @@
-*eval.txt*      For Vim version 7.0.  Last change: 2006 Sep 22
+*eval.txt*      For Vim version 7.0.  Last change: 2006 Nov 01
 
 
                  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -1374,6 +1374,21 @@ v:lnum           Line number for the 'foldexpr' |fold-expr| and 'indentexpr'
                'guitabtooltip'.  Only valid while one of these expressions is
                being evaluated.  Read-only when in the |sandbox|.
 
+                                       *v:mouse_win* *mouse_win-variable*
+v:mouse_win    Window number for a mouse click obtained with |getchar()|.
+               First window has number 1, like with |winnr()|.  The value is
+               zero when there was no mouse button click.
+
+                                       *v:mouse_lnum* *mouse_lnum-variable*
+v:mouse_lnum   Line number for a mouse click obtained with |getchar()|.
+               This is the text line number, not the screen line number.  The
+               value is zero when there was no mouse button click.
+
+                                       *v:mouse_col* *mouse_col-variable*
+v:mouse_col    Column number for a mouse click obtained with |getchar()|.
+               This is the screen column number, like with |virtcol()|.  The
+               value is zero when there was no mouse button click.
+
                                        *v:prevcount* *prevcount-variable*
 v:prevcount    The count given for the last but one Normal mode command.
                This is the v:count value of the previous command.  Useful if
@@ -2702,6 +2717,17 @@ getchar([expr])                                          *getchar()*
                one-byte character it is the character itself as a number.
                Use nr2char() to convert it to a String.
 
+               When the user clicks a mouse button, the mouse event will be
+               returned.  The position can then be found in |v:mouse_col|,
+               |v:mouse_lnum| and |v:mouse_win|.  This example positions the
+               mouse as it would normally happen: >
+                       let c = getchar()
+                       if c == "\<LeftMouse>" && v:mouse_win > 0
+                         exe v:mouse_win . "wincmd w"
+                         exe v:mouse_lnum
+                         exe "normal " . v:mouse_col . "|"
+                       endif
+<
                There is no prompt, you will somehow have to make clear to the
                user that a character has to be typed.
                There is no mapping for the character.
index 7c8babab9f32be16422b8141be8cd3ba69d86fc4..5ff523e549b5a0078144ab36d550ee600f22ac69 100644 (file)
@@ -343,6 +343,9 @@ static struct vimvar
     {VV_NAME("swapchoice",      VAR_STRING), 0},
     {VV_NAME("swapcommand",     VAR_STRING), VV_RO},
     {VV_NAME("char",            VAR_STRING), VV_RO},
+    {VV_NAME("mouse_win",       VAR_NUMBER), 0},
+    {VV_NAME("mouse_lnum",      VAR_NUMBER), 0},
+    {VV_NAME("mouse_col",       VAR_NUMBER), 0},
 };
 
 /* shorthand */
@@ -9855,6 +9858,10 @@ f_getchar(argvars, rettv)
     --no_mapping;
     --allow_keys;
 
+    vimvars[VV_MOUSE_WIN].vv_nr = 0;
+    vimvars[VV_MOUSE_LNUM].vv_nr = 0;
+    vimvars[VV_MOUSE_COL].vv_nr = 0;
+
     rettv->vval.v_number = n;
     if (IS_SPECIAL(n) || mod_mask != 0)
     {
@@ -9883,6 +9890,53 @@ f_getchar(argvars, rettv)
        temp[i++] = NUL;
        rettv->v_type = VAR_STRING;
        rettv->vval.v_string = vim_strsave(temp);
+
+#ifdef FEAT_MOUSE
+       if (n == K_LEFTMOUSE
+               || n == K_LEFTMOUSE_NM
+               || n == K_LEFTDRAG
+               || n == K_LEFTRELEASE
+               || n == K_LEFTRELEASE_NM
+               || n == K_MIDDLEMOUSE
+               || n == K_MIDDLEDRAG
+               || n == K_MIDDLERELEASE
+               || n == K_RIGHTMOUSE
+               || n == K_RIGHTDRAG
+               || n == K_RIGHTRELEASE
+               || n == K_X1MOUSE
+               || n == K_X1DRAG
+               || n == K_X1RELEASE
+               || n == K_X2MOUSE
+               || n == K_X2DRAG
+               || n == K_X2RELEASE
+               || n == K_MOUSEDOWN
+               || n == K_MOUSEUP)
+       {
+           int         row = mouse_row;
+           int         col = mouse_col;
+           win_T       *win;
+           linenr_T    lnum;
+# ifdef FEAT_WINDOWS
+           win_T       *wp;
+# endif
+           int         n = 1;
+
+           if (row >= 0 && col >= 0)
+           {
+               /* Find the window at the mouse coordinates and compute the
+                * text position. */
+               win = mouse_find_win(&row, &col);
+               (void)mouse_comp_pos(win, &row, &col, &lnum);
+# ifdef FEAT_WINDOWS
+               for (wp = firstwin; wp != win; wp = wp->w_next)
+                   ++n;
+# endif
+               vimvars[VV_MOUSE_WIN].vv_nr = n;
+               vimvars[VV_MOUSE_LNUM].vv_nr = lnum;
+               vimvars[VV_MOUSE_COL].vv_nr = col + 1;
+           }
+       }
+#endif
     }
 }
 
index 6e5b5dfffc04f9c9fe5c207871ea17ae86b7bfcb..4965c64c400f6a2ae90571562a3b4fb1905f41c4 100644 (file)
@@ -666,6 +666,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    155,
 /**/
     154,
 /**/
index c8ec443c4ecd579162725ff4ff65902e87e44616..aa313d39015d3d798189cbb07744d1b68f9e8b29 100644 (file)
--- a/src/vim.h
+++ b/src/vim.h
@@ -1669,7 +1669,10 @@ int vim_memcmp __ARGS((void *, void *, size_t));
 #define VV_SWAPCHOICE  46
 #define VV_SWAPCOMMAND 47
 #define VV_CHAR                48
-#define VV_LEN         49      /* number of v: vars */
+#define VV_MOUSE_WIN   49
+#define VV_MOUSE_LNUM   50
+#define VV_MOUSE_COL   51
+#define VV_LEN         52      /* number of v: vars */
 
 #ifdef FEAT_CLIPBOARD