diff options
author | Sean Dewar <seandewar@users.noreply.github.com> | 2023-08-17 23:16:19 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-08-17 23:16:19 +0100 |
commit | 9f7e7455c01718c696e132513fd449235bd4f865 (patch) | |
tree | 3324b832529d2018a3ba1b289f73489ad5d851aa | |
parent | 7dcbe74234cae6192d11c25dbcd801d35e604eb0 (diff) | |
download | rneovim-9f7e7455c01718c696e132513fd449235bd4f865.tar.gz rneovim-9f7e7455c01718c696e132513fd449235bd4f865.tar.bz2 rneovim-9f7e7455c01718c696e132513fd449235bd4f865.zip |
vim-patch:9.0.1726: incorrect heights in win_size_restore() (#24765)
Problem: incorrect heights in win_size_restore()
Solution: avoid restoring incorrect heights in win_size_restore()
https://github.com/vim/vim/commit/876f5fb570d8401aa4c58af4a5da91f10520aa9d
I already merged this prior, so just replace the new test with the old one,
but add a test case for the global statusline.
-rw-r--r-- | src/nvim/window.c | 2 | ||||
-rw-r--r-- | test/functional/ui/cmdline_spec.lua | 32 | ||||
-rw-r--r-- | test/old/testdir/test_cmdwin.vim | 29 |
3 files changed, 35 insertions, 28 deletions
diff --git a/src/nvim/window.c b/src/nvim/window.c index 0ad30b4417..e933390363 100644 --- a/src/nvim/window.c +++ b/src/nvim/window.c @@ -7198,7 +7198,7 @@ int global_stl_height(void) /// @param morewin pretend there are two or more windows if true. int last_stl_height(bool morewin) { - return (p_ls > 1 || (p_ls == 1 && (!one_nonfloat() || morewin))) ? STATUS_HEIGHT : 0; + return (p_ls > 1 || (p_ls == 1 && (morewin || !one_nonfloat()))) ? STATUS_HEIGHT : 0; } /// Return the minimal number of rows that is needed on the screen to display diff --git a/test/functional/ui/cmdline_spec.lua b/test/functional/ui/cmdline_spec.lua index a8cc8e00f0..7d87ba4972 100644 --- a/test/functional/ui/cmdline_spec.lua +++ b/test/functional/ui/cmdline_spec.lua @@ -994,35 +994,13 @@ describe("cmdline height", function() assert_alive() end) - it('unchanged when trying to restore window sizes', function() - command('set showtabline=0 cmdheight=2 laststatus=0') - feed('q:') -- Closing cmdwin tries to restore sizes - command('set cmdheight=1 | quit') - eq(1, eval('&cmdheight')) - - command('set showtabline=2 cmdheight=3') - feed('q:') - command('set showtabline=0 | quit') - eq(3, eval('&cmdheight')) - - command('set cmdheight=1 laststatus=2') - feed('q:') - command('set laststatus=0 | quit') - eq(1, eval('&cmdheight')) - - command('set laststatus=2') + it('unchanged when restoring window sizes with global statusline', function() + command('set cmdheight=2 laststatus=2') feed('q:') - command('set laststatus=1 | quit') + command('set cmdheight=1 laststatus=3 | quit') + -- Available lines changed, so closing cmdwin should skip restoring window sizes, leaving the + -- cmdheight unchanged. eq(1, eval('&cmdheight')) - - command('set laststatus=2 | belowright vsplit | wincmd _') - local restcmds = eval('winrestcmd()') - feed('q:') - command('set laststatus=1 | quit') - -- As we have 2 windows, &ls = 1 should still have a statusline on the last - -- window. As such, the number of available rows hasn't changed and the window - -- sizes should be restored. - eq(restcmds, eval('winrestcmd()')) end) end) diff --git a/test/old/testdir/test_cmdwin.vim b/test/old/testdir/test_cmdwin.vim index f948d46be1..f07fd99f8a 100644 --- a/test/old/testdir/test_cmdwin.vim +++ b/test/old/testdir/test_cmdwin.vim @@ -63,5 +63,34 @@ func Test_cmdwin_split_often() let &columns = columns endfunc +func Test_cmdwin_restore_heights() + set showtabline=0 cmdheight=2 laststatus=0 + call feedkeys("q::set cmdheight=1\<CR>:q\<CR>", 'ntx') + call assert_equal(&lines - 1, winheight(0)) + + set showtabline=2 cmdheight=3 + call feedkeys("q::set showtabline=0\<CR>:q\<CR>", 'ntx') + call assert_equal(&lines - 3, winheight(0)) + + set cmdheight=1 laststatus=2 + call feedkeys("q::set laststatus=0\<CR>:q\<CR>", 'ntx') + call assert_equal(&lines - 1, winheight(0)) + + set laststatus=2 + call feedkeys("q::set laststatus=1\<CR>:q\<CR>", 'ntx') + call assert_equal(&lines - 1, winheight(0)) + + set laststatus=2 + belowright vsplit + wincmd _ + let restcmds = winrestcmd() + call feedkeys("q::set laststatus=1\<CR>:q\<CR>", 'ntx') + " As we have 2 windows, &ls = 1 should still have a statusline on the last + " window. As such, the number of available rows hasn't changed and the window + " sizes should be restored. + call assert_equal(restcmds, winrestcmd()) + + set cmdheight& showtabline& laststatus& +endfunc " vim: shiftwidth=2 sts=2 expandtab |