mirror of
https://github.com/neovim/neovim.git
synced 2024-12-23 20:55:18 -07:00
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:
parent
206f4429c6
commit
7d171b1c48
@ -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));
|
||||
|
@ -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"
|
||||
|
Loading…
Reference in New Issue
Block a user