mirror of
https://github.com/neovim/neovim.git
synced 2024-12-23 20:55:18 -07:00
fix(extmarks): redraw pre-undo position (#27437)
Problem: Virtual text not redrawn properly after undo moves its extmark. Solution: Redraw the moved extmark's pre-undo position.
This commit is contained in:
parent
597ecf7516
commit
2d9e063a63
@ -116,6 +116,12 @@ static void extmark_setraw(buf_T *buf, uint64_t mark, int row, colnr_T col, bool
|
||||
return;
|
||||
}
|
||||
|
||||
// Only the position before undo needs to be redrawn here,
|
||||
// as the position after undo should be marked as changed.
|
||||
if (!invalid && mt_decor_any(key) && key.pos.row != row) {
|
||||
decor_redraw(buf, key.pos.row, key.pos.row, key.pos.col, mt_decor(key));
|
||||
}
|
||||
|
||||
int row1 = 0;
|
||||
int row2 = 0;
|
||||
if (invalid) {
|
||||
|
@ -2390,9 +2390,7 @@ static void u_undoredo(bool undo, bool do_buf_event)
|
||||
// When text has been changed, possibly the start of the next line
|
||||
// may have SpellCap that should be removed or it needs to be
|
||||
// displayed. Schedule the next line for redrawing just in case.
|
||||
// Also just in case the line had a sign which needs to be removed.
|
||||
if ((spell_check_window(curwin) || buf_meta_total(curbuf, kMTMetaSignText))
|
||||
&& bot <= curbuf->b_ml.ml_line_count) {
|
||||
if (spell_check_window(curwin) && bot <= curbuf->b_ml.ml_line_count) {
|
||||
redrawWinline(curwin, bot);
|
||||
}
|
||||
|
||||
|
@ -2230,6 +2230,44 @@ describe('extmark decorations', function()
|
||||
]]}
|
||||
end)
|
||||
|
||||
it('virtual text is drawn correctly after delete and undo #27368', function()
|
||||
insert('aaa\nbbb\nccc\nddd\neee')
|
||||
command('vsplit')
|
||||
api.nvim_buf_set_extmark(0, ns, 2, 0, { virt_text = {{'EOL'}} })
|
||||
feed('3gg')
|
||||
screen:expect{grid=[[
|
||||
aaa │aaa |
|
||||
bbb │bbb |
|
||||
^ccc EOL │ccc EOL |
|
||||
ddd │ddd |
|
||||
eee │eee |
|
||||
{1:~ }│{1:~ }|*8
|
||||
{41:[No Name] [+] }{40:[No Name] [+] }|
|
||||
|
|
||||
]]}
|
||||
feed('dd')
|
||||
screen:expect{grid=[[
|
||||
aaa │aaa |
|
||||
bbb │bbb |
|
||||
^ddd EOL │ddd EOL |
|
||||
eee │eee |
|
||||
{1:~ }│{1:~ }|*9
|
||||
{41:[No Name] [+] }{40:[No Name] [+] }|
|
||||
|
|
||||
]]}
|
||||
command('silent undo')
|
||||
screen:expect{grid=[[
|
||||
aaa │aaa |
|
||||
bbb │bbb |
|
||||
^ccc EOL │ccc EOL |
|
||||
ddd │ddd |
|
||||
eee │eee |
|
||||
{1:~ }│{1:~ }|*8
|
||||
{41:[No Name] [+] }{40:[No Name] [+] }|
|
||||
|
|
||||
]]}
|
||||
end)
|
||||
|
||||
it('works with both hl_group and sign_hl_group', function()
|
||||
screen:try_resize(screen._width, 3)
|
||||
insert('abcdefghijklmn')
|
||||
|
Loading…
Reference in New Issue
Block a user