# HG changeset patch # User Christian Brabandt # Date 1531667706 -7200 # Node ID 7589f103ec118f5fa36402fa76958ea24642070f # Parent a9a24e84d02de014e5d358737b87e1752b1fbdf5 patch 8.1.0187: getwininfo() and win_screenpos() return different numbers commit https://github.com/vim/vim/commit/7132ddc1014a4e1230f0080e418221e5843e1277 Author: Bram Moolenaar 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(). diff --git a/runtime/doc/eval.txt b/runtime/doc/eval.txt --- 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. diff --git a/src/evalfunc.c b/src/evalfunc.c --- 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 diff --git a/src/testdir/test_bufwintabinfo.vim b/src/testdir/test_bufwintabinfo.vim --- 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 --- 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,