diff options
author | Justin M. Keyes <justinkz@gmail.com> | 2018-11-21 03:51:33 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-11-21 03:51:33 +0100 |
commit | 684c7d9228c1707002410470ef6b981adf3c8eba (patch) | |
tree | c3d01a38eba4513621a0afee07c93a86d97410e6 /src | |
parent | 85761dd4269bff17e7607020bbb5ed9994afca61 (diff) | |
parent | 5d22d100f2a848b692c37dc5d413939c8ef7681f (diff) | |
download | rneovim-684c7d9228c1707002410470ef6b981adf3c8eba.tar.gz rneovim-684c7d9228c1707002410470ef6b981adf3c8eba.tar.bz2 rneovim-684c7d9228c1707002410470ef6b981adf3c8eba.zip |
Merge #9261 'vim-patch:8.0.1731,8.1.0038'
Diffstat (limited to 'src')
-rw-r--r-- | src/nvim/edit.c | 10 | ||||
-rw-r--r-- | src/nvim/testdir/test_popup.vim | 13 |
2 files changed, 21 insertions, 2 deletions
diff --git a/src/nvim/edit.c b/src/nvim/edit.c index d20660bfb9..451d19b8e3 100644 --- a/src/nvim/edit.c +++ b/src/nvim/edit.c @@ -3127,10 +3127,16 @@ static void ins_compl_restart(void) */ static void ins_compl_set_original_text(char_u *str) { - /* Replace the original text entry. */ - if (compl_first_match->cp_flags & ORIGINAL_TEXT) { /* safety check */ + // 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 xfree(compl_first_match->cp_str); compl_first_match->cp_str = vim_strsave(str); + } else if (compl_first_match->cp_prev != NULL + && (compl_first_match->cp_prev->cp_flags & ORIGINAL_TEXT)) { + xfree(compl_first_match->cp_prev->cp_str); + compl_first_match->cp_prev->cp_str = vim_strsave(str); } } diff --git a/src/nvim/testdir/test_popup.vim b/src/nvim/testdir/test_popup.vim index c9cd04018c..6c43cbc1dc 100644 --- a/src/nvim/testdir/test_popup.vim +++ b/src/nvim/testdir/test_popup.vim @@ -246,6 +246,10 @@ func! Test_popup_completion_insertmode() iunmap <F5> endfunc +" TODO: Fix what breaks after this line. +" - Do not use "q!", it may exit Vim if there is an error +finish + func Test_noinsert_complete() function! s:complTest1() abort call complete(1, ['source', 'soundfold']) @@ -571,6 +575,15 @@ func Test_completion_clear_candidate_list() bw! 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 func Test_popup_and_preview_autocommand() " This used to crash Vim |