Zsh Mailing List Archive
Messages sorted by:
Reverse Date,
Date,
Thread,
Author
PATCH: zstyle -L with arguments
- X-seq: zsh-workers 22610
- From: Peter Stephenson <pws@xxxxxxx>
- To: zsh-workers@xxxxxxxxxx (Zsh hackers list)
- Subject: PATCH: zstyle -L with arguments
- Date: Tue, 15 Aug 2006 15:30:14 +0100
- Mailing-list: contact zsh-workers-help@xxxxxxxxxx; run by ezmlm
I finally got fed up with having to use grep to get the values of styles
when I ran across one with a multiple-line "eval"-style argument.
The way the first argument of zstyle is a pattern and the second
argument a style name seems pretty much inevitable, but it's a bit
clumsy that the pattern has to match a string that's itself going to be
tested as a pattern. The alternative would be to it the other way
around and output styles that match in a given context, making the test
the same as for normal style lookup; however, I don't think that's
actually as useful for listing. It makes it hard to list every context
in which a style is set, for example, which is a natural thing to want
to do.
Probably _zstyle needs tweaking but I haven't looked at it.
Index: Doc/Zsh/mod_zutil.yo
===================================================================
RCS file: /cvsroot/zsh/zsh/Doc/Zsh/mod_zutil.yo,v
retrieving revision 1.17
diff -u -r1.17 mod_zutil.yo
--- Doc/Zsh/mod_zutil.yo 24 Apr 2005 18:38:04 -0000 1.17
+++ Doc/Zsh/mod_zutil.yo 15 Aug 2006 14:18:44 -0000
@@ -7,7 +7,7 @@
startitem()
findex(zstyle)
-xitem(tt(zstyle) [ tt(-L) ])
+xitem(tt(zstyle) [ tt(-L) [ var(pattern) [ var(style) ] ] ])
xitem(tt(zstyle) [ tt(-e) | tt(-) | tt(-)tt(-) ] var(pattern) var(style) var(strings) ...)
xitem(tt(zstyle -d) [ var(pattern) [ var(styles) ... ] ])
xitem(tt(zstyle -g) var(name) [ var(pattern) [ var(style) ] ])
@@ -31,8 +31,18 @@
`tt(*)'.
The first form (without arguments) lists the definitions in the order
-tt(zstyle) will test them. If the tt(-L) option is given, listing is
-done in the form of calls to tt(zstyle). Forms with arguments:
+tt(zstyle) will test them.
+
+If the tt(-L) option is given, listing is done in the form of calls to
+tt(zstyle). The optional first argument is a pattern which will be matched
+against the string supplied as the pattern for the context; note that
+this means, for example, `tt(zstyle -L ":completion:*")' will
+match any supplied pattern beginning `tt(:completion:)', not
+just tt(":completion:*"): use tt(":completion:\*") to match that.
+The optional second argument limits the output to a specific style (not a
+pattern). tt(-L) is not compatible with any other options.
+
+The other forms are the following:
startitem()
item(tt(zstyle) [ tt(-) | tt(-)tt(-) | tt(-e) ] var(pattern) var(style) var(strings) ...)(
Index: Src/Modules/zutil.c
===================================================================
RCS file: /cvsroot/zsh/zsh/Src/Modules/zutil.c,v
retrieving revision 1.17
diff -u -r1.17 zutil.c
--- Src/Modules/zutil.c 30 May 2006 22:35:03 -0000 1.17
+++ Src/Modules/zutil.c 15 Aug 2006 14:18:52 -0000
@@ -268,9 +268,10 @@
zwarnnam(nam, "invalid argument: %s", args[0]);
return 1;
}
- if (oc == 'L')
+ if (oc == 'L') {
list = 2;
- else if (oc == 'e') {
+ args++;
+ } else if (oc == 'e') {
eval = add = 1;
args++;
}
@@ -305,13 +306,44 @@
Style s;
Stypat p;
char **v;
+ char *context, *stylename;
+ Patprog contprog;
+
+ switch (arrlen(args)) {
+ case 2:
+ context = args[0];
+ stylename = args[1];
+ break;
+
+ case 1:
+ context = args[0];
+ stylename = NULL;
+ break;
+
+ case 0:
+ context = stylename = NULL;
+ break;
+
+ default:
+ zwarnnam(nam, "too many arguments");
+ return 1;
+ }
+ if (context) {
+ tokenize(context);
+ contprog = patcompile(context, PAT_STATIC, NULL);
+ } else
+ contprog = NULL;
for (s = zstyles; s; s = s->next) {
if (list == 1) {
quotedzputs(s->name, stdout);
putchar('\n');
}
+ if (stylename && strcmp(s->name, stylename) != 0)
+ continue;
for (p = s->pats; p; p = p->next) {
+ if (contprog && !pattry(contprog, p->pat))
+ continue;
if (list == 1)
printf("%s %s", (p->eval ? "(eval)" : " "), p->pat);
else {
--
Peter Stephenson <pws@xxxxxxx> Software Engineer
CSR PLC, Churchill House, Cambridge Business Park, Cowley Road
Cambridge, CB4 0WZ, UK Tel: +44 (0)1223 692070
To access the latest news from CSR copy this link into a web browser: http://www.csr.com/email_sig.php
Messages sorted by:
Reverse Date,
Date,
Thread,
Author