mirror of
https://github.com/neovim/neovim.git
synced 2025-09-16 00:08:19 +00:00
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:
@@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -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)
|
||||||
|
@@ -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()
|
||||||
|
Reference in New Issue
Block a user