patch 8.2.0649: undo problem whn an InsertLeave autocommand resets undo
Problem: Undo problem whn an InsertLeave autocommand resets undo. (Kutsan
Kaplan)
Solution: Do not create a new undo block when leaving Insert mode.
diff --git a/src/edit.c b/src/edit.c
index 05518ce..7f4f765 100644
--- a/src/edit.c
+++ b/src/edit.c
@@ -5994,7 +5994,8 @@
// If u_savesub() was called then we are not prepared to start
// a new line. Call u_save() with no contents to fix that.
- if (tick != CHANGEDTICK(curbuf))
+ // Except when leaving Insert mode.
+ if (event != EVENT_INSERTLEAVE && tick != CHANGEDTICK(curbuf))
u_save(curwin->w_cursor.lnum, (linenr_T)(curwin->w_cursor.lnum + 1));
return r;
diff --git a/src/testdir/test_edit.vim b/src/testdir/test_edit.vim
index ce55f6b..a9ba31d 100644
--- a/src/testdir/test_edit.vim
+++ b/src/testdir/test_edit.vim
@@ -1444,7 +1444,7 @@
call delete('XAltFile')
endfunc
-func Test_leave_insert_autocmd()
+func Test_edit_InsertLeave()
new
au InsertLeave * let g:did_au = 1
let g:did_au = 0
@@ -1474,6 +1474,21 @@
iunmap x
endfunc
+func Test_edit_InsertLeave_undo()
+ new XtestUndo
+ set undofile
+ au InsertLeave * wall
+ exe "normal ofoo\<Esc>"
+ call assert_equal(2, line('$'))
+ normal u
+ call assert_equal(1, line('$'))
+
+ bwipe!
+ au! InsertLeave
+ call delete('XtestUndo')
+ set undofile&
+endfunc
+
" Test for inserting characters using CTRL-V followed by a number.
func Test_edit_special_chars()
new
diff --git a/src/version.c b/src/version.c
index a9a2e29..fa91a2b 100644
--- a/src/version.c
+++ b/src/version.c
@@ -747,6 +747,8 @@
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 649,
+/**/
648,
/**/
647,