-*builtin.txt* For Vim version 9.1. Last change: 2025 Jun 28
+*builtin.txt* For Vim version 9.1. Last change: 2025 Jul 03
VIM REFERENCE MANUAL by Bram Moolenaar
getcharstr([{expr} [, {opts}]]) String get one character from the user
getcmdcomplpat() String return the completion pattern of the
current command-line completion
-getcmdcompltype() String return the type of the current
- command-line completion
+getcmdcompltype({pat}) String return the type of command-line
+ completion
getcmdline() String return the current command-line input
getcmdpos() Number return cursor position in command-line
getcmdprompt() String return the current command-line prompt
Return type: |String|
-getcmdcompltype() *getcmdcompltype()*
- Return the type of the current command-line completion.
- Only works when the command line is being edited, thus
- requires use of |c_CTRL-\_e| or |c_CTRL-R_=|.
+getcmdcompltype([{pat}]) *getcmdcompltype()*
+ Return the type of command-line completion using {pat}.
+ If {pat} is omited, only works when the command line is being
+ edited, thus requires use of |c_CTRL-\_e| or |c_CTRL-R_=|.
+
See |:command-completion| for the return string.
Also see |getcmdtype()|, |setcmdpos()|, |getcmdline()|,
|getcmdprompt()|, |getcmdcomplpat()| and |setcmdline()|.
-*usr_41.txt* For Vim version 9.1. Last change: 2025 Apr 27
+*usr_41.txt* For Vim version 9.1. Last change: 2025 Jul 03
VIM USER MANUAL - by Bram Moolenaar
Command line: *command-line-functions*
getcmdcomplpat() get completion pattern of the current command
line
- getcmdcompltype() get the type of the current command line
- completion
+ getcmdcompltype() get the type of the command line completion
getcmdline() get the current command line input
getcmdprompt() get the current command line prompt
getcmdpos() get position of the cursor in the command line
-*version9.txt* For Vim version 9.1. Last change: 2025 Jun 28
+*version9.txt* For Vim version 9.1. Last change: 2025 Jul 03
VIM REFERENCE MANUAL by Bram Moolenaar
- allow to complete directories from 'cdpath' for |:cd| and similar commands,
add the "cd_in_path" completion type for e.g. |:command-complete| and
|getcompletion()|
+- |getcompletion()| now accepts a pat and returns the completion type for the
+ {pat} argument
- allow to complete shell commands and files using the new shellcmdline
completion type using |:command-complete| and |getcmdcomplpat()|
- allow to specify additional attributes in the completion menu (allows to
ret_string, f_getcharstr},
{"getcmdcomplpat", 0, 0, 0, NULL,
ret_string, f_getcmdcomplpat},
- {"getcmdcompltype", 0, 0, 0, NULL,
+ {"getcmdcompltype", 0, 1, FEARG_1, NULL,
ret_string, f_getcmdcompltype},
{"getcmdline", 0, 0, 0, NULL,
ret_string, f_getcmdline},
* Get the current command-line completion type.
*/
static char_u *
-get_cmdline_completion(void)
+get_cmdline_completion(expand_T *xpc)
{
- cmdline_info_T *p;
- char_u *buffer;
int xp_context;
- if (cmdline_star > 0)
- return NULL;
-
- p = get_ccline_ptr();
- if (p == NULL || p->xpc == NULL)
- return NULL;
-
- xp_context = p->xpc->xp_context;
+ xp_context = xpc->xp_context;
if (xp_context == EXPAND_NOTHING)
{
- set_expand_context(p->xpc);
- xp_context = p->xpc->xp_context;
- p->xpc->xp_context = EXPAND_NOTHING;
+ set_expand_context(xpc);
+ xp_context = xpc->xp_context;
+ xpc->xp_context = EXPAND_NOTHING;
}
if (xp_context == EXPAND_UNSUCCESSFUL)
return NULL;
if (xp_context == EXPAND_USER_LIST || xp_context == EXPAND_USER_DEFINED)
{
- buffer = alloc(STRLEN(cmd_compl) + STRLEN(p->xpc->xp_arg) + 2);
+ char_u *buffer;
+
+ buffer = alloc(STRLEN(cmd_compl) + STRLEN(xpc->xp_arg) + 2);
if (buffer == NULL)
return NULL;
- sprintf((char *)buffer, "%s,%s", cmd_compl, p->xpc->xp_arg);
+ sprintf((char *)buffer, "%s,%s", cmd_compl, xpc->xp_arg);
return buffer;
}
void
f_getcmdcompltype(typval_T *argvars UNUSED, typval_T *rettv)
{
+ if (check_for_opt_string_arg(argvars, 0) == FAIL)
+ return;
+
rettv->v_type = VAR_STRING;
- rettv->vval.v_string = get_cmdline_completion();
+
+ if (argvars[0].v_type != VAR_UNKNOWN)
+ {
+ char_u *pat;
+ expand_T xpc;
+ int cmdline_len;
+
+ pat = tv_get_string(&argvars[0]);
+ ExpandInit(&xpc);
+
+ cmdline_len = (int)STRLEN(pat);
+ set_cmd_context(&xpc, pat, cmdline_len, cmdline_len, FALSE);
+ xpc.xp_pattern_len = (int)STRLEN(xpc.xp_pattern);
+ xpc.xp_col = cmdline_len;
+
+ rettv->v_type = VAR_STRING;
+ rettv->vval.v_string = get_cmdline_completion(&xpc);
+
+ ExpandCleanup(&xpc);
+ }
+ else
+ {
+ cmdline_info_T *p;
+
+ p = get_ccline_ptr();
+ if (cmdline_star > 0 || p == NULL || p->xpc == NULL)
+ return;
+
+ rettv->vval.v_string = get_cmdline_completion(p->xpc);
+ }
}
/*
set wildcharm=0
endfunc
+func Test_getcmdcompltype_with_pat()
+ call assert_fails('call getcmdcompltype({})', 'E1174:')
+ call assert_equal(getcmdcompltype(''), 'command')
+ call assert_equal(getcmdcompltype('dummy '), '')
+ call assert_equal(getcmdcompltype('cd '), 'dir_in_path')
+ call assert_equal(getcmdcompltype('let v:n'), 'var')
+ call assert_equal(getcmdcompltype('call tag'), 'function')
+ call assert_equal(getcmdcompltype('help '), 'help')
+endfunc
+
" vim: shiftwidth=2 sts=2 expandtab
static int included_patches[] =
{ /* Add new patch number below this line */
+/**/
+ 1505,
/**/
1504,
/**/