0
0
mirror of https://github.com/vim/vim.git synced 2025-09-27 04:14: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:
zeertzjq
2025-09-25 06:08:04 +00:00
committed by Christian Brabandt
parent 36544c408e
commit ef818ae444
3 changed files with 57 additions and 6 deletions

View File

@@ -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;

View File

@@ -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

View File

@@ -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,
/**/ /**/