changeset 10904:c68775848f5f v8.0.0341

patch 8.0.0341: undo does not work properly when using completion commit https://github.com/vim/vim/commit/d56a79d3396cf70861b7f739a3c400db91ce7b70 Author: Bram Moolenaar <Bram@vim.org> 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.
author Christian Brabandt <cb@256bit.org>
date Sun, 19 Feb 2017 15:30:04 +0100
parents 099bd7beced6
children c8a5987d092d
files src/edit.c src/testdir/test_popup.vim src/version.c
diffstat 3 files changed, 27 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- 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];
--- 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 <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
--- 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,