changeset 9221:17fa362f10be v7.4.1894

commit https://github.com/vim/vim/commit/511972d810ea490955161ff5097ec2f57919ceaf Author: Bram Moolenaar <Bram@vim.org> Date: Sat Jun 4 18:09:59 2016 +0200 patch 7.4.1894 Problem: Cannot get the window ID for a mouse click. Solution: Add v:mouse_winid.
author Christian Brabandt <cb@256bit.org>
date Sat, 04 Jun 2016 18:15:05 +0200
parents 29a8841b4025
children f2b4633b95e2
files runtime/doc/eval.txt src/eval.c src/version.c src/vim.h
diffstat 4 files changed, 51 insertions(+), 28 deletions(-) [+]
line wrap: on
line diff
--- a/runtime/doc/eval.txt
+++ b/runtime/doc/eval.txt
@@ -1,4 +1,4 @@
-*eval.txt*	For Vim version 7.4.  Last change: 2016 May 25
+*eval.txt*	For Vim version 7.4.  Last change: 2016 Jun 04
 
 
 		  VIM REFERENCE MANUAL	  by Bram Moolenaar
@@ -1358,6 +1358,10 @@ v:beval_winnr	The number of the window, 
 		window has number zero (unlike most other places where a
 		window gets a number).
 
+					*v:beval_winid* *beval_winid-variable*
+v:beval_winid	The window ID of the window, over which the mouse pointer is.
+		Otherwise like v:beval_winnr.
+
 					*v:char* *char-variable*
 v:char		Argument for evaluating 'formatexpr' and used for the typed
 		character when using <expr> in an abbreviation |:map-<expr>|.
@@ -1591,6 +1595,10 @@ v:mouse_win	Window number for a mouse cl
 		First window has number 1, like with |winnr()|.  The value is
 		zero when there was no mouse button click.
 
+					*v:mouse_winid* *mouse_winid-variable*
+v:mouse_winid	Window ID for a mouse click obtained with |getchar()|.
+		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
@@ -1821,7 +1829,7 @@ v:windowid	When any X11 based GUI is run
 		When an MS-Windows GUI is running this will be set to the
 		window handle.
 		Otherwise the value is zero.
-		Note: for windows inside Vim use |winnr()|.
+		Note: for windows inside Vim use |winnr()| or |win_getid()|.
 
 ==============================================================================
 4. Builtin Functions					*functions*
@@ -3846,8 +3854,8 @@ getchar([expr])						*getchar()*
 
 		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: >
+		|v:mouse_lnum|, |v:mouse_winid| 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"
@@ -4724,6 +4732,10 @@ job_status({job})					*job_status()* *E9
 			"fail"	job failed to start
 			"dead"	job died or was stopped after running
 		
+		On Unix a non-existing command results in "dead" instead of
+		"fail", because a fork happens before the failure can be
+		detected.
+
 		If an exit callback was set with the "exit_cb" option and the
 		job is now detected to be "dead" the callback will be invoked.
 
@@ -6369,10 +6381,15 @@ setqflist({list} [, {action}])				*setqf
 							*E927*
 		If {action} is set to 'a', then the items from {list} are
 		added to the existing quickfix list. If there is no existing
-		list, then a new list is created. If {action} is set to 'r',
-		then the items from the current quickfix list are replaced
-		with the items from {list}. If {action} is not present or is
-		set to ' ', then a new list is created.
+		list, then a new list is created.
+		
+		If {action} is set to 'r', then the items from the current
+		quickfix list are replaced with the items from {list}.  This
+		can also be used to clear the list: >
+			:call setqflist([], 'r')
+<	
+		If {action} is not present or is set to ' ', then a new list
+		is created.
 
 		Returns zero for success, -1 for failure.
 
--- a/src/eval.c
+++ b/src/eval.c
@@ -359,6 +359,7 @@ static struct vimvar
     {VV_NAME("swapcommand",	 VAR_STRING), VV_RO},
     {VV_NAME("char",		 VAR_STRING), 0},
     {VV_NAME("mouse_win",	 VAR_NUMBER), 0},
+    {VV_NAME("mouse_winid",	 VAR_NUMBER), 0},
     {VV_NAME("mouse_lnum",	 VAR_NUMBER), 0},
     {VV_NAME("mouse_col",	 VAR_NUMBER), 0},
     {VV_NAME("operator",	 VAR_STRING), VV_RO},
@@ -12755,6 +12756,7 @@ f_getchar(typval_T *argvars, typval_T *r
     --allow_keys;
 
     vimvars[VV_MOUSE_WIN].vv_nr = 0;
+    vimvars[VV_MOUSE_WINID].vv_nr = 0;
     vimvars[VV_MOUSE_LNUM].vv_nr = 0;
     vimvars[VV_MOUSE_COL].vv_nr = 0;
 
@@ -12810,6 +12812,7 @@ f_getchar(typval_T *argvars, typval_T *r
 		    ++winnr;
 # endif
 		vimvars[VV_MOUSE_WIN].vv_nr = winnr;
+		vimvars[VV_MOUSE_WINID].vv_nr = win->w_id;
 		vimvars[VV_MOUSE_LNUM].vv_nr = lnum;
 		vimvars[VV_MOUSE_COL].vv_nr = col + 1;
 	    }
--- a/src/version.c
+++ b/src/version.c
@@ -754,6 +754,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    1894,
+/**/
     1893,
 /**/
     1892,
--- a/src/vim.h
+++ b/src/vim.h
@@ -1887,26 +1887,27 @@ typedef int sock_T;
 #define VV_SWAPCOMMAND	48
 #define VV_CHAR		49
 #define VV_MOUSE_WIN	50
-#define VV_MOUSE_LNUM   51
-#define VV_MOUSE_COL	52
-#define VV_OP		53
-#define VV_SEARCHFORWARD 54
-#define VV_HLSEARCH	55
-#define VV_OLDFILES	56
-#define VV_WINDOWID	57
-#define VV_PROGPATH	58
-#define VV_COMPLETED_ITEM 59
-#define VV_OPTION_NEW   60
-#define VV_OPTION_OLD   61
-#define VV_OPTION_TYPE  62
-#define VV_ERRORS	63
-#define VV_FALSE	64
-#define VV_TRUE		65
-#define VV_NULL		66
-#define VV_NONE		67
-#define VV_VIM_DID_ENTER 68
-#define VV_TESTING	69
-#define VV_LEN		70	/* number of v: vars */
+#define VV_MOUSE_WINID	51
+#define VV_MOUSE_LNUM   52
+#define VV_MOUSE_COL	53
+#define VV_OP		54
+#define VV_SEARCHFORWARD 55
+#define VV_HLSEARCH	56
+#define VV_OLDFILES	57
+#define VV_WINDOWID	58
+#define VV_PROGPATH	59
+#define VV_COMPLETED_ITEM 60
+#define VV_OPTION_NEW   61
+#define VV_OPTION_OLD   62
+#define VV_OPTION_TYPE  63
+#define VV_ERRORS	64
+#define VV_FALSE	65
+#define VV_TRUE		66
+#define VV_NULL		67
+#define VV_NONE		68
+#define VV_VIM_DID_ENTER 69
+#define VV_TESTING	70
+#define VV_LEN		71	/* number of v: vars */
 
 /* used for v_number in VAR_SPECIAL */
 #define VVAL_FALSE	0L