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
index a37261f..d7f89bc 100644
--- a/src/edit.c
+++ b/src/edit.c
@@ -3583,7 +3583,11 @@
{
#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 f4ce064..2c6afa0 100644
--- a/src/testdir/test_popup.vim
+++ b/src/testdir/test_popup.vim
@@ -531,4 +531,24 @@
bw!
endfunc
+func CompleteUndo() abort
+ call complete(1, g:months)
+ return ''
+endfunc
+
+func Test_completion_can_undo()
+ inoremap <Right> <c-r>=CompleteUndo()<cr>
+ set completeopt+=noinsert,noselect
+
+ new
+ call feedkeys("a\<Right>a\<Esc>", 'xt')
+ call assert_equal('a', getline(1))
+ undo
+ call assert_equal('', getline(1))
+
+ bwipe!
+ set completeopt&
+ iunmap <Right>
+endfunc
+
" vim: shiftwidth=2 sts=2 expandtab
diff --git a/src/version.c b/src/version.c
index ef71d0e..f12c508 100644
--- a/src/version.c
+++ b/src/version.c
@@ -765,6 +765,8 @@
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 341,
+/**/
340,
/**/
339,