# HG changeset patch # User Christian Brabandt # Date 1523996108 -7200 # Node ID 66b1d74be32287238bbfb048d0cf546492987330 # Parent 5ccca18a0dffa1691b97e7ea550676180feb18f5 patch 8.0.1731: characters deleted on completion commit https://github.com/vim/vim/commit/e87edf3b85f607632e5431640071fdbc36b685b2 Author: Bram Moolenaar Date: Tue Apr 17 22:14:32 2018 +0200 patch 8.0.1731: characters deleted on completion Problem: Characters deleted on completion. (Adri? Farr?s) Solution: Also check the last item for the ORIGINAL_TEXT flag. (Christian Brabandt, closes #1645) diff --git a/src/edit.c b/src/edit.c --- 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 --- 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 --- 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,