mirror of
https://github.com/neovim/neovim.git
synced 2024-12-20 19:25:11 -07:00
Merge pull request #12968 from erw7/fix-substitute2
fix substitute problem with inccommand
This commit is contained in:
commit
c10c2fab5b
@ -1420,7 +1420,7 @@ Integer nvim_buf_set_extmark(Buffer buffer, Integer ns_id,
|
||||
}
|
||||
|
||||
id = extmark_set(buf, (uint64_t)ns_id, id,
|
||||
(int)line, (colnr_T)col, line2, col2, decor, kExtmarkUndo);
|
||||
(int)line, (colnr_T)col, line2, col2, decor, kExtmarkNoUndo);
|
||||
|
||||
return (Integer)id;
|
||||
|
||||
@ -1534,7 +1534,7 @@ Integer nvim_buf_add_highlight(Buffer buffer,
|
||||
ns_id = extmark_set(buf, ns_id, 0,
|
||||
(int)line, (colnr_T)col_start,
|
||||
end_line, (colnr_T)col_end,
|
||||
decoration_hl(hl_id), kExtmarkUndo);
|
||||
decoration_hl(hl_id), kExtmarkNoUndo);
|
||||
return src_id;
|
||||
}
|
||||
|
||||
@ -1664,7 +1664,7 @@ Integer nvim_buf_set_virtual_text(Buffer buffer,
|
||||
Decoration *decor = xcalloc(1, sizeof(*decor));
|
||||
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;
|
||||
}
|
||||
|
||||
|
@ -783,7 +783,7 @@ void bufhl_add_hl_pos_offset(buf_T *buf,
|
||||
}
|
||||
(void)extmark_set(buf, (uint64_t)src_id, 0,
|
||||
(int)lnum-1, hl_start, (int)lnum-1+end_off, hl_end,
|
||||
decor, kExtmarkUndo);
|
||||
decor, kExtmarkNoUndo);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -3029,8 +3029,6 @@ u_header_T *u_force_get_undo_header(buf_T *buf)
|
||||
curbuf = buf;
|
||||
// Args are tricky: this means replace empty range by empty range..
|
||||
u_savecommon(0, 1, 1, true);
|
||||
curbuf = save_curbuf;
|
||||
|
||||
uhp = buf->b_u_curhead;
|
||||
if (!uhp) {
|
||||
uhp = buf->b_u_newhead;
|
||||
@ -3038,6 +3036,7 @@ u_header_T *u_force_get_undo_header(buf_T *buf)
|
||||
abort();
|
||||
}
|
||||
}
|
||||
curbuf = save_curbuf;
|
||||
}
|
||||
return uhp;
|
||||
}
|
||||
|
@ -7,6 +7,7 @@ local meths = helpers.meths
|
||||
local funcs = helpers.funcs
|
||||
local pcall_err = helpers.pcall_err
|
||||
local ok = helpers.ok
|
||||
local assert_alive = helpers.assert_alive
|
||||
|
||||
describe('API: highlight',function()
|
||||
local expected_rgb = {
|
||||
@ -145,4 +146,15 @@ describe('API: highlight',function()
|
||||
eq({foreground=tonumber("0x888888"), background=tonumber("0x888888")},
|
||||
meths.get_hl_by_name("Shrubbery", true))
|
||||
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)
|
||||
|
@ -2750,6 +2750,26 @@ it(':substitute with inccommand, timer-induced :redraw #9777', function()
|
||||
]])
|
||||
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()
|
||||
local screen = Screen.new(10,5)
|
||||
clear()
|
||||
|
Loading…
Reference in New Issue
Block a user