summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2018-07-15 17:01:11 +0200
committerBram Moolenaar <Bram@vim.org>2018-07-15 17:01:11 +0200
commit7132ddc1014a4e1230f0080e418221e5843e1277 (patch)
tree639bf26cc5e7a66e8a6ac9776d8eff140fc1ee04
parent44a693a1bdfe987edb649677c94c214f94b2aada (diff)
downloadvim-git-7132ddc1014a4e1230f0080e418221e5843e1277.tar.gz
patch 8.1.0187: getwininfo() and win_screenpos() return different numbersv8.1.0187
Problem: getwininfo() and win_screenpos() return different numbers. Solution: Add one to "wincol" and "winrow" from getwininfo().
-rw-r--r--runtime/doc/eval.txt72
-rw-r--r--src/evalfunc.c4
-rw-r--r--src/testdir/test_bufwintabinfo.vim19
-rw-r--r--src/version.c2
4 files changed, 51 insertions, 46 deletions
diff --git a/runtime/doc/eval.txt b/runtime/doc/eval.txt
index 9394ece21..575981552 100644
--- 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} [, {def}]) *gettabwinvar()*
: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, which is the Y coordinate in pixels of
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.
diff --git a/src/evalfunc.c b/src/evalfunc.c
index 13c60b993..2e06c2063 100644
--- a/src/evalfunc.c
+++ b/src/evalfunc.c
@@ -5648,12 +5648,12 @@ get_win_info(win_T *wp, short tpnr, short winnr)
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
diff --git a/src/testdir/test_bufwintabinfo.vim b/src/testdir/test_bufwintabinfo.vim
index d88b061ac..0e8c7d1dc 100644
--- 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)
diff --git a/src/version.c b/src/version.c
index 08e39b4d4..559d8bed5 100644
--- 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,