From 9655bd560f6cce646e77e6ba1f75e7c08462fdf3 Mon Sep 17 00:00:00 2001 From: Sean Dewar <6256228+seandewar@users.noreply.github.com> Date: Wed, 4 Feb 2026 12:15:34 +0000 Subject: [PATCH] fix(ui2): don't adjust dialog pos for pum wildmenu (#37695) Problem: Dialog position unnecessarily adjusted for pum wildmenu. Solution: Apply no offset if the pum is visible. --- runtime/lua/vim/_extui/cmdline.lua | 4 ++-- test/functional/ui/cmdline2_spec.lua | 21 ++++++++++++++++++++- 2 files changed, 22 insertions(+), 3 deletions(-) diff --git a/runtime/lua/vim/_extui/cmdline.lua b/runtime/lua/vim/_extui/cmdline.lua index 2e0f7d60e8..de538b3a65 100644 --- a/runtime/lua/vim/_extui/cmdline.lua +++ b/runtime/lua/vim/_extui/cmdline.lua @@ -8,7 +8,7 @@ local M = { srow = 0, -- Buffer row at which the current cmdline starts; > 0 in block mode. erow = 0, -- Buffer row at which the current cmdline ends; messages appended here in block mode. level = -1, -- Current cmdline level; 0 when inactive, -1 one loop iteration after closing. - wmnumode = 0, -- Return value of wildmenumode(), dialog position adjusted when toggled. + wmnumode = 0, -- wildmenumode() when not using the pum, dialog position adjusted when toggled. } --- Set the 'cmdheight' and cmdline window height. Reposition message windows. @@ -29,7 +29,7 @@ local function win_config(win, hide, height) vim.o.cmdheight = height end) ext.msg.set_pos() - elseif M.wmnumode ~= (M.prompt and fn.wildmenumode() or 0) then + elseif M.wmnumode ~= (M.prompt and fn.pumvisible() == 0 and fn.wildmenumode() or 0) then M.wmnumode = (M.wmnumode == 1 and 0 or 1) ext.msg.set_pos() end diff --git a/test/functional/ui/cmdline2_spec.lua b/test/functional/ui/cmdline2_spec.lua index 3178bf0637..7c25d9a976 100644 --- a/test/functional/ui/cmdline2_spec.lua +++ b/test/functional/ui/cmdline2_spec.lua @@ -182,7 +182,7 @@ describe('cmdline2', function() ]]) end) - it('dialog position is adjusted for toggled wildmenu', function() + it('dialog position is adjusted for toggled non-pum wildmenu', function() exec([[ set wildmode=list:full,full wildoptions-=pum func Foo() @@ -218,6 +218,25 @@ describe('cmdline2', function() | {16::}{15:call} {25:Foo}{16:()()}^ | ]]) + exec('set wildoptions+=pum laststatus=2') + feed('call Fo') + screen:expect([[ + | + {1:~ }|*9 + {3: }| + Foo(){12: Foo() } | + {4: Fooo() } | + {16::}{15:call} {25:Foo}{16:()}^ | + ]]) + feed('()') + screen:expect([[ + | + {1:~ }|*9 + {3: }| + Foo() Fooo() | + | + {16::}{15:call} {25:Foo}{16:()()}^ | + ]]) end) end)