patch 9.1.1226: "shellcmdline" completion doesn't work with input()
Problem: "shellcmdline" completion doesn't work with input().
Solution: Use set_context_for_wildcard_arg(). Fix indent in nextwild()
(zeertzjq).
There are some other inconsistencies for input() completion (ref #948),
but since "shellcmdline" currently doesn't work at all, it makse sense
to at least make it work.
fixes: #16932
closes: #16934
Signed-off-by: zeertzjq <zeertzjq@outlook.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
diff --git a/src/cmdexpand.c b/src/cmdexpand.c
index d218277..85422b8 100644
--- a/src/cmdexpand.c
+++ b/src/cmdexpand.c
@@ -15,6 +15,7 @@
static int cmd_showtail; // Only show path tail in lists ?
+static void set_context_for_wildcard_arg(exarg_T *eap, char_u *arg, int usefilter, expand_T *xp, int *complp);
static int ExpandFromContext(expand_T *xp, char_u *, char_u ***, int *, int);
static char_u *showmatches_gettail(char_u *s);
static int expand_showtail(expand_T *xp);
@@ -230,17 +231,17 @@
if (xp->xp_numfiles == -1)
{
#ifdef FEAT_EVAL
- if (ccline->input_fn && ccline->xp_context == EXPAND_COMMANDS)
+ if (ccline->input_fn && ccline->xp_context == EXPAND_COMMANDS)
{
// Expand commands typed in input() function
set_cmd_context(xp, ccline->cmdbuff, ccline->cmdlen, ccline->cmdpos, FALSE);
- }
- else
+ }
+ else
#endif
- {
+ {
set_expand_context(xp);
- }
- cmd_showtail = expand_showtail(xp);
+ }
+ cmd_showtail = expand_showtail(xp);
}
if (xp->xp_context == EXPAND_UNSUCCESSFUL)
@@ -2723,6 +2724,7 @@
{
#ifdef FEAT_EVAL
cmdline_info_T *ccline = get_cmdline_info();
+ int context;
#endif
int old_char = NUL;
char_u *nextcomm;
@@ -2745,6 +2747,12 @@
xp->xp_context = ccline->xp_context;
xp->xp_pattern = ccline->cmdbuff;
xp->xp_arg = ccline->xp_arg;
+ if (xp->xp_context == EXPAND_SHELLCMDLINE)
+ {
+ context = xp->xp_context;
+ set_context_for_wildcard_arg(NULL, xp->xp_pattern, FALSE, xp,
+ &context);
+ }
}
else
#endif