mirror of
https://github.com/neovim/neovim.git
synced 2024-12-20 03:05:11 -07:00
fix: make nvim_cmd
not suppress errors inside key mapping
Closes #18632
This commit is contained in:
parent
95580f31b3
commit
fb8fa004d8
@ -1304,21 +1304,24 @@ String nvim_cmd(uint64_t channel_id, Dict(cmd) *cmd, Dict(cmd_opts) *opts, Error
|
||||
capture_ga = &capture_local;
|
||||
}
|
||||
|
||||
try_start();
|
||||
if (output) {
|
||||
msg_silent++;
|
||||
}
|
||||
TRY_WRAP({
|
||||
try_start();
|
||||
if (output) {
|
||||
msg_silent++;
|
||||
}
|
||||
|
||||
WITH_SCRIPT_CONTEXT(channel_id, {
|
||||
execute_cmd(&ea, &cmdinfo);
|
||||
WITH_SCRIPT_CONTEXT(channel_id, {
|
||||
execute_cmd(&ea, &cmdinfo);
|
||||
});
|
||||
|
||||
if (output) {
|
||||
capture_ga = save_capture_ga;
|
||||
msg_silent = save_msg_silent;
|
||||
}
|
||||
|
||||
try_end(err);
|
||||
});
|
||||
|
||||
if (output) {
|
||||
capture_ga = save_capture_ga;
|
||||
msg_silent = save_msg_silent;
|
||||
}
|
||||
try_end(err);
|
||||
|
||||
if (ERROR_SET(err)) {
|
||||
goto clear_ga;
|
||||
}
|
||||
|
@ -1583,13 +1583,14 @@ bool parse_cmdline(char *cmdline, exarg_T *eap, CmdParseInfo *cmdinfo, char **er
|
||||
/// @param cmdinfo Command parse information
|
||||
void execute_cmd(exarg_T *eap, CmdParseInfo *cmdinfo)
|
||||
{
|
||||
char *errormsg = NULL;
|
||||
|
||||
#define ERROR(msg) \
|
||||
do { \
|
||||
emsg(msg); \
|
||||
errormsg = msg; \
|
||||
goto end; \
|
||||
} while (0)
|
||||
|
||||
char *errormsg = NULL;
|
||||
cmdmod_T save_cmdmod = cmdmod;
|
||||
cmdmod = cmdinfo->cmdmod;
|
||||
|
||||
@ -1648,7 +1649,7 @@ void execute_cmd(exarg_T *eap, CmdParseInfo *cmdinfo)
|
||||
// If filename expansion is enabled, expand filenames
|
||||
if (cmdinfo->magic.file) {
|
||||
if (expand_filename(eap, (char_u **)eap->cmdlinep, &errormsg) == FAIL) {
|
||||
ERROR(errormsg);
|
||||
goto end;
|
||||
}
|
||||
}
|
||||
|
||||
@ -1706,14 +1707,20 @@ void execute_cmd(exarg_T *eap, CmdParseInfo *cmdinfo)
|
||||
eap->errmsg = NULL;
|
||||
(cmdnames[eap->cmdidx].cmd_func)(eap);
|
||||
if (eap->errmsg != NULL) {
|
||||
ERROR(_(eap->errmsg));
|
||||
errormsg = _(eap->errmsg);
|
||||
}
|
||||
}
|
||||
|
||||
end:
|
||||
if (errormsg != NULL && *errormsg != NUL) {
|
||||
emsg(errormsg);
|
||||
}
|
||||
// Undo command modifiers
|
||||
undo_cmdmod(eap, msg_scroll);
|
||||
cmdmod = save_cmdmod;
|
||||
|
||||
if (eap->did_sandbox) {
|
||||
sandbox--;
|
||||
}
|
||||
#undef ERROR
|
||||
}
|
||||
|
||||
|
@ -3636,5 +3636,13 @@ describe('API', function()
|
||||
meths.cmd({ cmd = "update" }, {})
|
||||
meths.cmd({ cmd = "buffer", count = 0 }, {})
|
||||
end)
|
||||
it('doesn\'t suppress errors when used in keymapping', function()
|
||||
meths.exec_lua([[
|
||||
vim.keymap.set("n", "[l",
|
||||
function() vim.api.nvim_cmd({ cmd = "echo", args = {"foo"} }, {}) end)
|
||||
]], {})
|
||||
feed("[l")
|
||||
neq(nil, string.find(eval("v:errmsg"), "E5108:"))
|
||||
end)
|
||||
end)
|
||||
end)
|
||||
|
Loading…
Reference in New Issue
Block a user