aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuuk van Baal <luukvbaal@gmail.com>2023-04-01 03:55:43 +0200
committerLuuk van Baal <luukvbaal@gmail.com>2023-04-01 04:23:25 +0200
commite3a3d300636872f786f0c8a338ed1a3749d0a1f6 (patch)
treee8af5a33595eb360f0f8ef6a2d7ce309b3fdce83
parent83bfd94d1df5eecb8e4069a227c7d24598636d63 (diff)
downloadrneovim-e3a3d300636872f786f0c8a338ed1a3749d0a1f6.tar.gz
rneovim-e3a3d300636872f786f0c8a338ed1a3749d0a1f6.tar.bz2
rneovim-e3a3d300636872f786f0c8a338ed1a3749d0a1f6.zip
fix(ui): recording change doesn't trigger statusline redraw
-rw-r--r--src/nvim/buffer_defs.h1
-rw-r--r--src/nvim/drawscreen.c2
-rw-r--r--test/functional/ui/statusline_spec.lua14
3 files changed, 17 insertions, 0 deletions
diff --git a/src/nvim/buffer_defs.h b/src/nvim/buffer_defs.h
index 4bdf5aac64..c808909942 100644
--- a/src/nvim/buffer_defs.h
+++ b/src/nvim/buffer_defs.h
@@ -1288,6 +1288,7 @@ struct window_S {
int w_stl_topfill; // topfill when last redrawn
char w_stl_empty; // true if elements show 0-1 (empty line)
int w_stl_state; // State when last redrawn
+ int w_stl_recording; // reg_recording when last redrawn
int w_alt_fnum; // alternate file (for # and CTRL-^)
diff --git a/src/nvim/drawscreen.c b/src/nvim/drawscreen.c
index 1c8bf56e8e..bccf8a352f 100644
--- a/src/nvim/drawscreen.c
+++ b/src/nvim/drawscreen.c
@@ -827,6 +827,7 @@ void show_cursor_info_later(bool force)
|| curwin->w_buffer->b_ml.ml_line_count != curwin->w_stl_line_count
|| curwin->w_topfill != curwin->w_stl_topfill
|| empty_line != curwin->w_stl_empty
+ || reg_recording != curwin->w_stl_recording
|| state != curwin->w_stl_state) {
if (curwin->w_status_height || global_stl_height()) {
curwin->w_redr_status = true;
@@ -851,6 +852,7 @@ void show_cursor_info_later(bool force)
curwin->w_stl_line_count = curwin->w_buffer->b_ml.ml_line_count;
curwin->w_stl_topfill = curwin->w_topfill;
curwin->w_stl_state = state;
+ curwin->w_stl_recording = reg_recording;
}
/// @return true when postponing displaying the mode message: when not redrawing
diff --git a/test/functional/ui/statusline_spec.lua b/test/functional/ui/statusline_spec.lua
index c59ade0e31..ffd45a59a3 100644
--- a/test/functional/ui/statusline_spec.lua
+++ b/test/functional/ui/statusline_spec.lua
@@ -622,3 +622,17 @@ it('K_EVENT does not trigger a statusline redraw unnecessarily', function()
sleep(50)
eq(1, eval('g:counter < 50'), 'g:counter=' .. eval('g:counter'))
end)
+
+it('statusline is redrawn on recording state change #22683', function()
+ clear()
+ local screen = Screen.new(40, 4)
+ screen:attach()
+ command('set ls=2 stl=%{repeat(reg_recording(),5)}')
+ feed('qQ')
+ screen:expect([[
+ ^ |
+ ~ |
+ QQQQQ |
+ recording @Q |
+ ]])
+end)