diff options
author | Luuk van Baal <luukvbaal@gmail.com> | 2023-04-01 03:55:43 +0200 |
---|---|---|
committer | Luuk van Baal <luukvbaal@gmail.com> | 2023-04-01 04:23:25 +0200 |
commit | e3a3d300636872f786f0c8a338ed1a3749d0a1f6 (patch) | |
tree | e8af5a33595eb360f0f8ef6a2d7ce309b3fdce83 | |
parent | 83bfd94d1df5eecb8e4069a227c7d24598636d63 (diff) | |
download | rneovim-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.h | 1 | ||||
-rw-r--r-- | src/nvim/drawscreen.c | 2 | ||||
-rw-r--r-- | test/functional/ui/statusline_spec.lua | 14 |
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) |