fix(statusline): redraw if Visual selection other end changes (#36281)

(cherry picked from commit af0f7b59b1)
This commit is contained in:
zeertzjq
2025-10-23 11:27:23 +08:00
committed by github-actions[bot]
parent a215da823f
commit 4cc060bf44
3 changed files with 28 additions and 1 deletions

View File

@@ -1248,6 +1248,7 @@ struct window_S {
int w_stl_recording; // reg_recording when last redrawn
int w_stl_state; // get_real_state() when last redrawn
int w_stl_visual_mode; // VIsual_mode when last redrawn
pos_T w_stl_visual_pos; // VIsual when last redrawn
int w_alt_fnum; // alternate file (for # and CTRL-^)

View File

@@ -915,7 +915,10 @@ void show_cursor_info_later(bool force)
|| empty_line != curwin->w_stl_empty
|| reg_recording != curwin->w_stl_recording
|| state != curwin->w_stl_state
|| (VIsual_active && VIsual_mode != curwin->w_stl_visual_mode)) {
|| (VIsual_active && (VIsual_mode != curwin->w_stl_visual_mode
|| VIsual.lnum != curwin->w_stl_visual_pos.lnum
|| VIsual.col != curwin->w_stl_visual_pos.col
|| VIsual.coladd != curwin->w_stl_visual_pos.coladd))) {
if (curwin->w_status_height || global_stl_height()) {
curwin->w_redr_status = true;
} else {
@@ -939,6 +942,7 @@ void show_cursor_info_later(bool force)
curwin->w_stl_state = state;
if (VIsual_active) {
curwin->w_stl_visual_mode = VIsual_mode;
curwin->w_stl_visual_pos = VIsual;
}
}

View File

@@ -656,6 +656,28 @@ describe('statusline', function()
]])
feed('<Esc>')
screen:expect(s2)
-- Visual selection other end change #36280
exec([[
function! DebugVisualSelection()
return printf("v %s %s", col("v"), col("."))
endfunction
set statusline=%!DebugVisualSelection()
]])
feed('iabc<Esc>v')
screen:expect([[
ab^c |
{1:~ }|*5
{3:v 3 3 }|
{5:-- VISUAL --} |
]])
feed('iw')
screen:expect([[
{17:ab}^c |
{1:~ }|*5
{3:v 1 3 }|
{5:-- VISUAL --} |
]])
end)
it('ruler is redrawn in cmdline with redrawstatus #22804', function()