mirror of
https://github.com/neovim/neovim.git
synced 2024-12-19 18:55:14 -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;
|
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 row1 = 0;
|
||||||
int row2 = 0;
|
int row2 = 0;
|
||||||
if (invalid) {
|
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
|
// When text has been changed, possibly the start of the next line
|
||||||
// may have SpellCap that should be removed or it needs to be
|
// may have SpellCap that should be removed or it needs to be
|
||||||
// displayed. Schedule the next line for redrawing just in case.
|
// 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) && bot <= curbuf->b_ml.ml_line_count) {
|
||||||
if ((spell_check_window(curwin) || buf_meta_total(curbuf, kMTMetaSignText))
|
|
||||||
&& bot <= curbuf->b_ml.ml_line_count) {
|
|
||||||
redrawWinline(curwin, bot);
|
redrawWinline(curwin, bot);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2230,6 +2230,44 @@ describe('extmark decorations', function()
|
|||||||
]]}
|
]]}
|
||||||
end)
|
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()
|
it('works with both hl_group and sign_hl_group', function()
|
||||||
screen:try_resize(screen._width, 3)
|
screen:try_resize(screen._width, 3)
|
||||||
insert('abcdefghijklmn')
|
insert('abcdefghijklmn')
|
||||||
|
Loading…
Reference in New Issue
Block a user