From e87edf3b85f607632e5431640071fdbc36b685b2 Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Tue, 17 Apr 2018 22:14:32 +0200 Subject: patch 8.0.1731: characters deleted on completion MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Problem: Characters deleted on completion. (Adrià Farrés) Solution: Also check the last item for the ORIGINAL_TEXT flag. (Christian Brabandt, closes #1645) --- src/edit.c | 14 +++++++++++++- src/testdir/test_popup.vim | 9 +++++++++ src/version.c | 2 ++ 3 files changed, 24 insertions(+), 1 deletion(-) 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\". repeat("\", 3). "rt\", '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 @@ -762,6 +762,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1731, /**/ 1730, /**/ -- cgit v1.2.1