Mercurial > vim
changeset 10714:319bafc99ee8 v8.0.0247
patch 8.0.0247: need to type Ctrl-N twice to select a completion
commit https://github.com/vim/vim/commit/aed6d0b81a14a81433c0f3c2c65cef935100db33
Author: Bram Moolenaar <Bram@vim.org>
Date: Fri Jan 27 21:48:54 2017 +0100
patch 8.0.0247: need to type Ctrl-N twice to select a completion
Problem: Under some circumstances, one needs to type Ctrl-N or Ctrl-P twice
to have a menu entry selected. (Lifepillar)
Solution: call ins_compl_free(). (Christian Brabandt, closes #1411)
author | Christian Brabandt <cb@256bit.org> |
---|---|
date | Fri, 27 Jan 2017 22:00:05 +0100 |
parents | 3cb3793af176 |
children | 91ff9465b1b1 |
files | src/edit.c src/testdir/test_popup.vim src/version.c |
diffstat | 3 files changed, 36 insertions(+), 4 deletions(-) [+] |
line wrap: on
line diff
--- a/src/edit.c +++ b/src/edit.c @@ -2821,6 +2821,7 @@ set_completion(colnr_T startcol, list_T if (ctrl_x_mode != 0) ins_compl_prep(' '); ins_compl_clear(); + ins_compl_free(); compl_direction = FORWARD; if (startcol > curwin->w_cursor.col)
--- a/src/testdir/test_popup.vim +++ b/src/testdir/test_popup.vim @@ -7,10 +7,10 @@ func! ListMonths() if g:setting != '' exe ":set" g:setting endif - let mth=copy(g:months) + let mth = copy(g:months) let entered = strcharpart(getline('.'),0,col('.')) if !empty(entered) - let mth=filter(mth, 'v:val=~"^".entered') + let mth = filter(mth, 'v:val=~"^".entered') endif call complete(1, mth) return '' @@ -468,7 +468,7 @@ endfunc " auto-wrap text. func Test_completion_ctrl_e_without_autowrap() new - let tw_save=&tw + let tw_save = &tw set tw=78 let li = [ \ '" zzz', @@ -478,8 +478,37 @@ func Test_completion_ctrl_e_without_auto call feedkeys("A\<C-X>\<C-N>\<C-E>\<Esc>", "tx") call assert_equal(li, getline(1, '$')) - let &tw=tw_save + let &tw = tw_save q! endfunc +function! DummyCompleteSix() + call complete(1, ['Hello', 'World']) + return '' +endfunction + +" complete() correctly clears the list of autocomplete candidates +" See #1411 +func Test_completion_clear_candidate_list() + new + %d + " select first entry from the completion popup + call feedkeys("a xxx\<C-N>\<C-R>=DummyCompleteSix()\<CR>", "tx") + call assert_equal('Hello', getline(1)) + %d + " select second entry from the completion popup + call feedkeys("a xxx\<C-N>\<C-R>=DummyCompleteSix()\<CR>\<C-N>", "tx") + call assert_equal('World', getline(1)) + %d + " select original text + call feedkeys("a xxx\<C-N>\<C-R>=DummyCompleteSix()\<CR>\<C-N>\<C-N>", "tx") + call assert_equal(' xxx', getline(1)) + %d + " back at first entry from completion list + call feedkeys("a xxx\<C-N>\<C-R>=DummyCompleteSix()\<CR>\<C-N>\<C-N>\<C-N>", "tx") + call assert_equal('Hello', getline(1)) + + bw! +endfunc + " vim: shiftwidth=2 sts=2 expandtab