diff options
author | Jan Edmund Lazo <jan.lazo@mail.utoronto.ca> | 2020-02-21 22:05:59 -0500 |
---|---|---|
committer | Jan Edmund Lazo <jan.lazo@mail.utoronto.ca> | 2020-03-01 03:57:58 -0500 |
commit | eba8a9ca1d94f43b7fe2e92d5a2caa144dd68d0d (patch) | |
tree | d5c809a9f32cdcab47a8ebd974ecffbafc7ce13a /src | |
parent | 5e0c435ca1b711e80f78429431b4d400d789c618 (diff) | |
download | rneovim-eba8a9ca1d94f43b7fe2e92d5a2caa144dd68d0d.tar.gz rneovim-eba8a9ca1d94f43b7fe2e92d5a2caa144dd68d0d.tar.bz2 rneovim-eba8a9ca1d94f43b7fe2e92d5a2caa144dd68d0d.zip |
vim-patch:8.1.1510: a plugin cannot easily expand a command like done internally
Problem: A plugin cannot easily expand a command like done internally.
Solution: Add the expandcmd() function. (Yegappan Lakshmanan, closes vim/vim#4514)
https://github.com/vim/vim/commit/80dad48c5095d30873a42ec82628bdb213125d8e
Diffstat (limited to 'src')
-rw-r--r-- | src/nvim/eval.lua | 1 | ||||
-rw-r--r-- | src/nvim/eval/funcs.c | 25 |
2 files changed, 26 insertions, 0 deletions
diff --git a/src/nvim/eval.lua b/src/nvim/eval.lua index 4654f8cef6..d3e769a7ef 100644 --- a/src/nvim/eval.lua +++ b/src/nvim/eval.lua @@ -102,6 +102,7 @@ return { exists={args=1}, exp={args=1, func="float_op_wrapper", data="&exp"}, expand={args={1, 3}}, + expandcmd={args=1}, extend={args={2, 3}}, feedkeys={args={1, 2}}, file_readable={args=1, func='f_filereadable'}, -- obsolete diff --git a/src/nvim/eval/funcs.c b/src/nvim/eval/funcs.c index be8e35b1de..c89c72c3de 100644 --- a/src/nvim/eval/funcs.c +++ b/src/nvim/eval/funcs.c @@ -2103,6 +2103,31 @@ static void f_menu_get(typval_T *argvars, typval_T *rettv, FunPtr fptr) menu_get((char_u *)tv_get_string(&argvars[0]), modes, rettv->vval.v_list); } +// "expandcmd()" function +// Expand all the special characters in a command string. +static void f_expandcmd(typval_T *argvars, typval_T *rettv, FunPtr fptr) +{ + char_u *errormsg = NULL; + + rettv->v_type = VAR_STRING; + char_u *cmdstr = (char_u *)xstrdup(tv_get_string(&argvars[0])); + + exarg_T eap = { + .cmd = cmdstr, + .arg = cmdstr, + .usefilter = false, + .nextcmd = NULL, + .cmdidx = CMD_USER, + }; + eap.argt |= NOSPC; + + expand_filename(&eap, &cmdstr, &errormsg); + if (errormsg != NULL && *errormsg != NUL) { + EMSG(errormsg); + } + rettv->vval.v_string = cmdstr; +} + /* * "extend(list, list [, idx])" function * "extend(dict, dict [, action])" function |