mirror of
https://github.com/neovim/neovim
synced 2025-07-17 01:31:48 +00:00
fix(extmarks): wrong display when changing text with virt_lines (#24879)
This commit is contained in:
@ -319,7 +319,12 @@ static void changed_common(buf_T *buf, linenr_T lnum, colnr_T col, linenr_T lnum
|
|||||||
if (wp->w_lines[i].wl_lnum >= lnum) {
|
if (wp->w_lines[i].wl_lnum >= lnum) {
|
||||||
// Do not change wl_lnum at index zero, it is used to
|
// Do not change wl_lnum at index zero, it is used to
|
||||||
// compare with w_topline. Invalidate it instead.
|
// compare with w_topline. Invalidate it instead.
|
||||||
if (wp->w_lines[i].wl_lnum < lnume || i == 0) {
|
// If the buffer has virt_lines, invalidate the line
|
||||||
|
// after the changed lines as the virt_lines for a
|
||||||
|
// changed line may become invalid.
|
||||||
|
if (i == 0 || wp->w_lines[i].wl_lnum < lnume
|
||||||
|
|| (wp->w_lines[i].wl_lnum == lnume
|
||||||
|
&& wp->w_buffer->b_virt_line_blocks > 0)) {
|
||||||
// line included in change
|
// line included in change
|
||||||
wp->w_lines[i].wl_valid = false;
|
wp->w_lines[i].wl_valid = false;
|
||||||
} else if (xtra != 0) {
|
} else if (xtra != 0) {
|
||||||
|
@ -3784,6 +3784,63 @@ if (h->n_buckets < new_n_buckets) { // expand
|
|||||||
]]}
|
]]}
|
||||||
end)
|
end)
|
||||||
|
|
||||||
|
it('works when using dd or yyp #23915 #23916', function()
|
||||||
|
insert([[
|
||||||
|
line1
|
||||||
|
line2
|
||||||
|
line3
|
||||||
|
line4
|
||||||
|
line5]])
|
||||||
|
meths.buf_set_extmark(0, ns, 0, 0, {virt_lines={{{"foo"}}, {{"bar"}}, {{"baz"}}}})
|
||||||
|
screen:expect{grid=[[
|
||||||
|
line1 |
|
||||||
|
foo |
|
||||||
|
bar |
|
||||||
|
baz |
|
||||||
|
line2 |
|
||||||
|
line3 |
|
||||||
|
line4 |
|
||||||
|
line^5 |
|
||||||
|
{1:~ }|
|
||||||
|
{1:~ }|
|
||||||
|
{1:~ }|
|
||||||
|
|
|
||||||
|
]]}
|
||||||
|
|
||||||
|
feed('gg')
|
||||||
|
feed('dd')
|
||||||
|
screen:expect{grid=[[
|
||||||
|
^line2 |
|
||||||
|
foo |
|
||||||
|
bar |
|
||||||
|
baz |
|
||||||
|
line3 |
|
||||||
|
line4 |
|
||||||
|
line5 |
|
||||||
|
{1:~ }|
|
||||||
|
{1:~ }|
|
||||||
|
{1:~ }|
|
||||||
|
{1:~ }|
|
||||||
|
|
|
||||||
|
]]}
|
||||||
|
|
||||||
|
feed('yyp')
|
||||||
|
screen:expect{grid=[[
|
||||||
|
line2 |
|
||||||
|
foo |
|
||||||
|
bar |
|
||||||
|
baz |
|
||||||
|
^line2 |
|
||||||
|
line3 |
|
||||||
|
line4 |
|
||||||
|
line5 |
|
||||||
|
{1:~ }|
|
||||||
|
{1:~ }|
|
||||||
|
{1:~ }|
|
||||||
|
|
|
||||||
|
]]}
|
||||||
|
end)
|
||||||
|
|
||||||
end)
|
end)
|
||||||
|
|
||||||
describe('decorations: signs', function()
|
describe('decorations: signs', function()
|
||||||
|
Reference in New Issue
Block a user