Zsh Mailing List Archive
Messages sorted by:
Reverse Date,
Date,
Thread,
Author
PATCH: widgets from compctl
- X-seq: zsh-workers 5663
- From: Sven Wischnowsky <wischnow@xxxxxxxxxxxxxxxxxxxxxxx>
- To: zsh-workers@xxxxxxxxxxxxxx
- Subject: PATCH: widgets from compctl
- Date: Fri, 5 Mar 1999 14:45:39 +0100 (MET)
- Mailing-list: contact zsh-workers-help@xxxxxxxxxxxxxx; run by ezmlm
For calling completion widgets from `compctl' no trickery with `-K'
will ever bring us on the save side, so the patch below adds the
option `-i function' (think of it as `invoke the widget...' if you
like).
Bye
Sven
diff -u os/Zle/comp.h Src/Zle/comp.h
--- os/Zle/comp.h Fri Mar 5 14:23:31 1999
+++ Src/Zle/comp.h Fri Mar 5 14:33:55 1999
@@ -103,6 +103,7 @@
char *glob; /* for -g (globbing) */
char *str; /* for -s (expansion) */
char *func; /* for -K (function) */
+ char *widget; /* for -i (function) */
char *explain; /* for -X (explanation) */
char *ylist; /* for -y (user-defined desc. for listing) */
char *prefix, *suffix; /* for -P and -S (prefix, suffix) */
diff -u os/Zle/comp1.c Src/Zle/comp1.c
--- os/Zle/comp1.c Fri Mar 5 14:23:31 1999
+++ Src/Zle/comp1.c Fri Mar 5 14:36:27 1999
@@ -172,6 +172,7 @@
zsfree(cc->glob);
zsfree(cc->str);
zsfree(cc->func);
+ zsfree(cc->widget);
zsfree(cc->explain);
zsfree(cc->ylist);
zsfree(cc->prefix);
diff -u os/Zle/compctl.c Src/Zle/compctl.c
--- os/Zle/compctl.c Fri Mar 5 14:23:31 1999
+++ Src/Zle/compctl.c Fri Mar 5 14:35:48 1999
@@ -578,6 +578,19 @@
*argv = "" - 1;
}
break;
+ case 'i':
+ if ((*argv)[1]) {
+ cct.widget = (*argv) + 1;
+ *argv = "" - 1;
+ } else if (!argv[1]) {
+ zwarnnam(name, "function name expected after -%c", NULL,
+ **argv);
+ return 1;
+ } else {
+ cct.widget = *++argv;
+ *argv = "" - 1;
+ }
+ break;
case 'Y':
cct.mask |= CC_EXPANDEXPL;
goto expl;
@@ -1197,6 +1210,7 @@
zsfree(cc->glob);
zsfree(cc->str);
zsfree(cc->func);
+ zsfree(cc->widget);
zsfree(cc->explain);
zsfree(cc->ylist);
zsfree(cc->prefix);
@@ -1217,6 +1231,7 @@
cc->glob = ztrdup(cct->glob);
cc->str = ztrdup(cct->str);
cc->func = ztrdup(cct->func);
+ cc->widget = ztrdup(cct->widget);
cc->explain = ztrdup(cct->explain);
cc->ylist = ztrdup(cct->ylist);
cc->prefix = ztrdup(cct->prefix);
@@ -1423,6 +1438,7 @@
printif(cc->gname, 'J');
printif(cc->keyvar, 'k');
printif(cc->func, 'K');
+ printif(cc->widget, 'i');
printif(cc->explain, (cc->mask & CC_EXPANDEXPL) ? 'Y' : 'X');
printif(cc->ylist, 'y');
printif(cc->prefix, 'P');
diff -u os/Zle/zle_tricky.c Src/Zle/zle_tricky.c
--- os/Zle/zle_tricky.c Fri Mar 5 14:23:32 1999
+++ Src/Zle/zle_tricky.c Fri Mar 5 14:37:42 1999
@@ -6501,51 +6501,48 @@
maketildelist();
addwhat = oaw;
}
+ if (cc->widget)
+ callcompfunc(os, cc->widget);
if (cc->func) {
- if (cc->func[0] == '_')
- /* The function should be called like a completion widget. */
- callcompfunc(os, cc->func + 1);
- else {
- /* This handles the compctl -K flag. */
- List list;
- char **r;
- int lv = lastval;
+ /* This handles the compctl -K flag. */
+ List list;
+ char **r;
+ int lv = lastval;
- /* Get the function. */
- if ((list = getshfunc(cc->func)) != &dummy_list) {
- /* We have it, so build a argument list. */
- LinkList args = newlinklist();
- int osc = sfcontext;
+ /* Get the function. */
+ if ((list = getshfunc(cc->func)) != &dummy_list) {
+ /* We have it, so build a argument list. */
+ LinkList args = newlinklist();
+ int osc = sfcontext;
- addlinknode(args, cc->func);
+ addlinknode(args, cc->func);
- if (delit) {
- p = dupstrpfx(os, ooffs);
- untokenize(p);
- addlinknode(args, p);
- p = dupstring(os + ooffs);
- untokenize(p);
- addlinknode(args, p);
- } else {
- addlinknode(args, lpre);
- addlinknode(args, lsuf);
- }
-
- /* This flag allows us to use read -l and -c. */
- if (incompfunc != 1)
- incompctlfunc = 1;
- sfcontext = SFC_COMPLETE;
- /* Call the function. */
- doshfunc(cc->func, list, args, 0, 1);
- sfcontext = osc;
- incompctlfunc = 0;
- /* And get the result from the reply parameter. */
- if ((r = get_user_var("reply")))
- while (*r)
- addmatch(*r++, NULL);
+ if (delit) {
+ p = dupstrpfx(os, ooffs);
+ untokenize(p);
+ addlinknode(args, p);
+ p = dupstring(os + ooffs);
+ untokenize(p);
+ addlinknode(args, p);
+ } else {
+ addlinknode(args, lpre);
+ addlinknode(args, lsuf);
}
- lastval = lv;
+
+ /* This flag allows us to use read -l and -c. */
+ if (incompfunc != 1)
+ incompctlfunc = 1;
+ sfcontext = SFC_COMPLETE;
+ /* Call the function. */
+ doshfunc(cc->func, list, args, 0, 1);
+ sfcontext = osc;
+ incompctlfunc = 0;
+ /* And get the result from the reply parameter. */
+ if ((r = get_user_var("reply")))
+ while (*r)
+ addmatch(*r++, NULL);
}
+ lastval = lv;
}
if (cc->mask & (CC_JOBS | CC_RUNNING | CC_STOPPED)) {
/* Get job names. */
diff -u od/Zsh/compctl.yo Doc/Zsh/compctl.yo
--- od/Zsh/compctl.yo Thu Mar 4 10:59:44 1999
+++ Doc/Zsh/compctl.yo Fri Mar 5 14:45:09 1999
@@ -124,9 +124,9 @@
list([ tt(-fcFBdeaRGovNAIOPZEnbjrzu/) ])
list([ tt(-k) var(array) ] [ tt(-g) var(globstring) ] \
[ tt(-s) var(subststring) ])
-list([ tt(-K) var(function) ] [ tt(-H) var(num pattern) ])
+list([ tt(-K) var(function) ] [ tt(-i) var(function) ])
list([ tt(-Q) ] [ tt(-P) var(prefix) ] [ tt(-S) var(suffix) ])
-list([ tt(-W) var(file-prefix) ])
+list([ tt(-W) var(file-prefix) ] [ tt(-H) var(num pattern) ])
list([ tt(-q) ] [ tt(-X) var(explanation) ] [ tt(-Y) var(explanation) ])
list([ tt(-y) var(func-or-var) ] [ tt(-l) var(cmd) ] [ tt(-U) ])
list([ tt(-t) var(continue) ] [ tt(-J) var(name) ] [ tt(-V) var(name) ])
@@ -300,12 +300,13 @@
completes only logged-on users after `tt(talk)'. Note that `tt(whoson)' must
return an array, so `tt(reply=`users`)' would be incorrect.
-
-If the given name starts with an underscore, the function is called in
-the same way as a comompletion widget, see
+)
+item(tt(-i) var(function))(
+Like tt(-K), but the function is invoked in a context like that for
+completion widgets, see
ifzman(zmanref(zshzle))\
ifnzman(noderef(The zle Module))\
-) for more information.
+for more information.
)
item(tt(-H) var(num pattern))(
The possible completions are taken from the last var(num) history
--
Sven Wischnowsky wischnow@xxxxxxxxxxxxxxxxxxxxxxx
Messages sorted by:
Reverse Date,
Date,
Thread,
Author