Files
neovim/test/functional/legacy/cmdwin_spec.lua
zeertzjq 202e17deef vim-patch:9.2.0346: Wrong cursor position when entering command line window (#39072)
Problem:  Wrong cursor position when entering command line window
Solution: Add check_cursor() command to verify the cursor position
          (Hirohito Higashi).

When opening the command-line window with CTRL-F after typing a command
that fills the screen width, the cursor was placed past the end of the
line.  Add check_cursor() after setting State to MODE_NORMAL so the
cursor is adjusted to the last character.

Also fix the cmdwin prefix character (e.g. ':') being drawn on wrapped
continuation rows.  Draw an empty space instead so that the text
alignment is preserved.

closes: vim/vim#19964

c4fe1e958a

Cherry-pick Test_wildmenu_pum() changes from patch 9.1.1995.

Co-authored-by: Hirohito Higashi <h.east.727@gmail.com>
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-15 18:22:05 +08:00

98 lines
3.4 KiB
Lua

local n = require('test.functional.testnvim')()
local Screen = require('test.functional.ui.screen')
local clear = n.clear
local command = n.command
local feed = n.feed
describe('cmdwin', function()
before_each(clear)
-- oldtest: Test_cmdwin_interrupted()
it('still uses a new buffer when interrupting more prompt on open', function()
local screen = Screen.new(30, 16)
command('set more')
command('autocmd WinNew * highlight')
feed('q:')
screen:expect({ any = vim.pesc('{6:-- More --}^') })
feed('q')
screen:expect([[
|
{1:~ }|*5
{2:[No Name] }|
{1::}^ |
{1:~ }|*6
{3:[Command Line] }|
|
]])
feed([[aecho 'done']])
screen:expect([[
|
{1:~ }|*5
{2:[No Name] }|
{1::}echo 'done'^ |
{1:~ }|*6
{3:[Command Line] }|
{5:-- INSERT --} |
]])
feed('<CR>')
screen:expect([[
^ |
{1:~ }|*14
done |
]])
end)
-- oldtest: Test_cmdwin_showcmd()
it('has correct showcmd', function()
local screen = Screen.new(60, 18)
command('set showcmd')
for _, keys in ipairs({ 'q:', ':<C-F>' }) do
feed(keys)
local fmt = [[
|
{1:~ }|*7
{2:[No Name] }|
{1::}^ |
{1:~ }|*6
{3:[Command Line] }|
: %s |
]]
screen:expect(fmt:format(' '))
feed('"')
screen:expect(fmt:format('" '))
feed('x')
screen:expect(fmt:format('"x '))
feed('y')
screen:expect(fmt:format('"xy '))
feed('y')
screen:expect(fmt:format(' '))
feed('<C-C>')
n.poke_eventloop()
feed('<C-C>')
screen:expect([[
^ |
{1:~ }|*16
|
]])
end
end)
-- oldtest: Test_cmdwin_no_prefix_on_wrapped_line()
it('prefix char is not drawn on wrapped screen line', function()
local screen = Screen.new(40, 12)
local cmd = 'echo "' .. ('a'):rep(40 - 8) .. '"XYZ'
feed(':' .. cmd .. '<C-F>')
screen:expect([[
|
{1:~ }|
{2:[No Name] }|
{1::}echo "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"|
XY^Z |
{1:~ }|*5
{3:[Command Line] }|
|
]])
end)
end)