aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorzeertzjq <zeertzjq@outlook.com>2023-04-14 07:00:04 +0800
committerGitHub <noreply@github.com>2023-04-14 07:00:04 +0800
commit0adb9f75c52424c8839708f51294ca5f58a3c18f (patch)
tree8777196e38a07d17bc978b18a404e5d88d6233ca
parent3a3ec37260592b6c5ab96c4e8f7f96a7b411829f (diff)
parent80f6d55521cd25e7746e34b899be5532ea88c09b (diff)
downloadrneovim-0adb9f75c52424c8839708f51294ca5f58a3c18f.tar.gz
rneovim-0adb9f75c52424c8839708f51294ca5f58a3c18f.tar.bz2
rneovim-0adb9f75c52424c8839708f51294ca5f58a3c18f.zip
Merge pull request #23071 from luukvbaal/sloclater
fix: winbar is not redrawn on window change when 'showcmdloc' is "statusline"
-rw-r--r--src/nvim/normal.c18
-rw-r--r--test/functional/ui/winbar_spec.lua35
2 files changed, 48 insertions, 5 deletions
diff --git a/src/nvim/normal.c b/src/nvim/normal.c
index b11d5a3c32..718c51deb0 100644
--- a/src/nvim/normal.c
+++ b/src/nvim/normal.c
@@ -1173,7 +1173,7 @@ static int normal_execute(VimState *state, int key)
msg_col = 0;
}
- s->old_pos = curwin->w_cursor; // remember where cursor was
+ s->old_pos = curwin->w_cursor; // remember where the cursor was
// When 'keymodel' contains "startsel" some keys start Select/Visual
// mode.
@@ -1997,13 +1997,21 @@ static void display_showcmd(void)
showcmd_is_clear = (len == 0);
if (*p_sloc == 's') {
- win_redr_status(curwin);
- setcursor(); // put cursor back where it belongs
+ if (showcmd_is_clear) {
+ curwin->w_redr_status = true;
+ } else {
+ win_redr_status(curwin);
+ setcursor(); // put cursor back where it belongs
+ }
return;
}
if (*p_sloc == 't') {
- draw_tabline();
- setcursor(); // put cursor back where it belongs
+ if (showcmd_is_clear) {
+ redraw_tabline = true;
+ } else {
+ draw_tabline();
+ setcursor(); // put cursor back where it belongs
+ }
return;
}
// 'showcmdloc' is "last" or empty
diff --git a/test/functional/ui/winbar_spec.lua b/test/functional/ui/winbar_spec.lua
index ece27ec3ff..970f9c3d76 100644
--- a/test/functional/ui/winbar_spec.lua
+++ b/test/functional/ui/winbar_spec.lua
@@ -114,6 +114,41 @@ describe('winbar', function()
{2:[No Name] [No Name] }|
|
]])
+ -- 'showcmdloc' "statusline" should not interfere with winbar redrawing #23030
+ command('set showcmd showcmdloc=statusline')
+ feed('<C-W>w')
+ feed('<C-W>')
+ screen:expect([[
+ {6:Set Up The Bars }│{6:Set Up The Bars }|
+ │ |
+ {3:~ }│{3:~ }|
+ {3:~ }│{2:[No Name] }|
+ {3:~ }│{5:Set Up The Bars }|
+ {3:~ }│^ |
+ {3:~ }│{3:~ }|
+ {3:~ }│{4:[No Name] ^W }|
+ {3:~ }│{6:Set Up The Bars }|
+ {3:~ }│ |
+ {3:~ }│{3:~ }|
+ {2:[No Name] [No Name] }|
+ |
+ ]])
+ feed('w<C-W>W')
+ screen:expect([[
+ {6:Set Up The Bars }│{6:Set Up The Bars }|
+ │ |
+ {3:~ }│{3:~ }|
+ {3:~ }│{2:[No Name] }|
+ {3:~ }│{5:Set Up The Bars }|
+ {3:~ }│^ |
+ {3:~ }│{3:~ }|
+ {3:~ }│{4:[No Name] }|
+ {3:~ }│{6:Set Up The Bars }|
+ {3:~ }│ |
+ {3:~ }│{3:~ }|
+ {2:[No Name] [No Name] }|
+ |
+ ]])
end)
it('works when switching value of \'winbar\'', function()