mirror of
https://github.com/neovim/neovim.git
synced 2026-08-25 08:31:51 +00:00
fix(ui2): dismiss msgs after mapped motions #41450
Problem: Mapped keys can produce on_key callbacks with an empty `typed` value. so mapped motions such as `j -> gj` are not recognized as typed input and do not dismiss messages Solution: Track whether an empty `typed` callback follows typed input, allowing mapped motions to dismiss messages like directly typed motions.
This commit is contained in:
@@ -582,8 +582,8 @@ local typed_g = false
|
||||
local function cmd_on_key(key, typed)
|
||||
-- Don't dismiss for non-typed keys and mouse movement. When 'g' is passed (typed
|
||||
-- or mapped), wait until the next key to avoid flickering when the pager is opened.
|
||||
if typed == '' or (not typed_g and (typed == '<MouseMove>' or typed == 'g' or key == 'g')) then
|
||||
typed_g = typed == 'g' or key == 'g'
|
||||
if not typed_g and (typed == '' or (typed == '<MouseMove>' or typed == 'g' or key == 'g')) then
|
||||
typed_g = typed ~= '' and (typed == 'g' or key == 'g')
|
||||
return
|
||||
end
|
||||
if typed == ':' or ui.cmd.level > 0 or fn.getcmdtype() ~= '' then
|
||||
|
||||
@@ -566,6 +566,7 @@ describe('messages2', function()
|
||||
|
||||
it('pager for consecutive command messages is not focused #41061', function()
|
||||
local win = api.nvim_get_current_win()
|
||||
command('nnoremap j gj')
|
||||
command('echo "foo\nbar"')
|
||||
feed(':echo "baz"<CR>')
|
||||
screen:expect([[
|
||||
@@ -607,6 +608,11 @@ describe('messages2', function()
|
||||
n.poke_eventloop()
|
||||
t.eq(win, api.nvim_get_current_win())
|
||||
feed('j')
|
||||
screen:expect([[
|
||||
^ |
|
||||
{1:~ }|*12
|
||||
{16::}{15:echo} {26:"baz"} |
|
||||
]])
|
||||
-- A typed command that emits no message keeps the pager; the next key dismisses it.
|
||||
command('echo "foo\nbar"')
|
||||
feed(':echo "baz"<CR>')
|
||||
|
||||
Reference in New Issue
Block a user