summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2020-04-27 20:18:31 +0200
committerBram Moolenaar <Bram@vim.org>2020-04-27 20:18:31 +0200
commitdb93495d276642f63f80471fbcb900b9aa1e9e42 (patch)
treefca8ecb1216bbce25b08f87f2ec5857df935ab8b
parent0e71704b77a9891ccae9f5a9c7429e933078f232 (diff)
downloadvim-git-db93495d276642f63f80471fbcb900b9aa1e9e42.tar.gz
patch 8.2.0649: undo problem whn an InsertLeave autocommand resets undov8.2.0649
Problem: Undo problem whn an InsertLeave autocommand resets undo. (Kutsan Kaplan) Solution: Do not create a new undo block when leaving Insert mode.
-rw-r--r--src/edit.c3
-rw-r--r--src/testdir/test_edit.vim17
-rw-r--r--src/version.c2
3 files changed, 20 insertions, 2 deletions
diff --git a/src/edit.c b/src/edit.c
index 05518ceab..7f4f76501 100644
--- a/src/edit.c
+++ b/src/edit.c
@@ -5994,7 +5994,8 @@ ins_apply_autocmds(event_T event)
// 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 ce55f6be0..a9ba31df4 100644
--- a/src/testdir/test_edit.vim
+++ b/src/testdir/test_edit.vim
@@ -1444,7 +1444,7 @@ func Test_edit_alt()
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 @@ func Test_leave_insert_autocmd()
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 a9a2e293e..fa91a2bc0 100644
--- a/src/version.c
+++ b/src/version.c
@@ -747,6 +747,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 649,
+/**/
648,
/**/
647,