fix(defaults): omit empty line from unimpaired mapping messages (#31347)

Problem:
The default unimpaired mappings display an empty line after the
command's output. This results (with default configuration) in the
`Press ENTER or type command to continue` prompt to be displayed, like
so:
```
(2 of 16): item2

Press ENTER or type command to continue
```

Solution:
The cause is that we're checking the second return value from
`pcall(vim.api.nvim_cmd, opts, {})` to determine whether the call was
successful. `nvim_cmd` returns an empty string on success, so this value
is an empty string in the successful path which we then display.

The fix is simple: check the first return value instead which is the
"status code" of the call.
This commit is contained in:
Marcus Caisey 2024-11-25 22:33:11 +00:00 committed by GitHub
parent f81131cca2
commit c644228e1d
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 30 additions and 3 deletions

View File

@ -222,8 +222,8 @@ do
--- Execute a command and print errors without a stacktrace.
--- @param opts table Arguments to |nvim_cmd()|
local function cmd(opts)
local _, err = pcall(vim.api.nvim_cmd, opts, {})
if err then
local ok, err = pcall(vim.api.nvim_cmd, opts, {})
if not ok then
vim.api.nvim_err_writeln(err:sub(#'Vim:' + 1))
end
end

View File

@ -95,7 +95,34 @@ describe('default', function()
describe('key mappings', function()
describe('unimpaired-style mappings', function()
it('do not show a full stack trace #30625', function()
it('show the command ouptut when successful', function()
n.clear({ args_rm = { '--cmd' } })
local screen = Screen.new(40, 8)
n.fn.setqflist({
{ filename = 'file1', text = 'item1' },
{ filename = 'file2', text = 'item2' },
})
n.feed(']q')
screen:set_default_attr_ids({
[1] = { foreground = Screen.colors.NvimDarkGrey4 },
[2] = {
background = Screen.colors.NvimLightGray3,
foreground = Screen.colors.NvimDarkGrey3,
},
})
screen:expect({
grid = [[
^ |
{1:~ }|*5
{2:file2 0,0-1 All}|
(2 of 2): item2 |
]],
})
end)
it('do not show a full stack trace when unsuccessful #30625', function()
n.clear({ args_rm = { '--cmd' } })
local screen = Screen.new(40, 8)
screen:set_default_attr_ids({