aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--runtime/doc/api.txt2
-rw-r--r--src/nvim/api/command.c6
-rw-r--r--src/nvim/lua/executor.c3
-rw-r--r--test/functional/api/command_spec.lua37
4 files changed, 42 insertions, 6 deletions
diff --git a/runtime/doc/api.txt b/runtime/doc/api.txt
index ce59f5ad52..f0145344a4 100644
--- a/runtime/doc/api.txt
+++ b/runtime/doc/api.txt
@@ -1811,7 +1811,7 @@ nvim_parse_cmd({str}, {opts}) *nvim_parse_cmd()*
range items were specified.
• count: (number) Any |<count>| that was supplied to the command. -1
if command cannot take a count.
- • reg: (number) The optional command |<register>|, if specified. Empty
+ • reg: (string) The optional command |<register>|, if specified. Empty
string if not specified or if command cannot take a register.
• bang: (boolean) Whether command contains a |<bang>| (!) modifier.
• args: (array) Command arguments.
diff --git a/src/nvim/api/command.c b/src/nvim/api/command.c
index ed0907e8f8..699c62c15c 100644
--- a/src/nvim/api/command.c
+++ b/src/nvim/api/command.c
@@ -37,7 +37,7 @@
/// specified and two elements if both range items were specified.
/// - count: (number) Any |<count>| that was supplied to the command. -1 if command cannot
/// take a count.
-/// - reg: (number) The optional command |<register>|, if specified. Empty string if not
+/// - reg: (string) The optional command |<register>|, if specified. Empty string if not
/// specified or if command cannot take a register.
/// - bang: (boolean) Whether command contains a |<bang>| (!) modifier.
/// - args: (array) Command arguments.
@@ -165,9 +165,7 @@ Dictionary nvim_parse_cmd(String str, Dictionary opts, Error *err)
PUT(result, "count", INTEGER_OBJ(-1));
}
- char reg[2];
- reg[0] = (char)ea.regname;
- reg[1] = '\0';
+ char reg[2] = { (char)ea.regname, NUL };
PUT(result, "reg", CSTR_TO_OBJ(reg));
PUT(result, "bang", BOOLEAN_OBJ(ea.forceit));
diff --git a/src/nvim/lua/executor.c b/src/nvim/lua/executor.c
index 6063414a02..f3821f149a 100644
--- a/src/nvim/lua/executor.c
+++ b/src/nvim/lua/executor.c
@@ -2036,7 +2036,8 @@ int nlua_do_ucmd(ucmd_T *cmd, exarg_T *eap, bool preview)
}
lua_setfield(lstate, -2, "fargs");
- lua_pushstring(lstate, (const char *)&eap->regname);
+ char reg[2] = { (char)eap->regname, NUL };
+ lua_pushstring(lstate, reg);
lua_setfield(lstate, -2, "reg");
lua_pushinteger(lstate, eap->addr_count);
diff --git a/test/functional/api/command_spec.lua b/test/functional/api/command_spec.lua
index 44a19d8348..f19d7a362b 100644
--- a/test/functional/api/command_spec.lua
+++ b/test/functional/api/command_spec.lua
@@ -423,6 +423,7 @@ describe('nvim_create_user_command', function()
nargs = 0,
bang = true,
count = 2,
+ register = true,
})
]]
eq({
@@ -460,6 +461,42 @@ describe('nvim_create_user_command', function()
vim.cmd('CommandWithNoArgs')
return result
]])
+ -- register can be specified
+ eq({
+ args = "",
+ fargs = {},
+ bang = false,
+ line1 = 1,
+ line2 = 1,
+ mods = "",
+ smods = {
+ browse = false,
+ confirm = false,
+ emsg_silent = false,
+ hide = false,
+ horizontal = false,
+ keepalt = false,
+ keepjumps = false,
+ keepmarks = false,
+ keeppatterns = false,
+ lockmarks = false,
+ noautocmd = false,
+ noswapfile = false,
+ sandbox = false,
+ silent = false,
+ split = "",
+ tab = -1,
+ unsilent = false,
+ verbose = -1,
+ vertical = false,
+ },
+ range = 0,
+ count = 2,
+ reg = "+",
+ }, exec_lua [[
+ vim.cmd('CommandWithNoArgs +')
+ return result
+ ]])
end)