diff options
author | Bram Moolenaar <Bram@vim.org> | 2020-04-27 20:18:31 +0200 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2020-04-27 20:18:31 +0200 |
commit | db93495d276642f63f80471fbcb900b9aa1e9e42 (patch) | |
tree | fca8ecb1216bbce25b08f87f2ec5857df935ab8b | |
parent | 0e71704b77a9891ccae9f5a9c7429e933078f232 (diff) | |
download | vim-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.c | 3 | ||||
-rw-r--r-- | src/testdir/test_edit.vim | 17 | ||||
-rw-r--r-- | src/version.c | 2 |
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, |