diff --git a/src/nvim/window.c b/src/nvim/window.c index 42bf558799..602bba7e13 100644 --- a/src/nvim/window.c +++ b/src/nvim/window.c @@ -4441,18 +4441,17 @@ static void enter_tabpage(tabpage_T *tp, buf_T *old_curbuf, bool trigger_enter_a use_tabpage(tp); - if (p_ch != curtab->tp_ch_used) { - // Use the stored value of p_ch, so that it can be different for each tab page. - // Handle other side-effects but avoid setting frame sizes, which are still correct. - OptInt new_ch = curtab->tp_ch_used; - curtab->tp_ch_used = p_ch; - command_frame_height = false; - set_option_value(kOptCmdheight, NUMBER_OPTVAL(new_ch), 0); - command_frame_height = true; - } - if (old_curtab != curtab) { tabpage_check_windows(old_curtab); + if (p_ch != curtab->tp_ch_used) { + // Use the stored value of p_ch, so that it can be different for each tab page. + // Handle other side-effects but avoid setting frame sizes, which are still correct. + OptInt new_ch = curtab->tp_ch_used; + curtab->tp_ch_used = p_ch; + command_frame_height = false; + set_option_value(kOptCmdheight, NUMBER_OPTVAL(new_ch), 0); + command_frame_height = true; + } } // We would like doing the TabEnter event first, but we don't have a diff --git a/test/functional/ui/cmdline2_spec.lua b/test/functional/ui/cmdline2_spec.lua new file mode 100644 index 0000000000..e13ef89183 --- /dev/null +++ b/test/functional/ui/cmdline2_spec.lua @@ -0,0 +1,46 @@ +-- Tests for (protocol-driven) ui2, intended to replace the legacy message grid UI. + +local n = require('test.functional.testnvim')() +local Screen = require('test.functional.ui.screen') + +local clear, exec, exec_lua, feed = n.clear, n.exec, n.exec_lua, n.feed + +describe('cmdline2', function() + local screen + before_each(function() + clear() + screen = Screen.new() + screen:add_extra_attr_ids({ + [100] = { foreground = Screen.colors.Magenta1, bold = true }, + }) + exec_lua(function() + require('vim._extui').enable({}) + end) + end) + + it("no crash for invalid grid after 'cmdheight' OptionSet", function() + exec('tabnew | tabprev') + feed(':set ch=0') + screen:expect([[ + {5: }{100:2}{5: [No Name] }{24: [No Name] }{2: }{24:X}| + | + {1:~ }|*11 + {16::}{15:set} {16:ch}{15:=}0^ | + ]]) + feed('') + exec('tabnext') + screen:expect([[ + {24: [No Name] }{5: }{100:2}{5: [No Name] }{2: }{24:X}| + ^ | + {1:~ }|*11 + {16::}{15:set} {16:ch}{15:=}0 | + ]]) + exec('tabnext') + screen:expect([[ + {5: }{100:2}{5: [No Name] }{24: [No Name] }{2: }{24:X}| + ^ | + {1:~ }|*12 + ]]) + n.assert_alive() + end) +end) diff --git a/test/functional/ui/messages2_spec.lua b/test/functional/ui/messages2_spec.lua index b8885264db..1f4a6644de 100644 --- a/test/functional/ui/messages2_spec.lua +++ b/test/functional/ui/messages2_spec.lua @@ -1,3 +1,5 @@ +-- Tests for (protocol-driven) ui2, intended to replace the legacy message grid UI. + local n = require('test.functional.testnvim')() local Screen = require('test.functional.ui.screen')