summaryrefslogtreecommitdiff
path: root/Src/Zle/complete.c
diff options
context:
space:
mode:
Diffstat (limited to 'Src/Zle/complete.c')
-rw-r--r--Src/Zle/complete.c20
1 files changed, 14 insertions, 6 deletions
diff --git a/Src/Zle/complete.c b/Src/Zle/complete.c
index cd78796c9..a787528c2 100644
--- a/Src/Zle/complete.c
+++ b/Src/Zle/complete.c
@@ -43,6 +43,7 @@ zlong complistlines,
/**/
mod_export
char **compwords,
+ **compredirs,
*compprefix,
*compsuffix,
*compisuffix,
@@ -948,6 +949,7 @@ struct compparam {
static struct compparam comprparams[] = {
{ "words", PM_ARRAY, VAL(compwords), NULL, NULL },
+ { "redirections", PM_ARRAY, VAL(compredirs), NULL, NULL },
{ "CURRENT", PM_INTEGER, VAL(compcurrent), NULL, NULL },
{ "PREFIX", PM_SCALAR, VAL(compprefix), NULL, NULL },
{ "SUFFIX", PM_SCALAR, VAL(compsuffix), NULL, NULL },
@@ -1239,13 +1241,13 @@ comp_wrapper(Eprog prog, FuncWrap w, char *name)
if (incompfunc != 1)
return 1;
else {
- char *orest, *opre, *osuf, *oipre, *oisuf, **owords;
+ char *orest, *opre, *osuf, *oipre, *oisuf, **owords, **oredirs;
char *oqipre, *oqisuf, *oq, *oqi, *oqs, *oaq;
zlong ocur;
unsigned int runset = 0, kunset = 0, m, sm;
Param *pp;
- m = CP_WORDS | CP_CURRENT | CP_PREFIX | CP_SUFFIX |
+ m = CP_WORDS | CP_REDIRS | CP_CURRENT | CP_PREFIX | CP_SUFFIX |
CP_IPREFIX | CP_ISUFFIX | CP_QIPREFIX | CP_QISUFFIX;
for (pp = comprpms, sm = 1; m; pp++, m >>= 1, sm <<= 1) {
if ((m & 1) && ((*pp)->flags & PM_UNSET))
@@ -1267,6 +1269,7 @@ comp_wrapper(Eprog prog, FuncWrap w, char *name)
oqs = ztrdup(compqstack);
oaq = ztrdup(autoq);
owords = zarrdup(compwords);
+ oredirs = zarrdup(compredirs);
runshfunc(prog, w, name);
@@ -1293,11 +1296,14 @@ comp_wrapper(Eprog prog, FuncWrap w, char *name)
zsfree(autoq);
autoq = oaq;
freearray(compwords);
+ freearray(compredirs);
compwords = owords;
+ compredirs = oredirs;
comp_setunset(CP_COMPSTATE |
- (~runset & (CP_WORDS | CP_CURRENT | CP_PREFIX |
- CP_SUFFIX | CP_IPREFIX | CP_ISUFFIX |
- CP_QIPREFIX | CP_QISUFFIX)),
+ (~runset & (CP_WORDS | CP_REDIRS |
+ CP_CURRENT | CP_PREFIX |
+ CP_SUFFIX | CP_IPREFIX | CP_ISUFFIX |
+ CP_QIPREFIX | CP_QISUFFIX)),
(runset & CP_ALLREALS),
(~kunset & CP_RESTORE), (kunset & CP_ALLKEYS));
} else {
@@ -1390,7 +1396,7 @@ setup_(Module m)
hasperm = 0;
comprpms = compkpms = NULL;
- compwords = NULL;
+ compwords = compredirs = NULL;
compprefix = compsuffix = compiprefix = compisuffix =
compqiprefix = compqisuffix =
compcontext = compparameter = compredirect = compquote =
@@ -1447,6 +1453,8 @@ finish_(Module m)
{
if (compwords)
freearray(compwords);
+ if (compredirs)
+ freearray(compredirs);
zsfree(compprefix);
zsfree(compsuffix);
zsfree(compiprefix);