diff options
author | zeertzjq <zeertzjq@outlook.com> | 2022-10-06 20:03:59 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-10-06 20:03:59 +0800 |
commit | 25dea99ce54de6a8c4369e28e0db82e1af669f24 (patch) | |
tree | 0b459d5b835bafb8f8d615deca779734eaa028d0 | |
parent | 2c08ab5369c79afd9138c38164e2d2c157ce8435 (diff) | |
download | rneovim-25dea99ce54de6a8c4369e28e0db82e1af669f24.tar.gz rneovim-25dea99ce54de6a8c4369e28e0db82e1af669f24.tar.bz2 rneovim-25dea99ce54de6a8c4369e28e0db82e1af669f24.zip |
vim-patch:9.0.0670: no space for command line when there is a tabline (#20512)
Problem: No space for command line when there is a tabline.
Solution: Correct computation of where the command line should be.
(closes vim/vim#11295)
https://github.com/vim/vim/commit/c9f5f73206272ccad0aa536854debc5f9781978a
-rw-r--r-- | src/nvim/option.c | 4 | ||||
-rw-r--r-- | src/nvim/testdir/test_cmdline.vim | 10 | ||||
-rw-r--r-- | src/nvim/window.c | 4 | ||||
-rw-r--r-- | test/functional/legacy/cmdline_spec.lua | 26 |
4 files changed, 41 insertions, 3 deletions
diff --git a/src/nvim/option.c b/src/nvim/option.c index a2dd2e7d84..c6a9d6b7db 100644 --- a/src/nvim/option.c +++ b/src/nvim/option.c @@ -2468,7 +2468,9 @@ static char *set_num_option(int opt_idx, char_u *varp, long value, char *errbuf, // if p_ch changed value, change the command line height // Only compute the new window layout when startup has been // completed. Otherwise the frame sizes may be wrong. - if ((p_ch != old_value || topframe->fr_height != Rows - p_ch) && full_screen) { + if ((p_ch != old_value + || tabline_height() + topframe->fr_height != Rows - p_ch) + && full_screen) { command_height(); } } else if (pp == &p_uc) { diff --git a/src/nvim/testdir/test_cmdline.vim b/src/nvim/testdir/test_cmdline.vim index b177a9cc9e..3f8e141afa 100644 --- a/src/nvim/testdir/test_cmdline.vim +++ b/src/nvim/testdir/test_cmdline.vim @@ -225,6 +225,16 @@ func Test_changing_cmdheight() call StopVimInTerminal(buf) endfunc +func Test_cmdheight_tabline() + CheckScreendump + + let buf = RunVimInTerminal('-c "set ls=2" -c "set stal=2" -c "set cmdheight=1"', {'rows': 6}) + call VerifyScreenDump(buf, 'Test_cmdheight_tabline_1', {}) + + " clean up + call StopVimInTerminal(buf) +endfunc + func Test_map_completion() if !has('cmdline_compl') return diff --git a/src/nvim/window.c b/src/nvim/window.c index ecd713013f..5993df64cd 100644 --- a/src/nvim/window.c +++ b/src/nvim/window.c @@ -4300,7 +4300,7 @@ static void enter_tabpage(tabpage_T *tp, buf_T *old_curbuf, bool trigger_enter_a // When cmdheight is changed in a tab page with '<C-w>-', cmdline_row is // changed but p_ch and tp_ch_used are not changed. Thus we also need to // check cmdline_row. - if ((row < cmdline_row) && (cmdline_row <= Rows - p_ch)) { + if (row < cmdline_row && cmdline_row <= Rows - p_ch) { clear_cmdline = true; } @@ -6409,7 +6409,7 @@ void command_height(void) curtab->tp_ch_used = p_ch; // Update cmdline_row to what it should be: just below the last window. - cmdline_row = topframe->fr_height; + cmdline_row = topframe->fr_height + tabline_height(); // If cmdline_row is smaller than what it is supposed to be for 'cmdheight' // then set old_p_ch to what it would be, so that the windows get resized diff --git a/test/functional/legacy/cmdline_spec.lua b/test/functional/legacy/cmdline_spec.lua index e7f5c780dc..2fceb6a132 100644 --- a/test/functional/legacy/cmdline_spec.lua +++ b/test/functional/legacy/cmdline_spec.lua @@ -5,6 +5,7 @@ local command = helpers.command local feed = helpers.feed local feed_command = helpers.feed_command local exec = helpers.exec +local meths = helpers.meths local pesc = helpers.pesc describe('cmdline', function() @@ -213,6 +214,31 @@ describe('cmdline', function() | ]]) end) + + -- oldtest: Test_cmdheight_tabline() + it("changing 'cmdheight' when there is a tabline", function() + local screen = Screen.new(60, 8) + screen:set_default_attr_ids({ + [0] = {bold = true, foreground = Screen.colors.Blue}, -- NonText + [1] = {bold = true, reverse = true}, -- StatusLine + [2] = {bold = true}, -- TabLineSel + [3] = {reverse = true}, -- TabLineFill + }) + screen:attach() + meths.set_option('laststatus', 2) + meths.set_option('showtabline', 2) + meths.set_option('cmdheight', 1) + screen:expect([[ + {2: [No Name] }{3: }| + ^ | + {0:~ }| + {0:~ }| + {0:~ }| + {0:~ }| + {1:[No Name] }| + | + ]]) + end) end) describe('cmdwin', function() |