summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2006-11-01 14:32:36 +0000
committerBram Moolenaar <Bram@vim.org>2006-11-01 14:32:36 +0000
commit219b87038a8ae7e0731677ed265779f3273a5cfa (patch)
tree62e941e3d5c6f2bbe53bcdf7fe7bd3b9de354ba6 /src
parent74c596b5a8210293292cf512930f555e2b16a3db (diff)
downloadvim-git-219b87038a8ae7e0731677ed265779f3273a5cfa.tar.gz
updated for version 7.0-155v7.0.155
Diffstat (limited to 'src')
-rw-r--r--src/eval.c54
-rw-r--r--src/version.c2
-rw-r--r--src/vim.h5
3 files changed, 60 insertions, 1 deletions
diff --git a/src/eval.c b/src/eval.c
index 7c8babab9..5ff523e54 100644
--- a/src/eval.c
+++ b/src/eval.c
@@ -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
}
}
diff --git a/src/version.c b/src/version.c
index 6e5b5dfff..4965c64c4 100644
--- a/src/version.c
+++ b/src/version.c
@@ -667,6 +667,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 155,
+/**/
154,
/**/
153,
diff --git a/src/vim.h b/src/vim.h
index c8ec443c4..aa313d390 100644
--- 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