0
0
mirror of https://github.com/vim/vim.git synced 2025-09-30 04:44:14 -04:00

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().
This commit is contained in:
Bram Moolenaar
2018-07-15 17:01:11 +02:00
parent 44a693a1bd
commit 7132ddc101
4 changed files with 51 additions and 46 deletions

View File

@@ -2196,7 +2196,7 @@ gettabvar({nr}, {varname} [, {def}])
any variable {varname} in tab {nr} or {def} any variable {varname} in tab {nr} or {def}
gettabwinvar({tabnr}, {winnr}, {name} [, {def}]) gettabwinvar({tabnr}, {winnr}, {name} [, {def}])
any {name} in {winnr} in tab page {tabnr} 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 getwinpos([{timeout}]) List X and Y coord in pixels of the Vim window
getwinposx() Number X 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 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') :let list_is_on = gettabwinvar(1, 2, '&list')
:echo "myvar = " . gettabwinvar(3, 1, 'myvar') :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()* getwinpos([{timeout}]) *getwinpos()*
The result is a list with two numbers, the result of The result is a list with two numbers, the result of
getwinposx() and getwinposy() combined: 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 result will be -1 if the information is not available.
The value can be used with `:winpos`. 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()* getwinvar({winnr}, {varname} [, {def}]) *getwinvar()*
Like |gettabwinvar()| for the current tabpage. Like |gettabwinvar()| for the current tabpage.
Examples: > Examples: >
@@ -9049,7 +9051,7 @@ win_id2win({expr}) *win_id2win()*
win_screenpos({nr}) *win_screenpos()* win_screenpos({nr}) *win_screenpos()*
Return the screen position of window {nr} as a list with two Return the screen position of window {nr} as a list with two
numbers: [row, col]. The first window always has position 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|. {nr} can be the window number or the |window-ID|.
Return [0, 0] if the window cannot be found in the current Return [0, 0] if the window cannot be found in the current
tabpage. tabpage.

View File

@@ -5648,12 +5648,12 @@ get_win_info(win_T *wp, short tpnr, short winnr)
dict_add_number(dict, "winnr", winnr); dict_add_number(dict, "winnr", winnr);
dict_add_number(dict, "winid", wp->w_id); dict_add_number(dict, "winid", wp->w_id);
dict_add_number(dict, "height", wp->w_height); 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 #ifdef FEAT_MENU
dict_add_number(dict, "winbar", wp->w_winbar_height); dict_add_number(dict, "winbar", wp->w_winbar_height);
#endif #endif
dict_add_number(dict, "width", wp->w_width); 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); dict_add_number(dict, "bufnr", wp->w_buffer->b_fnum);
#ifdef FEAT_TERMINAL #ifdef FEAT_TERMINAL

View File

@@ -52,21 +52,22 @@ function Test_getbufwintabinfo()
let winlist = getwininfo() let winlist = getwininfo()
call assert_equal(5, len(winlist)) call assert_equal(5, len(winlist))
call assert_equal(winwidth(1), winlist[0].width) call assert_equal(winwidth(1), winlist[0].width)
call assert_equal(0, winlist[0].wincol) call assert_equal(1, winlist[0].wincol)
let tablineheight = winlist[0].winrow == 1 ? 1 : 0 " tabline adds one row in terminal, not in GUI
call assert_equal(tablineheight, winlist[0].winrow) " tabline adds one 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(winbufnr(2), winlist[1].bufnr)
call assert_equal(winheight(2), winlist[1].height) call assert_equal(winheight(2), winlist[1].height)
call assert_equal(0, winlist[1].wincol) call assert_equal(1, winlist[1].wincol)
call assert_equal(tablineheight + winheight(1) + 1, winlist[1].winrow) call assert_equal(tablineheight + winheight(1) + 2, winlist[1].winrow)
call assert_equal(1, winlist[2].winnr) call assert_equal(1, winlist[2].winnr)
call assert_equal(tablineheight, winlist[2].winrow) call assert_equal(tablineheight + 1, winlist[2].winrow)
call assert_equal(0, winlist[2].wincol) call assert_equal(1, winlist[2].wincol)
call assert_equal(winlist[2].width + 1, winlist[3].wincol) call assert_equal(winlist[2].width + 2, winlist[3].wincol)
call assert_equal(0, winlist[4].wincol) call assert_equal(1, winlist[4].wincol)
call assert_equal(1, winlist[0].tabnr) call assert_equal(1, winlist[0].tabnr)
call assert_equal(1, winlist[1].tabnr) call assert_equal(1, winlist[1].tabnr)

View File

@@ -789,6 +789,8 @@ static char *(features[]) =
static int included_patches[] = static int included_patches[] =
{ /* Add new patch number below this line */ { /* Add new patch number below this line */
/**/
187,
/**/ /**/
186, 186,
/**/ /**/