# HG changeset patch # User Christian Brabandt # Date 1487514604 -3600 # Node ID c68775848f5f1eb308f5beb5362cdebc38b85e98 # Parent 099bd7beced63a14f51d8757e69fe6f10128d28e patch 8.0.0341: undo does not work properly when using completion commit https://github.com/vim/vim/commit/d56a79d3396cf70861b7f739a3c400db91ce7b70 Author: Bram Moolenaar Date: Sun Feb 19 15:26:18 2017 +0100 patch 8.0.0341: undo does not work properly when using completion Problem: When using complete() and typing a character undo is saved after the character was inserted. (Shougo) Solution: Save for undo before inserting the character. diff --git a/src/edit.c b/src/edit.c --- a/src/edit.c +++ b/src/edit.c @@ -3583,7 +3583,11 @@ ins_compl_addleader(int c) { #ifdef FEAT_MBYTE int cc; - +#endif + + if (stop_arrow() == FAIL) + return; +#ifdef FEAT_MBYTE if (has_mbyte && (cc = (*mb_char2len)(c)) > 1) { char_u buf[MB_MAXBYTES + 1]; diff --git a/src/testdir/test_popup.vim b/src/testdir/test_popup.vim --- a/src/testdir/test_popup.vim +++ b/src/testdir/test_popup.vim @@ -531,4 +531,24 @@ func Test_completion_respect_bs_option() bw! endfunc +func CompleteUndo() abort + call complete(1, g:months) + return '' +endfunc + +func Test_completion_can_undo() + inoremap =CompleteUndo() + set completeopt+=noinsert,noselect + + new + call feedkeys("a\a\", 'xt') + call assert_equal('a', getline(1)) + undo + call assert_equal('', getline(1)) + + bwipe! + set completeopt& + iunmap +endfunc + " vim: shiftwidth=2 sts=2 expandtab diff --git a/src/version.c b/src/version.c --- a/src/version.c +++ b/src/version.c @@ -765,6 +765,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 341, +/**/ 340, /**/ 339,