Merge pull request #34839 from zeertzjq/backport

vim-patch:9.1.1521: completion: pum does not reset scroll pos on reopen with 'noselect' (#34836)
This commit is contained in:
zeertzjq
2025-07-08 07:36:36 +08:00
committed by GitHub
3 changed files with 75 additions and 0 deletions

View File

@ -378,6 +378,7 @@ static int cmdline_pum_create(CmdlineInfo *ccline, expand_T *xp, char **matches,
// no default selection
compl_selected = -1;
pum_clear();
cmdline_pum_display(true);
return EXPAND_OK;

View File

@ -5494,6 +5494,49 @@ describe('builtin popupmenu', function()
]])
end)
-- oldtest: Test_pum_scroll_noselect()
it('cmdline pum does not retain scroll position with "noselect"', function()
screen:try_resize(32, 10)
exec([[
command! -nargs=* -complete=customlist,TestFn TestCmd echo
func TestFn(a, b, c)
return map(range(1, 50), 'printf("a%d", v:val)')
endfunc
set wildmode=noselect,full
set wildoptions=pum
set wildmenu
set noruler
]])
feed(':TestCmd <tab>' .. ('<c-n>'):rep(20))
screen:expect([[
{n: a15 }{s: } |
{1:~ }{n: a16 }{s: }{1: }|
{1:~ }{n: a17 }{s: }{1: }|
{1:~ }{n: a18 }{c: }{1: }|
{1:~ }{n: a19 }{s: }{1: }|
{1:~ }{s: a20 }{1: }|
{1:~ }{n: a21 }{s: }{1: }|
{1:~ }{n: a22 }{s: }{1: }|
{1:~ }{n: a23 }{s: }{1: }|
:TestCmd a20^ |
]])
feed('<esc>:TestCmd <tab>')
screen:expect([[
{n: a1 }{c: } |
{1:~ }{n: a2 }{s: }{1: }|
{1:~ }{n: a3 }{s: }{1: }|
{1:~ }{n: a4 }{s: }{1: }|
{1:~ }{n: a5 }{s: }{1: }|
{1:~ }{n: a6 }{s: }{1: }|
{1:~ }{n: a7 }{s: }{1: }|
{1:~ }{n: a8 }{s: }{1: }|
{1:~ }{n: a9 }{s: }{1: }|
:TestCmd ^ |
]])
end)
it(
'cascading highlights for matched text (PmenuMatch, PmenuMatchSel) in cmdline pum',
function()

View File

@ -4287,4 +4287,35 @@ func Test_cd_bslash_completion_windows()
let &shellslash = save_shellslash
endfunc
" With 'noselect' in 'wildmode', ensure that the popup menu (pum) does not retain
" its scroll position after reopening. The menu should open showing the top items,
" regardless of previous scrolling.
func Test_pum_scroll_noselect()
CheckScreendump
let lines =<< trim [SCRIPT]
command! -nargs=* -complete=customlist,TestFn TestCmd echo
func TestFn(a, b, c)
return map(range(1, 50), 'printf("a%d", v:val)')
endfunc
set wildmode=noselect,full
set wildoptions=pum
set wildmenu
set noruler
[SCRIPT]
call writefile(lines, 'XTest_pum_scroll', 'D')
let buf = RunVimInTerminal('-S XTest_pum_scroll', {'rows': 10})
call term_sendkeys(buf, ":TestCmd \<tab>" . repeat("\<c-n>", 20))
call TermWait(buf, 50)
call VerifyScreenDump(buf, 'Test_pum_scroll_noselect_1', {})
call term_sendkeys(buf, "\<esc>:TestCmd \<tab>")
call TermWait(buf, 50)
call VerifyScreenDump(buf, 'Test_pum_scroll_noselect_2', {})
call term_sendkeys(buf, "\<esc>")
call StopVimInTerminal(buf)
endfunc
" vim: shiftwidth=2 sts=2 expandtab