aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorzeertzjq <zeertzjq@outlook.com>2023-06-23 06:40:26 +0800
committerGitHub <noreply@github.com>2023-06-23 06:40:26 +0800
commit3688735c2b63337ab8d8b12ac08b4e6e064e98a2 (patch)
tree648efd366587e9f3b17f81b2b451401c6f0dc90f
parent12c2c16acf7051d364d29cfd71f2542b0943d8e8 (diff)
downloadrneovim-3688735c2b63337ab8d8b12ac08b4e6e064e98a2.tar.gz
rneovim-3688735c2b63337ab8d8b12ac08b4e6e064e98a2.tar.bz2
rneovim-3688735c2b63337ab8d8b12ac08b4e6e064e98a2.zip
fix(cmdline): don't redraw 'tabline' in Ex mode (#24123)
Redrawing of 'statusline' and 'winbar' are actually already inhibited by RedawingDisabled in Ex mode. In Vim there is a check for `msg_scrolled == 0` (which is false in Ex mode) since Vim doesn't have msgsep. Add a `!exmode_active` check here in Nvim instead.
-rw-r--r--src/nvim/ex_getln.c2
-rw-r--r--test/functional/ui/cmdline_spec.lua39
2 files changed, 40 insertions, 1 deletions
diff --git a/src/nvim/ex_getln.c b/src/nvim/ex_getln.c
index 77b09a5f73..969023b70d 100644
--- a/src/nvim/ex_getln.c
+++ b/src/nvim/ex_getln.c
@@ -791,7 +791,7 @@ static uint8_t *command_line_enter(int firstc, long count, int indent, bool clea
// Redraw the statusline in case it uses the current mode using the mode()
// function.
- if (!cmd_silent) {
+ if (!cmd_silent && !exmode_active) {
bool found_one = false;
FOR_ALL_WINDOWS_IN_TAB(wp, curtab) {
diff --git a/test/functional/ui/cmdline_spec.lua b/test/functional/ui/cmdline_spec.lua
index a9469bdf2d..dc29b765bd 100644
--- a/test/functional/ui/cmdline_spec.lua
+++ b/test/functional/ui/cmdline_spec.lua
@@ -944,6 +944,45 @@ describe('statusline is redrawn on entering cmdline', function()
end)
end)
+it('tabline is not redrawn in Ex mode #24122', function()
+ clear()
+ local screen = Screen.new(60, 5)
+ screen:set_default_attr_ids({
+ [0] = {bold = true, foreground = Screen.colors.Blue}, -- NonText
+ [1] = {bold = true, reverse = true}, -- MsgSeparator
+ [2] = {reverse = true}, -- TabLineFill
+ })
+ screen:attach()
+
+ exec([[
+ set showtabline=2
+ set tabline=%!MyTabLine()
+
+ function! MyTabLine()
+
+ return "foo"
+ endfunction
+ ]])
+
+ feed('gQ')
+ screen:expect{grid=[[
+ {2:foo }|
+ |
+ {1: }|
+ Entering Ex mode. Type "visual" to go to Normal mode. |
+ :^ |
+ ]]}
+
+ feed('echo 1<CR>')
+ screen:expect{grid=[[
+ {1: }|
+ Entering Ex mode. Type "visual" to go to Normal mode. |
+ :echo 1 |
+ 1 |
+ :^ |
+ ]]}
+end)
+
describe("cmdline height", function()
it("does not crash resized screen #14263", function()
clear()