aboutsummaryrefslogtreecommitdiff
path: root/src/nvim/ex_getln.c
diff options
context:
space:
mode:
authorzeertzjq <zeertzjq@outlook.com>2024-10-09 08:14:18 +0800
committerGitHub <noreply@github.com>2024-10-09 08:14:18 +0800
commitf449a38f6a47bee30f0d4e291d8234d1ac8288a7 (patch)
treee65db9b696571e64352b16f849b8cc7582183f8c /src/nvim/ex_getln.c
parente98b1b0235a5e817c00814549606631703ab2041 (diff)
downloadrneovim-f449a38f6a47bee30f0d4e291d8234d1ac8288a7.tar.gz
rneovim-f449a38f6a47bee30f0d4e291d8234d1ac8288a7.tar.bz2
rneovim-f449a38f6a47bee30f0d4e291d8234d1ac8288a7.zip
vim-patch:9.1.0770: current command line completion is a bit limited (#30728)
Problem: current command completion is a bit limited Solution: Add the shellcmdline completion type and getmdcomplpat() function (Ruslan Russkikh). closes: vim/vim#15823 https://github.com/vim/vim/commit/0407d621bbad020b840ffbbbd25ba023bbc05edd Co-authored-by: Ruslan Russkikh <dvrussk@yandex.ru>
Diffstat (limited to 'src/nvim/ex_getln.c')
-rw-r--r--src/nvim/ex_getln.c39
1 files changed, 38 insertions, 1 deletions
diff --git a/src/nvim/ex_getln.c b/src/nvim/ex_getln.c
index ca01a158a3..b58a6b16f1 100644
--- a/src/nvim/ex_getln.c
+++ b/src/nvim/ex_getln.c
@@ -4086,14 +4086,44 @@ static char *get_cmdline_str(void)
return xstrnsave(p->cmdbuff, (size_t)p->cmdlen);
}
+/// Get the current command-line completion pattern.
+static char *get_cmdline_completion_pattern(void)
+{
+ if (cmdline_star > 0) {
+ return NULL;
+ }
+
+ CmdlineInfo *p = get_ccline_ptr();
+ if (p == NULL || p->xpc == NULL) {
+ return NULL;
+ }
+
+ int xp_context = p->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;
+ }
+ if (xp_context == EXPAND_UNSUCCESSFUL) {
+ return NULL;
+ }
+
+ char *compl_pat = p->xpc->xp_pattern;
+ if (compl_pat == NULL) {
+ return NULL;
+ }
+
+ return xstrdup(compl_pat);
+}
+
/// Get the current command-line completion type.
static char *get_cmdline_completion(void)
{
if (cmdline_star > 0) {
return NULL;
}
- CmdlineInfo *p = get_ccline_ptr();
+ CmdlineInfo *p = get_ccline_ptr();
if (p == NULL || p->xpc == NULL) {
return NULL;
}
@@ -4123,6 +4153,13 @@ static char *get_cmdline_completion(void)
return xstrdup(cmd_compl);
}
+/// "getcmdcomplpat()" function
+void f_getcmdcomplpat(typval_T *argvars, typval_T *rettv, EvalFuncData fptr)
+{
+ rettv->v_type = VAR_STRING;
+ rettv->vval.v_string = get_cmdline_completion_pattern();
+}
+
/// "getcmdcompltype()" function
void f_getcmdcompltype(typval_T *argvars, typval_T *rettv, EvalFuncData fptr)
{