aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorzeertzjq <zeertzjq@outlook.com>2022-04-21 08:06:18 +0800
committerGitHub <noreply@github.com>2022-04-21 08:06:18 +0800
commitdb851cb105ac9f295a836a39ff73da14a70ae754 (patch)
treeda2250500784edb1a74e563919a3c6e1e6107f66
parenta4b75010ba9ce315f769f0b028f58b9657bdecf0 (diff)
parent87e1693ba63ff6d936ad0bf8a6a9cbacfe2413e9 (diff)
downloadrneovim-db851cb105ac9f295a836a39ff73da14a70ae754.tar.gz
rneovim-db851cb105ac9f295a836a39ff73da14a70ae754.tar.bz2
rneovim-db851cb105ac9f295a836a39ff73da14a70ae754.zip
Merge pull request #18199 from zeertzjq/vim-8.2.4797
vim-patch:8.2.4797: getwininfo() may get oudated values
-rw-r--r--src/nvim/eval.c3
-rw-r--r--src/nvim/testdir/test_bufwintabinfo.vim34
2 files changed, 32 insertions, 5 deletions
diff --git a/src/nvim/eval.c b/src/nvim/eval.c
index 3e855ece15..0c45f05640 100644
--- a/src/nvim/eval.c
+++ b/src/nvim/eval.c
@@ -6401,6 +6401,9 @@ dict_T *get_win_info(win_T *wp, int16_t tpnr, int16_t winnr)
{
dict_T *const dict = tv_dict_alloc();
+ // make sure w_botline is valid
+ validate_botline(wp);
+
tv_dict_add_nr(dict, S_LEN("tabnr"), tpnr);
tv_dict_add_nr(dict, S_LEN("winnr"), winnr);
tv_dict_add_nr(dict, S_LEN("winid"), wp->handle);
diff --git a/src/nvim/testdir/test_bufwintabinfo.vim b/src/nvim/testdir/test_bufwintabinfo.vim
index a6eb93b4be..326aefb731 100644
--- a/src/nvim/testdir/test_bufwintabinfo.vim
+++ b/src/nvim/testdir/test_bufwintabinfo.vim
@@ -145,6 +145,13 @@ function Test_get_win_options()
endif
endfunc
+function Test_getbufinfo_lastused()
+ new Xfoo
+ let info = getbufinfo('Xfoo')[0]
+ call assert_equal(has_key(info, 'lastused'), 1)
+ call assert_equal(type(info.lastused), type(0))
+endfunc
+
func Test_getbufinfo_lines()
new Xfoo
call setline(1, ['a', 'bc', 'd'])
@@ -155,9 +162,26 @@ func Test_getbufinfo_lines()
bw!
endfunc
-function Test_getbufinfo_lastused()
- new Xfoo
- let info = getbufinfo('Xfoo')[0]
- call assert_equal(has_key(info, 'lastused'), 1)
- call assert_equal(type(info.lastused), type(0))
+func Test_getwininfo_au()
+ enew
+ call setline(1, range(1, 16))
+
+ let g:info = #{}
+ augroup T1
+ au!
+ au WinEnter * let g:info = getwininfo(win_getid())[0]
+ augroup END
+
+ 4split
+ " Check that calling getwininfo() from WinEnter returns fresh values for
+ " topline and botline.
+ call assert_equal(1, g:info.topline)
+ call assert_equal(4, g:info.botline)
+ close
+
+ unlet g:info
+ augroup! T1
+ bwipe!
endfunc
+
+" vim: shiftwidth=2 sts=2 expandtab