From ef818ae4448726b91c31e24406a554686dea19f5 Mon Sep 17 00:00:00 2001 From: zeertzjq Date: Thu, 25 Sep 2025 06:08:04 +0000 Subject: [PATCH] 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 Signed-off-by: Christian Brabandt --- src/insexpand.c | 3 +- src/testdir/test_edit.vim | 58 +++++++++++++++++++++++++++++++++++---- src/version.c | 2 ++ 3 files changed, 57 insertions(+), 6 deletions(-) diff --git a/src/insexpand.c b/src/insexpand.c index 65e7a95eb0..db6efdcf92 100644 --- a/src/insexpand.c +++ b/src/insexpand.c @@ -6315,7 +6315,8 @@ ins_compl_next( // Enter will select a match when the match wasn't inserted and the popup // 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; else compl_enter_selects = !insert_match && compl_match_array != NULL; diff --git a/src/testdir/test_edit.vim b/src/testdir/test_edit.vim index 4a2d93fd54..7af4cdca6d 100644 --- a/src/testdir/test_edit.vim +++ b/src/testdir/test_edit.vim @@ -2348,15 +2348,63 @@ func Test_edit_backspace_smarttab_virtual_text() set smarttab& endfunc -func Test_edit_CAR() - set cot=menu,menuone,noselect +func Test_edit_CAR_with_completion() new - call feedkeys("Shello hero\h\\e\", 'tx') - call assert_equal(['hello hero', 'he', ''], getline(1, '$')) + " With "noselect", behavior is the same with and without "noinsert": + " 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\h\\e\", 'tx') + call assert_equal(['hello hero', 'he', ''], getline(1, '$')) + %delete + call feedkeys("Shello hero\h\\\", 'tx') + call assert_equal(['hello hero', 'h', ''], getline(1, '$')) + %delete + call feedkeys("Shello hero\h\\\\", 'tx') + call assert_equal(['hello hero', 'hello', ''], getline(1, '$')) + %delete + call feedkeys("Shello hero\h\\\\\", 'tx') + call assert_equal(['hello hero', 'hero', ''], getline(1, '$')) + %delete + call feedkeys("Shello hero\h\\\\\", 'tx') + call assert_equal(['hello hero', 'h', ''], getline(1, '$')) + %delete + call feedkeys("Shello hero\h\\\\", 'tx') + call assert_equal(['hello hero', 'hello'], getline(1, '$')) + %delete + call feedkeys("Shello hero\h\\\\\", 'tx') + call assert_equal(['hello hero', 'hero'], getline(1, '$')) + %delete + call feedkeys("Shello hero\h\\\\\", 'tx') + call assert_equal(['hello hero', 'h'], getline(1, '$')) + endfor + + " With "noinsert" but not "noselect": like pressing after "noselect". + set cot=menu,menuone,noinsert + %delete + call feedkeys("Shello hero\h\\e\", 'tx') + call assert_equal(['hello hero', 'hello'], getline(1, '$')) + %delete + call feedkeys("Shello hero\h\\\", 'tx') + call assert_equal(['hello hero', 'hello'], getline(1, '$')) + %delete + call feedkeys("Shello hero\h\\\\", 'tx') + call assert_equal(['hello hero', 'hero'], getline(1, '$')) + %delete + call feedkeys("Shello hero\h\\\\", 'tx') + call assert_equal(['hello hero', 'h'], getline(1, '$')) + %delete + call feedkeys("Shello hero\h\\\\", 'tx') + call assert_equal(['hello hero', 'hero', ''], getline(1, '$')) + %delete + call feedkeys("Shello hero\h\\\\", 'tx') + call assert_equal(['hello hero', 'h', ''], getline(1, '$')) - bw! set cot& + bw! endfunc " vim: shiftwidth=2 sts=2 expandtab diff --git a/src/version.c b/src/version.c index 9531ed0d26..daf0d5f972 100644 --- a/src/version.c +++ b/src/version.c @@ -729,6 +729,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1790, /**/ 1789, /**/