From ef44e597294e4d0d9128ef69b6aa7481a54e17cb Mon Sep 17 00:00:00 2001 From: zeertzjq Date: Sat, 5 Aug 2023 22:42:34 +0800 Subject: fix(inccommand): don't set an invalid 'undolevels' value (#24575) Problem: Cannot break undo by setting 'undolevels' to itself in 'inccommand' preview callback. Solution: Don't set an invalid 'undolevels' value. Co-authored-by: Michael Henry --- test/functional/ui/inccommand_user_spec.lua | 38 ++++++++++++++++++++++++++--- 1 file changed, 35 insertions(+), 3 deletions(-) (limited to 'test/functional/ui') diff --git a/test/functional/ui/inccommand_user_spec.lua b/test/functional/ui/inccommand_user_spec.lua index 62c4cac709..da7508fad1 100644 --- a/test/functional/ui/inccommand_user_spec.lua +++ b/test/functional/ui/inccommand_user_spec.lua @@ -239,7 +239,8 @@ describe("'inccommand' for user commands", function() [1] = {background = Screen.colors.Yellow1}, [2] = {foreground = Screen.colors.Blue1, bold = true}, [3] = {reverse = true}, - [4] = {reverse = true, bold = true} + [4] = {reverse = true, bold = true}, + [5] = {foreground = Screen.colors.Blue}, }) screen:attach() exec_lua(setup_replace_cmd) @@ -458,9 +459,8 @@ describe("'inccommand' for user commands", function() assert_alive() end) - it('breaking undo chain in Insert mode works properly #20248', function() + local function test_preview_break_undo() command('set inccommand=nosplit') - command('inoremap . .u') exec_lua([[ vim.api.nvim_create_user_command('Test', function() end, { nargs = 1, @@ -490,6 +490,26 @@ describe("'inccommand' for user commands", function() {2:~ }| :Test a.a.a.a.^ | ]]) + feed('u') + screen:expect([[ + text on line 1 | + more text on line 2 | + oh no, even more text | + will the text ever stop | + oh well | + did the text stop | + why won't it stop | + make the text stop | + a.a.a. | + {2:~ }| + {2:~ }| + {2:~ }| + {2:~ }| + {2:~ }| + {2:~ }| + {2:~ }| + :Test a.a.a.a.{5:^[}u^ | + ]]) feed('') screen:expect([[ text on line 1 | @@ -510,6 +530,18 @@ describe("'inccommand' for user commands", function() {2:~ }| | ]]) + end + + describe('breaking undo chain in Insert mode works properly', function() + it('when using i_CTRL-G_u #20248', function() + command('inoremap . .u') + test_preview_break_undo() + end) + + it('when setting &l:undolevels to itself #24575', function() + command('inoremap . .let &l:undolevels = &l:undolevels') + test_preview_break_undo() + end) end) end) -- cgit