mirror of
git://git.code.sf.net/p/zsh/code
synced 2025-05-21 12:01:54 +02:00
52473: zstyle -q for testing existence of a zstyle setting
This commit is contained in:
parent
3406089647
commit
c72b4a74ef
3 changed files with 41 additions and 0 deletions
|
@ -1,5 +1,7 @@
|
|||
2024-01-24 Bart Schaefer <schaefer@zsh.org>
|
||||
|
||||
* 52473: Doc/Zsh/mod_zutil.yo, Src/Modules/zutil.c: zstyle -q
|
||||
|
||||
* 52468: Src/builtin.c, Src/utils.c: save and restore state of
|
||||
correct TTY when using read -s / -d
|
||||
|
||||
|
|
|
@ -11,6 +11,7 @@ xitem(tt(zstyle) [ tt(-L) [ var(metapattern) [ var(style) ] ] ])
|
|||
xitem(tt(zstyle) [ tt(-e) | tt(-) | tt(-)tt(-) ] var(pattern) var(style) var(string) ...)
|
||||
xitem(tt(zstyle -d) [ var(pattern) [ var(style) ... ] ])
|
||||
xitem(tt(zstyle -g) var(name) [ var(pattern) [ var(style) ] ])
|
||||
xitem(tt(zstyle -q) var(context) var(style))
|
||||
xitem(tt(zstyle -){tt(a)|tt(b)|tt(s)} var(context) var(style) var(name) [ var(sep) ])
|
||||
xitem(tt(zstyle -){tt(T)|tt(t)} var(context) var(style) [ var(string) ... ])
|
||||
item(tt(zstyle -m) var(context) var(style) var(pattern))(
|
||||
|
@ -105,6 +106,12 @@ enditem()
|
|||
The other forms can be used to look up or test styles for a given context.
|
||||
|
||||
startitem()
|
||||
item(tt(zstyle -q) var(context) var(style))(
|
||||
Return tt(0) if var(style) is defined in var(context). This does not
|
||||
evaluate expressions defined by tt(zstyle -e) and does not examine any
|
||||
values set by var(style). The expected use is to test whether a style
|
||||
has been defined for var(context) before asserting a new style.
|
||||
)
|
||||
item(tt(zstyle -s) var(context) var(style) var(name) [ var(sep) ])(
|
||||
The parameter var(name) is set to the value of the style interpreted as a
|
||||
string. If the value contains several strings they are concatenated with
|
||||
|
|
|
@ -461,6 +461,28 @@ lookupstyle(char *ctxt, char *style)
|
|||
return found;
|
||||
}
|
||||
|
||||
static int
|
||||
testforstyle(char *ctxt, char *style)
|
||||
{
|
||||
Style s;
|
||||
Stypat p;
|
||||
int found = 0;
|
||||
|
||||
s = (Style)zstyletab->getnode2(zstyletab, style);
|
||||
if (s) {
|
||||
MatchData match;
|
||||
savematch(&match);
|
||||
for (p = s->pats; p; p = p->next)
|
||||
if (pattry(p->prog, ctxt)) {
|
||||
found = 1;
|
||||
break;
|
||||
}
|
||||
restorematch(&match);
|
||||
}
|
||||
|
||||
return !found; /* 0 == success */
|
||||
}
|
||||
|
||||
static int
|
||||
bin_zstyle(char *nam, char **args, UNUSED(Options ops), UNUSED(int func))
|
||||
{
|
||||
|
@ -570,6 +592,7 @@ bin_zstyle(char *nam, char **args, UNUSED(Options ops), UNUSED(int func))
|
|||
case 't': min = 2; max = -1; break;
|
||||
case 'T': min = 2; max = -1; break;
|
||||
case 'm': min = 3; max = 3; break;
|
||||
case 'q': min = 2; max = 2; break;
|
||||
case 'g': min = 1; max = 3; break;
|
||||
default:
|
||||
zwarnnam(nam, "invalid option: %s", args[0]);
|
||||
|
@ -723,6 +746,15 @@ bin_zstyle(char *nam, char **args, UNUSED(Options ops), UNUSED(int func))
|
|||
return 1;
|
||||
}
|
||||
break;
|
||||
case 'q':
|
||||
{
|
||||
int success;
|
||||
queue_signals(); /* Protect PAT_STATIC */
|
||||
success = testforstyle(args[1], args[2]);
|
||||
unqueue_signals();
|
||||
return success;
|
||||
}
|
||||
break;
|
||||
case 'g':
|
||||
{
|
||||
int ret = 1;
|
||||
|
|
Loading…
Reference in a new issue