mirror of
https://github.com/neovim/neovim.git
synced 2026-05-24 05:40:08 +00:00
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>
98 lines
3.4 KiB
Lua
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)
|