fix(buffer_updates): make lockmarks not affect extmarks and buffer updates. fixes #12861

Now mark_adjust() will trigger appropriate buf_updates_send_splice() called by extmark_adjust()
This commit is contained in:
Anton Adamansky 2021-07-05 23:30:07 +07:00 committed by Björn Linse
parent 206f4429c6
commit 7d171b1c48
2 changed files with 51 additions and 4 deletions

View File

@ -1036,10 +1036,11 @@ static void mark_adjust_internal(linenr_T line1, linenr_T line2, long amount, lo
}
sign_mark_adjust(line1, line2, amount, amount_after);
}
if (op != kExtmarkNOOP) {
extmark_adjust(curbuf, line1, line2, amount, amount_after, op);
}
}
// previous context mark
one_adjust(&(curwin->w_pcmark.lnum));

View File

@ -349,7 +349,12 @@ describe('lua: nvim_buf_attach on_bytes', function()
end
local text = meths.buf_get_lines(0, 0, -1, true)
local bytes = table.concat(text, '\n') .. '\n'
local bytes = table.concat(text, '\n')
if #text ~= 1 or #bytes ~= 0 then
-- Not empty buffer.
-- Append '\n' only if buffer is not empty, see nvim_buf_get_lines().
bytes = bytes .. '\n'
end
eq(string.len(bytes), string.len(shadowbytes), '\non_bytes: total bytecount of buffer is wrong')
for i = 1, string.len(shadowbytes) do
@ -1088,6 +1093,47 @@ describe('lua: nvim_buf_attach on_bytes', function()
}
end)
local function test_lockmarks(mode)
if not mode then mode = "" end
it("test_lockmarks " .. mode .. " %delete _", function()
local check_events = setup_eventcheck(verify, {"AAA", "BBB", "CCC"})
command(mode .. " %delete _")
check_events {
{ "test1", "bytes", 1, 3, 0, 0, 0, 3, 0, 12, 0, 0, 0 };
}
end)
it("test_lockmarks " .. mode .. " append()", function()
local check_events = setup_eventcheck(verify)
command(mode .. " call append(0, 'CCC')")
check_events {
{ "test1", "bytes", 1, 2, 0, 0, 0, 0, 0, 0, 1, 0, 4 };
}
command(mode .. " call append(1, 'BBBB')")
check_events {
{ "test1", "bytes", 1, 3, 1, 0, 4, 0, 0, 0, 1, 0, 5 };
}
command(mode .. " call append(2, '')")
check_events {
{ "test1", "bytes", 1, 4, 2, 0, 9, 0, 0, 0, 1, 0, 1 };
}
command(mode .. " $delete _")
check_events {
{ "test1", "bytes", 1, 5, 3, 0, 10, 1, 0, 1, 0, 0, 0 };
}
eq("CCC|BBBB|", table.concat(meths.buf_get_lines(0, 0, -1, true), "|"))
end)
end
test_lockmarks()
test_lockmarks "lockmarks"
teardown(function()
os.remove "Xtest-reload"
os.remove "Xtest-undofile"