Mercurial > vim
diff src/ex_docmd.c @ 23853:a9ed31ab85c3 v8.2.2468
patch 8.2.2468: not easy to get the full command name from a shortened one
Commit: https://github.com/vim/vim/commit/038e09ee7645731de0296d255aabb17603276443
Author: Bram Moolenaar <Bram@vim.org>
Date: Sat Feb 6 12:38:51 2021 +0100
patch 8.2.2468: not easy to get the full command name from a shortened one
Problem: Not easy to get the full command name from a shortened one.
Solution: Add fullcommand(). (Martin Tournoij, closes https://github.com/vim/vim/issues/7777)
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Sat, 06 Feb 2021 12:45:04 +0100 |
parents | 262ab14b27db |
children | a7098bc3810e |
line wrap: on
line diff
--- a/src/ex_docmd.c +++ b/src/ex_docmd.c @@ -3668,6 +3668,33 @@ cmd_exists(char_u *name) return 0; // trailing garbage return (ea.cmdidx == CMD_SIZE ? 0 : (full ? 2 : 1)); } + +/* + * "fullcommand" function + */ + void +f_fullcommand(typval_T *argvars, typval_T *rettv) +{ + exarg_T ea; + char_u *name = argvars[0].vval.v_string; + char_u *p; + + while (name[0] != NUL && name[0] == ':') + name++; + name = skip_range(name, TRUE, NULL); + + rettv->v_type = VAR_STRING; + + ea.cmd = (*name == '2' || *name == '3') ? name + 1 : name; + ea.cmdidx = (cmdidx_T)0; + p = find_ex_command(&ea, NULL, NULL, NULL); + if (p == NULL || ea.cmdidx == CMD_SIZE) + return; + + rettv->vval.v_string = vim_strsave(IS_USER_CMDIDX(ea.cmdidx) + ? get_user_commands(NULL, ea.useridx) + : cmdnames[ea.cmdidx].cmd_name); +} #endif cmdidx_T