changeset 14343:7589f103ec11 v8.1.0187

patch 8.1.0187: getwininfo() and win_screenpos() return different numbers commit https://github.com/vim/vim/commit/7132ddc1014a4e1230f0080e418221e5843e1277 Author: Bram Moolenaar <Bram@vim.org> Date: Sun Jul 15 17:01:11 2018 +0200 patch 8.1.0187: getwininfo() and win_screenpos() return different numbers Problem: getwininfo() and win_screenpos() return different numbers. Solution: Add one to "wincol" and "winrow" from getwininfo().
author Christian Brabandt <cb@256bit.org>
date Sun, 15 Jul 2018 17:15:06 +0200
parents a9a24e84d02d
children 956a3583df76
files runtime/doc/eval.txt src/evalfunc.c src/testdir/test_bufwintabinfo.vim src/version.c
diffstat 4 files changed, 51 insertions(+), 46 deletions(-) [+]
line wrap: on
line diff
--- a/runtime/doc/eval.txt
+++ b/runtime/doc/eval.txt
@@ -2196,7 +2196,7 @@ gettabvar({nr}, {varname} [, {def}])
 				any	variable {varname} in tab {nr} or {def}
 gettabwinvar({tabnr}, {winnr}, {name} [, {def}])
 				any	{name} in {winnr} in tab page {tabnr}
-getwininfo([{winid}])		List	list of windows
+getwininfo([{winid}])		List	list of info about each window
 getwinpos([{timeout}])		List	X and Y coord in pixels of the Vim window
 getwinposx()			Number	X coord in pixels of the Vim window
 getwinposy()			Number	Y coord in pixels of the Vim window
@@ -4936,6 +4936,41 @@ gettabwinvar({tabnr}, {winnr}, {varname}
 			:let list_is_on = gettabwinvar(1, 2, '&list')
 			:echo "myvar = " . gettabwinvar(3, 1, 'myvar')
 <
+getwininfo([{winid}])					*getwininfo()*
+		Returns information about windows as a List with Dictionaries.
+
+		If {winid} is given Information about the window with that ID
+		is returned.  If the window does not exist the result is an
+		empty list.
+
+		Without {winid} information about all the windows in all the
+		tab pages is returned.
+
+		Each List item is a Dictionary with the following entries:
+			bufnr		number of buffer in the window
+			height		window height (excluding winbar)
+			winbar		1 if the window has a toolbar, 0
+					otherwise
+			loclist		1 if showing a location list
+					{only with the +quickfix feature}
+			quickfix	1 if quickfix or location list window
+					{only with the +quickfix feature}
+			terminal	1 if a terminal window
+					{only with the +terminal feature}
+			tabnr		tab page number
+			variables	a reference to the dictionary with
+					window-local variables
+			width		window width
+			wincol		leftmost screen column of the window,
+					col from |win_screenpos()|
+			winid		|window-ID|
+			winnr		window number
+			winrow		topmost screen column of the window,
+					row from |win_screenpos()|
+
+		To obtain all window-local variables use: >
+			gettabwinvar({tabnr}, {winnr}, '&')
+
 getwinpos([{timeout}])					*getwinpos()*
 		The result is a list with two numbers, the result of
 		getwinposx() and getwinposy() combined: 
@@ -4969,39 +5004,6 @@ getwinposy()	The result is a Number, whi
 		The result will be -1 if the information is not available.
 		The value can be used with `:winpos`.
 
-getwininfo([{winid}])					*getwininfo()*
-		Returns information about windows as a List with Dictionaries.
-
-		If {winid} is given Information about the window with that ID
-		is returned.  If the window does not exist the result is an
-		empty list.
-
-		Without {winid} information about all the windows in all the
-		tab pages is returned.
-
-		Each List item is a Dictionary with the following entries:
-			bufnr		number of buffer in the window
-			height		window height (excluding winbar)
-			winbar		1 if the window has a toolbar, 0
-					otherwise
-			loclist		1 if showing a location list
-					{only with the +quickfix feature}
-			quickfix	1 if quickfix or location list window
-					{only with the +quickfix feature}
-			terminal	1 if a terminal window
-					{only with the +terminal feature}
-			tabnr		tab page number
-			variables	a reference to the dictionary with
-					window-local variables
-			width		window width
-			wincol		leftmost screen column of the window
-			winid		|window-ID|
-			winnr		window number
-			winrow		topmost screen column of the window
-
-		To obtain all window-local variables use: >
-			gettabwinvar({tabnr}, {winnr}, '&')
-
 getwinvar({winnr}, {varname} [, {def}])				*getwinvar()*
 		Like |gettabwinvar()| for the current tabpage.
 		Examples: >
@@ -9049,7 +9051,7 @@ win_id2win({expr})					*win_id2win()*
 win_screenpos({nr})					*win_screenpos()*
 		Return the screen position of window {nr} as a list with two
 		numbers: [row, col].  The first window always has position
-		[1, 1].
+		[1, 1], unless there is a tabline, then it is [2, 1].
 		{nr} can be the window number or the |window-ID|.
 		Return [0, 0] if the window cannot be found in the current
 		tabpage.
--- a/src/evalfunc.c
+++ b/src/evalfunc.c
@@ -5648,12 +5648,12 @@ get_win_info(win_T *wp, short tpnr, shor
     dict_add_number(dict, "winnr", winnr);
     dict_add_number(dict, "winid", wp->w_id);
     dict_add_number(dict, "height", wp->w_height);
-    dict_add_number(dict, "winrow", wp->w_winrow);
+    dict_add_number(dict, "winrow", wp->w_winrow + 1);
 #ifdef FEAT_MENU
     dict_add_number(dict, "winbar", wp->w_winbar_height);
 #endif
     dict_add_number(dict, "width", wp->w_width);
-    dict_add_number(dict, "wincol", wp->w_wincol);
+    dict_add_number(dict, "wincol", wp->w_wincol + 1);
     dict_add_number(dict, "bufnr", wp->w_buffer->b_fnum);
 
 #ifdef FEAT_TERMINAL
--- a/src/testdir/test_bufwintabinfo.vim
+++ b/src/testdir/test_bufwintabinfo.vim
@@ -52,21 +52,22 @@ function Test_getbufwintabinfo()
     let winlist = getwininfo()
     call assert_equal(5, len(winlist))
     call assert_equal(winwidth(1), winlist[0].width)
-    call assert_equal(0, winlist[0].wincol)
-    let tablineheight = winlist[0].winrow == 1 ? 1 : 0
-    call assert_equal(tablineheight, winlist[0].winrow)  " tabline adds one
+    call assert_equal(1, winlist[0].wincol)
+    " tabline adds one row in terminal, not in GUI
+    let tablineheight = winlist[0].winrow == 2 ? 1 : 0
+    call assert_equal(tablineheight + 1, winlist[0].winrow)
 
     call assert_equal(winbufnr(2), winlist[1].bufnr)
     call assert_equal(winheight(2), winlist[1].height)
-    call assert_equal(0, winlist[1].wincol)
-    call assert_equal(tablineheight + winheight(1) + 1, winlist[1].winrow)
+    call assert_equal(1, winlist[1].wincol)
+    call assert_equal(tablineheight + winheight(1) + 2, winlist[1].winrow)
 
     call assert_equal(1, winlist[2].winnr)
-    call assert_equal(tablineheight, winlist[2].winrow)
-    call assert_equal(0, winlist[2].wincol)
+    call assert_equal(tablineheight + 1, winlist[2].winrow)
+    call assert_equal(1, winlist[2].wincol)
 
-    call assert_equal(winlist[2].width + 1, winlist[3].wincol)
-    call assert_equal(0, winlist[4].wincol)
+    call assert_equal(winlist[2].width + 2, winlist[3].wincol)
+    call assert_equal(1, winlist[4].wincol)
 
     call assert_equal(1, winlist[0].tabnr)
     call assert_equal(1, winlist[1].tabnr)
--- a/src/version.c
+++ b/src/version.c
@@ -790,6 +790,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    187,
+/**/
     186,
 /**/
     185,