extmark: fix decoration ploblems with extmark

54ce101 changed the way undo entries are created when adding decorations.
This creates all sorts of problems.This change fixes the problem by
reverting to the previous behavior.
This commit is contained in:
erw7
2020-09-23 10:33:18 +09:00
parent 4f8d98e583
commit 620c8fdfe9
4 changed files with 35 additions and 3 deletions

View File

@@ -1534,7 +1534,7 @@ Integer nvim_buf_add_highlight(Buffer buffer,
ns_id = extmark_set(buf, ns_id, 0, ns_id = extmark_set(buf, ns_id, 0,
(int)line, (colnr_T)col_start, (int)line, (colnr_T)col_start,
end_line, (colnr_T)col_end, end_line, (colnr_T)col_end,
decoration_hl(hl_id), kExtmarkUndo); decoration_hl(hl_id), kExtmarkNoUndo);
return src_id; return src_id;
} }
@@ -1664,7 +1664,7 @@ Integer nvim_buf_set_virtual_text(Buffer buffer,
Decoration *decor = xcalloc(1, sizeof(*decor)); Decoration *decor = xcalloc(1, sizeof(*decor));
decor->virt_text = virt_text; decor->virt_text = virt_text;
extmark_set(buf, ns_id, 0, (int)line, 0, -1, -1, decor, kExtmarkUndo); extmark_set(buf, ns_id, 0, (int)line, 0, -1, -1, decor, kExtmarkNoUndo);
return src_id; return src_id;
} }

View File

@@ -783,7 +783,7 @@ void bufhl_add_hl_pos_offset(buf_T *buf,
} }
(void)extmark_set(buf, (uint64_t)src_id, 0, (void)extmark_set(buf, (uint64_t)src_id, 0,
(int)lnum-1, hl_start, (int)lnum-1+end_off, hl_end, (int)lnum-1, hl_start, (int)lnum-1+end_off, hl_end,
decor, kExtmarkUndo); decor, kExtmarkNoUndo);
} }
} }

View File

@@ -7,6 +7,7 @@ local meths = helpers.meths
local funcs = helpers.funcs local funcs = helpers.funcs
local pcall_err = helpers.pcall_err local pcall_err = helpers.pcall_err
local ok = helpers.ok local ok = helpers.ok
local assert_alive = helpers.assert_alive
describe('API: highlight',function() describe('API: highlight',function()
local expected_rgb = { local expected_rgb = {
@@ -145,4 +146,15 @@ describe('API: highlight',function()
eq({foreground=tonumber("0x888888"), background=tonumber("0x888888")}, eq({foreground=tonumber("0x888888"), background=tonumber("0x888888")},
meths.get_hl_by_name("Shrubbery", true)) meths.get_hl_by_name("Shrubbery", true))
end) end)
it("nvim_buf_add_highlight to other buffer doesn't crash if undo is disabled #12873", function()
command('vsplit file')
local err, _ = pcall(meths.buf_set_option, 1, 'undofile', false)
eq(true, err)
err, _ = pcall(meths.buf_set_option, 1, 'undolevels', -1)
eq(true, err)
err, _ = pcall(meths.buf_add_highlight, 1, -1, 'Question', 0, 0, -1)
eq(true, err)
assert_alive()
end)
end) end)

View File

@@ -2750,6 +2750,26 @@ it(':substitute with inccommand, timer-induced :redraw #9777', function()
]]) ]])
end) end)
it(":substitute doesn't crash with inccommand, if undo is empty #12932", function()
local screen = Screen.new(10,5)
clear()
command('set undolevels=-1')
common_setup(screen, 'split', 'test')
feed(':%s/test')
sleep(100)
feed('/')
sleep(100)
feed('f')
screen:expect([[
{12:f} |
{15:~ }|
{15:~ }|
{15:~ }|
:%s/test/f^ |
]])
assert_alive()
end)
it('long :%s/ with inccommand does not collapse cmdline', function() it('long :%s/ with inccommand does not collapse cmdline', function()
local screen = Screen.new(10,5) local screen = Screen.new(10,5)
clear() clear()