Skip to content
Permalink
Browse files

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.
  • Loading branch information...
brammool committed Feb 19, 2017
1 parent 5acff71 commit d56a79d3396cf70861b7f739a3c400db91ce7b70
Showing with 26 additions and 0 deletions.
  1. +4 −0 src/edit.c
  2. +20 −0 src/testdir/test_popup.vim
  3. +2 −0 src/version.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];
@@ -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
@@ -764,6 +764,8 @@ static char *(features[]) =

static int included_patches[] =
{ /* Add new patch number below this line */
/**/
341,
/**/
340,
/**/

0 comments on commit d56a79d

Please sign in to comment.
You can’t perform that action at this time.