Merge pull request #12968 from erw7/fix-substitute2

fix substitute problem with inccommand
This commit is contained in:
Thomas Vigouroux 2020-10-02 09:56:57 +02:00 committed by GitHub
commit c10c2fab5b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 37 additions and 6 deletions

View File

@ -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;
}

View File

@ -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);
}
}

View File

@ -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;
}

View File

@ -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)

View File

@ -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()