fix(redraw): update curswant for Visual selection (#34241)

Problem:  Blockwise Visual selection not redrawn correctly when moving
          cursor for more than 1 cells with 'virtualedit'.
Solution: Restore the curswant update removed in 6679687bb3.
(cherry picked from commit 7ed8e96994)
This commit is contained in:
zeertzjq
2025-05-31 07:47:13 +08:00
committed by github-actions[bot]
parent 1eb33f7d00
commit d9c10ea753
2 changed files with 25 additions and 0 deletions

View File

@ -597,6 +597,11 @@ int update_screen(void)
curwin->w_redr_type = UPD_NOT_VALID;
}
if (curwin->w_redr_type == UPD_INVERTED) {
// Update w_curswant so that the end of Visual selection is correct.
update_curswant();
}
// Redraw the tab pages line if needed.
if (redraw_tabline || type >= UPD_NOT_VALID) {
update_window_hl(curwin, type >= UPD_NOT_VALID);

View File

@ -423,6 +423,26 @@ describe('highlight', function()
]])
end)
it('blockwise Visual highlight with virtualedit=block #34235', function()
local screen = Screen.new(45, 5)
command('set virtualedit=block')
insert('foobar\nfoo')
feed('0<C-V>k$')
screen:expect([[
{17:foobar}^ |
{17:foo } |
{1:~ }|*2
{5:-- VISUAL BLOCK --} |
]])
feed('10l')
screen:expect([[
{17:foobar }^ |
{17:foo } |
{1:~ }|*2
{5:-- VISUAL BLOCK --} |
]])
end)
it('cterm=standout gui=standout', function()
local screen = Screen.new(20, 5)
screen:add_extra_attr_ids {