summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2018-04-17 22:14:32 +0200
committerBram Moolenaar <Bram@vim.org>2018-04-17 22:14:32 +0200
commite87edf3b85f607632e5431640071fdbc36b685b2 (patch)
treec8c38e712166b58229440e243acad08730b08113
parent561f8a5a4612751c2a4ebd6bf918cbc3be867350 (diff)
downloadvim-git-e87edf3b85f607632e5431640071fdbc36b685b2.tar.gz
patch 8.0.1731: characters deleted on completionv8.0.1731
Problem: Characters deleted on completion. (Adrià Farrés) Solution: Also check the last item for the ORIGINAL_TEXT flag. (Christian Brabandt, closes #1645)
-rw-r--r--src/edit.c14
-rw-r--r--src/testdir/test_popup.vim9
-rw-r--r--src/version.c2
3 files changed, 24 insertions, 1 deletions
diff --git a/src/edit.c b/src/edit.c
index 21941cb3d..8746436fb 100644
--- a/src/edit.c
+++ b/src/edit.c
@@ -3656,7 +3656,9 @@ ins_compl_set_original_text(char_u *str)
{
char_u *p;
- /* Replace the original text entry. */
+ /* Replace the original text entry.
+ * The ORIGINAL_TEXT flag is either at the first item or might possibly be
+ * at the last item for backward completion */
if (compl_first_match->cp_flags & ORIGINAL_TEXT) /* safety check */
{
p = vim_strsave(str);
@@ -3666,6 +3668,16 @@ ins_compl_set_original_text(char_u *str)
compl_first_match->cp_str = p;
}
}
+ else if (compl_first_match->cp_prev != NULL
+ && (compl_first_match->cp_prev->cp_flags & ORIGINAL_TEXT))
+ {
+ p = vim_strsave(str);
+ if (p != NULL)
+ {
+ vim_free(compl_first_match->cp_prev->cp_str);
+ compl_first_match->cp_prev->cp_str = p;
+ }
+ }
}
/*
diff --git a/src/testdir/test_popup.vim b/src/testdir/test_popup.vim
index 8294febe6..a2e86d703 100644
--- a/src/testdir/test_popup.vim
+++ b/src/testdir/test_popup.vim
@@ -814,5 +814,14 @@ func Test_popup_command()
call delete('Xtest')
endfunc
+func Test_popup_complete_backwards()
+ new
+ call setline(1, ['Post', 'Port', 'Po'])
+ let expected=['Post', 'Port', 'Port']
+ call cursor(3,2)
+ call feedkeys("A\<C-X>". repeat("\<C-P>", 3). "rt\<cr>", 'tx')
+ call assert_equal(expected, getline(1,'$'))
+ bwipe!
+endfunc
" vim: shiftwidth=2 sts=2 expandtab
diff --git a/src/version.c b/src/version.c
index 8d5c73a77..c3add5144 100644
--- a/src/version.c
+++ b/src/version.c
@@ -763,6 +763,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 1731,
+/**/
1730,
/**/
1729,