From d56a79d3396cf70861b7f739a3c400db91ce7b70 Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Sun, 19 Feb 2017 15:26:18 +0100 Subject: 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. --- src/edit.c | 4 ++++ src/testdir/test_popup.vim | 20 ++++++++++++++++++++ src/version.c | 2 ++ 3 files changed, 26 insertions(+) diff --git a/src/edit.c b/src/edit.c index a37261ffa..d7f89bcbe 100644 --- 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 index f4ce064d7..2c6afa06c 100644 --- 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 index ef71d0e39..f12c508d4 100644 --- a/src/version.c +++ b/src/version.c @@ -764,6 +764,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 341, /**/ 340, /**/ -- cgit v1.2.1