mirror of
https://github.com/vim/vim.git
synced 2025-09-28 04:24:06 -04:00
patch 9.1.1790: completion: Enter does not insert match with "noinsert"
Problem: completion: Enter does not insert match with "noinsert". (Sergey Vlasov) Solution: Check for compl_shown_match instead of compl_selected_item (zeertzjq). fixes: #18386 related: #1653 closes: #18395 Signed-off-by: zeertzjq <zeertzjq@outlook.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
This commit is contained in:
committed by
Christian Brabandt
parent
36544c408e
commit
ef818ae444
@@ -6315,7 +6315,8 @@ ins_compl_next(
|
|||||||
|
|
||||||
// Enter will select a match when the match wasn't inserted and the popup
|
// Enter will select a match when the match wasn't inserted and the popup
|
||||||
// menu is visible.
|
// menu is visible.
|
||||||
if (compl_no_insert && !started && compl_selected_item != -1)
|
if (compl_no_insert && !started
|
||||||
|
&& !match_at_original_text(compl_shown_match))
|
||||||
compl_enter_selects = TRUE;
|
compl_enter_selects = TRUE;
|
||||||
else
|
else
|
||||||
compl_enter_selects = !insert_match && compl_match_array != NULL;
|
compl_enter_selects = !insert_match && compl_match_array != NULL;
|
||||||
|
@@ -2348,15 +2348,63 @@ func Test_edit_backspace_smarttab_virtual_text()
|
|||||||
set smarttab&
|
set smarttab&
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
func Test_edit_CAR()
|
func Test_edit_CAR_with_completion()
|
||||||
set cot=menu,menuone,noselect
|
|
||||||
new
|
new
|
||||||
|
|
||||||
call feedkeys("Shello hero\<CR>h\<C-x>\<C-N>e\<CR>", 'tx')
|
" With "noselect", behavior is the same with and without "noinsert":
|
||||||
call assert_equal(['hello hero', 'he', ''], getline(1, '$'))
|
" Enter inserts a new line when no selection is done or after selecting with
|
||||||
|
" Ctrl-N/P, but does not insert a new line when selecting with cursor keys.
|
||||||
|
for cot in ['menu,menuone,noselect', 'menu,menuone,noselect,noinsert']
|
||||||
|
let &cot = cot
|
||||||
|
%delete
|
||||||
|
call feedkeys("Shello hero\<CR>h\<C-X>\<C-N>e\<CR>", 'tx')
|
||||||
|
call assert_equal(['hello hero', 'he', ''], getline(1, '$'))
|
||||||
|
%delete
|
||||||
|
call feedkeys("Shello hero\<CR>h\<C-X>\<C-N>\<CR>", 'tx')
|
||||||
|
call assert_equal(['hello hero', 'h', ''], getline(1, '$'))
|
||||||
|
%delete
|
||||||
|
call feedkeys("Shello hero\<CR>h\<C-X>\<C-N>\<C-N>\<CR>", 'tx')
|
||||||
|
call assert_equal(['hello hero', 'hello', ''], getline(1, '$'))
|
||||||
|
%delete
|
||||||
|
call feedkeys("Shello hero\<CR>h\<C-X>\<C-N>\<C-N>\<C-N>\<CR>", 'tx')
|
||||||
|
call assert_equal(['hello hero', 'hero', ''], getline(1, '$'))
|
||||||
|
%delete
|
||||||
|
call feedkeys("Shello hero\<CR>h\<C-X>\<C-N>\<C-N>\<C-P>\<CR>", 'tx')
|
||||||
|
call assert_equal(['hello hero', 'h', ''], getline(1, '$'))
|
||||||
|
%delete
|
||||||
|
call feedkeys("Shello hero\<CR>h\<C-X>\<C-N>\<Down>\<CR>", 'tx')
|
||||||
|
call assert_equal(['hello hero', 'hello'], getline(1, '$'))
|
||||||
|
%delete
|
||||||
|
call feedkeys("Shello hero\<CR>h\<C-X>\<C-N>\<Down>\<Down>\<CR>", 'tx')
|
||||||
|
call assert_equal(['hello hero', 'hero'], getline(1, '$'))
|
||||||
|
%delete
|
||||||
|
call feedkeys("Shello hero\<CR>h\<C-X>\<C-N>\<Down>\<Up>\<CR>", 'tx')
|
||||||
|
call assert_equal(['hello hero', 'h'], getline(1, '$'))
|
||||||
|
endfor
|
||||||
|
|
||||||
|
" With "noinsert" but not "noselect": like pressing <Down> after "noselect".
|
||||||
|
set cot=menu,menuone,noinsert
|
||||||
|
%delete
|
||||||
|
call feedkeys("Shello hero\<CR>h\<C-X>\<C-N>e\<CR>", 'tx')
|
||||||
|
call assert_equal(['hello hero', 'hello'], getline(1, '$'))
|
||||||
|
%delete
|
||||||
|
call feedkeys("Shello hero\<CR>h\<C-X>\<C-N>\<CR>", 'tx')
|
||||||
|
call assert_equal(['hello hero', 'hello'], getline(1, '$'))
|
||||||
|
%delete
|
||||||
|
call feedkeys("Shello hero\<CR>h\<C-X>\<C-N>\<Down>\<CR>", 'tx')
|
||||||
|
call assert_equal(['hello hero', 'hero'], getline(1, '$'))
|
||||||
|
%delete
|
||||||
|
call feedkeys("Shello hero\<CR>h\<C-X>\<C-N>\<Up>\<CR>", 'tx')
|
||||||
|
call assert_equal(['hello hero', 'h'], getline(1, '$'))
|
||||||
|
%delete
|
||||||
|
call feedkeys("Shello hero\<CR>h\<C-X>\<C-N>\<C-N>\<CR>", 'tx')
|
||||||
|
call assert_equal(['hello hero', 'hero', ''], getline(1, '$'))
|
||||||
|
%delete
|
||||||
|
call feedkeys("Shello hero\<CR>h\<C-X>\<C-N>\<C-P>\<CR>", 'tx')
|
||||||
|
call assert_equal(['hello hero', 'h', ''], getline(1, '$'))
|
||||||
|
|
||||||
bw!
|
|
||||||
set cot&
|
set cot&
|
||||||
|
bw!
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
" vim: shiftwidth=2 sts=2 expandtab
|
" vim: shiftwidth=2 sts=2 expandtab
|
||||||
|
@@ -729,6 +729,8 @@ static char *(features[]) =
|
|||||||
|
|
||||||
static int included_patches[] =
|
static int included_patches[] =
|
||||||
{ /* Add new patch number below this line */
|
{ /* Add new patch number below this line */
|
||||||
|
/**/
|
||||||
|
1790,
|
||||||
/**/
|
/**/
|
||||||
1789,
|
1789,
|
||||||
/**/
|
/**/
|
||||||
|
Reference in New Issue
Block a user