From e8fdc7ef9ac67f666a58e307d82263eb2fc92a3f Mon Sep 17 00:00:00 2001 From: zeertzjq Date: Fri, 5 Dec 2025 07:38:05 +0800 Subject: [PATCH] vim-patch:9.1.1944: getwininfo() does not return if statusline is visible (#36828) Problem: gewininfo() does not return if statusline is visible Solution: Add status_height to the dict items returned by getwininfo() (Hirohito Higashi) closes: vim/vim#18841 https://github.com/vim/vim/commit/a04ab5f04c1a9e794ed45ff5f8f7e1f9c5e1a535 Co-authored-by: Hirohito Higashi --- runtime/doc/vimfn.txt | 9 +++++---- runtime/lua/vim/_meta/vimfn.lua | 9 +++++---- src/nvim/eval.lua | 9 +++++---- src/nvim/eval/window.c | 1 + test/old/testdir/test_bufwintabinfo.vim | 22 ++++++++++++++++++++++ 5 files changed, 38 insertions(+), 12 deletions(-) diff --git a/runtime/doc/vimfn.txt b/runtime/doc/vimfn.txt index a98e00d826..02004c3548 100644 --- a/runtime/doc/vimfn.txt +++ b/runtime/doc/vimfn.txt @@ -4445,8 +4445,12 @@ getwininfo([{winid}]) *getwininfo()* 'wrap' is off loclist 1 if showing a location list quickfix 1 if quickfix or location list window - terminal 1 if a terminal window + status_height status lines height (0 or 1) tabnr tab page number + terminal 1 if a terminal window + textoff number of columns occupied by any + 'foldcolumn', 'signcolumn' and line + number in front of the text topline first displayed buffer line variables a reference to the dictionary with window-local variables @@ -4455,9 +4459,6 @@ getwininfo([{winid}]) *getwininfo()* otherwise wincol leftmost screen column of the window; "col" from |win_screenpos()| - textoff number of columns occupied by any - 'foldcolumn', 'signcolumn' and line - number in front of the text winid |window-ID| winnr window number winrow topmost screen line of the window; diff --git a/runtime/lua/vim/_meta/vimfn.lua b/runtime/lua/vim/_meta/vimfn.lua index 91a1a57fa1..018453e5d2 100644 --- a/runtime/lua/vim/_meta/vimfn.lua +++ b/runtime/lua/vim/_meta/vimfn.lua @@ -4012,8 +4012,12 @@ function vim.fn.gettext(text) end --- 'wrap' is off --- loclist 1 if showing a location list --- quickfix 1 if quickfix or location list window ---- terminal 1 if a terminal window +--- status_height status lines height (0 or 1) --- tabnr tab page number +--- terminal 1 if a terminal window +--- textoff number of columns occupied by any +--- 'foldcolumn', 'signcolumn' and line +--- number in front of the text --- topline first displayed buffer line --- variables a reference to the dictionary with --- window-local variables @@ -4022,9 +4026,6 @@ function vim.fn.gettext(text) end --- otherwise --- wincol leftmost screen column of the window; --- "col" from |win_screenpos()| ---- textoff number of columns occupied by any ---- 'foldcolumn', 'signcolumn' and line ---- number in front of the text --- winid |window-ID| --- winnr window number --- winrow topmost screen line of the window; diff --git a/src/nvim/eval.lua b/src/nvim/eval.lua index b943629299..8a1ede1c87 100644 --- a/src/nvim/eval.lua +++ b/src/nvim/eval.lua @@ -4961,8 +4961,12 @@ M.funcs = { 'wrap' is off loclist 1 if showing a location list quickfix 1 if quickfix or location list window - terminal 1 if a terminal window + status_height status lines height (0 or 1) tabnr tab page number + terminal 1 if a terminal window + textoff number of columns occupied by any + 'foldcolumn', 'signcolumn' and line + number in front of the text topline first displayed buffer line variables a reference to the dictionary with window-local variables @@ -4971,9 +4975,6 @@ M.funcs = { otherwise wincol leftmost screen column of the window; "col" from |win_screenpos()| - textoff number of columns occupied by any - 'foldcolumn', 'signcolumn' and line - number in front of the text winid |window-ID| winnr window number winrow topmost screen line of the window; diff --git a/src/nvim/eval/window.c b/src/nvim/eval/window.c index bd11d4d4e2..0a5c16e757 100644 --- a/src/nvim/eval/window.c +++ b/src/nvim/eval/window.c @@ -333,6 +333,7 @@ static dict_T *get_win_info(win_T *wp, int16_t tpnr, int16_t winnr) tv_dict_add_nr(dict, S_LEN("winnr"), winnr); tv_dict_add_nr(dict, S_LEN("winid"), wp->handle); tv_dict_add_nr(dict, S_LEN("height"), wp->w_view_height); + tv_dict_add_nr(dict, S_LEN("status_height"), wp->w_status_height); tv_dict_add_nr(dict, S_LEN("winrow"), wp->w_winrow + 1); tv_dict_add_nr(dict, S_LEN("topline"), wp->w_topline); tv_dict_add_nr(dict, S_LEN("botline"), wp->w_botline - 1); diff --git a/test/old/testdir/test_bufwintabinfo.vim b/test/old/testdir/test_bufwintabinfo.vim index 225c98c530..eb82a0e214 100644 --- a/test/old/testdir/test_bufwintabinfo.vim +++ b/test/old/testdir/test_bufwintabinfo.vim @@ -201,4 +201,26 @@ func Test_getwininfo_au() bwipe! endfunc +func Test_getwininfo_status_height() + set laststatus=0 + vsplit + let info = getwininfo(win_getid())[0] + call assert_equal(0, info.status_height) + + set laststatus=2 + let info = getwininfo(win_getid())[0] + call assert_equal(1, info.status_height) + + set laststatus=1 + only + let info = getwininfo(win_getid())[0] + call assert_equal(0, info.status_height) + vsplit + let info = getwininfo(win_getid())[0] + call assert_equal(1, info.status_height) + + set laststatus&vim + bwipe! +endfunc + " vim: shiftwidth=2 sts=2 expandtab