diff options
author | Bram Moolenaar <Bram@vim.org> | 2022-09-15 21:46:02 +0100 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2022-09-15 21:46:02 +0100 |
commit | aa5341477c9f3840d63f709de3b9e5d0266f93d7 (patch) | |
tree | ed3a40bb10ad93bbf009e33ee6af623f409f3713 /src/ex_docmd.c | |
parent | a4abe514ecd9b7a038feed89f48476809775c80f (diff) | |
download | vim-git-aa5341477c9f3840d63f709de3b9e5d0266f93d7.tar.gz |
patch 9.0.0473: fullcommand() only works for the current script versionv9.0.0473
Problem: fullcommand() only works for the current script version.
Solution: Add an optional argument for the script version.
Diffstat (limited to 'src/ex_docmd.c')
-rw-r--r-- | src/ex_docmd.c | 30 |
1 files changed, 23 insertions, 7 deletions
diff --git a/src/ex_docmd.c b/src/ex_docmd.c index 0e5e1db5e..814f1b6f8 100644 --- a/src/ex_docmd.c +++ b/src/ex_docmd.c @@ -4048,20 +4048,31 @@ cmd_exists(char_u *name) void f_fullcommand(typval_T *argvars, typval_T *rettv) { - exarg_T ea; - char_u *name; - char_u *p; + exarg_T ea; + char_u *name; + char_u *p; + int vim9script = in_vim9script(); + int save_cmod_flags = cmdmod.cmod_flags; rettv->v_type = VAR_STRING; rettv->vval.v_string = NULL; - if (in_vim9script() && check_for_string_arg(argvars, 0) == FAIL) + if (in_vim9script() + && (check_for_string_arg(argvars, 0) == FAIL + || check_for_opt_bool_arg(argvars, 1) == FAIL)) return; name = argvars[0].vval.v_string; if (name == NULL) return; + if (argvars[1].v_type != VAR_UNKNOWN) + { + vim9script = tv_get_bool(&argvars[1]); + cmdmod.cmod_flags &= ~(CMOD_VIM9CMD | CMOD_LEGACY); + cmdmod.cmod_flags |= vim9script ? CMOD_VIM9CMD : CMOD_LEGACY; + } + while (*name == ':') name++; name = skip_range(name, TRUE, NULL); @@ -4069,10 +4080,13 @@ f_fullcommand(typval_T *argvars, typval_T *rettv) ea.cmd = (*name == '2' || *name == '3') ? name + 1 : name; ea.cmdidx = (cmdidx_T)0; ea.addr_count = 0; + ++emsg_silent; // don't complain about using "en" in Vim9 script p = find_ex_command(&ea, NULL, NULL, NULL); + --emsg_silent; if (p == NULL || ea.cmdidx == CMD_SIZE) - return; - if (in_vim9script()) + goto theend; + + if (vim9script) { int res; @@ -4081,12 +4095,14 @@ f_fullcommand(typval_T *argvars, typval_T *rettv) --emsg_silent; if (res == FAIL) - return; + goto theend; } rettv->vval.v_string = vim_strsave(IS_USER_CMDIDX(ea.cmdidx) ? get_user_command_name(ea.useridx, ea.cmdidx) : cmdnames[ea.cmdidx].cmd_name); +theend: + cmdmod.cmod_flags = save_cmod_flags; } #endif |