fix(extmarks): wrong display when changing text with virt_lines (#24879)

This commit is contained in:
Ibby 2023-08-26 21:39:05 +10:00 committed by GitHub
parent 1bdcb9aaf1
commit 362df0f793
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 63 additions and 1 deletions

View File

@ -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) {
// Do not change wl_lnum at index zero, it is used to
// 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
wp->w_lines[i].wl_valid = false;
} else if (xtra != 0) {

View File

@ -3784,6 +3784,63 @@ if (h->n_buckets < new_n_buckets) { // expand
]]}
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)
describe('decorations: signs', function()