commit 10e57ad4cb99c43544f53f784f8eb368a2008353
parent b65f4151d9e52a8521c0682a817c4dab9690e1e7
Author: zeertzjq <zeertzjq@outlook.com>
Date: Wed, 27 Sep 2023 18:58:43 +0800
vim-patch:8.2.3467: CursorHoldI event interferes with "CTRL-G U" (#25383)
Problem: CursorHoldI event interferes with "CTRL-G U". (Naohiro Ono)
Solution: Restore the flag for "CTRL-G U" after triggering CursorHoldI.
(closes vim/vim#8937)
https://github.com/vim/vim/commit/5a9357d0bff9059f547906d8d03b31bca7215af1
Co-authored-by: Bram Moolenaar <Bram@vim.org>
Diffstat:
2 files changed, 20 insertions(+), 0 deletions(-)
diff --git a/src/nvim/edit.c b/src/nvim/edit.c
@@ -878,6 +878,10 @@ static int insert_handle_key(InsertState *s)
case K_EVENT: // some event
state_handle_k_event();
+ // If CTRL-G U was used apply it to the next typed key.
+ if (dont_sync_undo == kTrue) {
+ dont_sync_undo = kNone;
+ }
goto check_pum;
case K_COMMAND: // <Cmd>command<CR>
diff --git a/test/old/testdir/test_autocmd.vim b/test/old/testdir/test_autocmd.vim
@@ -104,6 +104,22 @@ if has('timers')
set updatetime&
endfunc
+ func Test_cursorhold_insert_ctrl_g_U()
+ au CursorHoldI * :
+ set updatetime=20
+ new
+ call timer_start(100, { -> feedkeys("\<Left>foo\<Esc>", 't') })
+ call feedkeys("i()\<C-g>U", 'tx!')
+ sleep 200m
+ call assert_equal('(foo)', getline(1))
+ undo
+ call assert_equal('', getline(1))
+
+ bwipe!
+ au! CursorHoldI
+ set updatetime&
+ endfunc
+
func Test_OptionSet_modeline()
CheckFunction test_override
call test_override('starting', 1)