Zsh Mailing List Archive
Messages sorted by:
Reverse Date,
Date,
Thread,
Author
Re: zpc_special [was Re: question about glob qualifier format (#qx)]
- X-seq: zsh-workers 31764
- From: Peter Stephenson <p.w.stephenson@xxxxxxxxxxxx>
- To: zsh-workers@xxxxxxx
- Subject: Re: zpc_special [was Re: question about glob qualifier format (#qx)]
- Date: Mon, 23 Sep 2013 20:47:32 +0100
- In-reply-to: <130921163531.ZM18698@torch.brasslantern.com>
- List-help: <mailto:zsh-workers-help@zsh.org>
- List-id: Zsh Workers List <zsh-workers.zsh.org>
- List-post: <mailto:zsh-workers@zsh.org>
- Mailing-list: contact zsh-workers-help@xxxxxxx; run by ezmlm
- References: <20130920111110.GA4501@localhost.localdomain> <20130920123830.30111071@pwslap01u.europe.root.pri> <20130920233930.GB4501@localhost.localdomain> <130921013028.ZM17637@torch.brasslantern.com> <130921163531.ZM18698@torch.brasslantern.com>
On Sat, 21 Sep 2013 16:35:31 -0700
Bart Schaefer <schaefer@xxxxxxxxxxxxxxxx> wrote:
> On Sep 21, 1:30am, Bart Schaefer wrote:
> }
> } I accidentally encountered some odd behavior while confirming this.
> } With NO_EXTENDED_GLOB, #q is not supposed to be available to introduce
> } qualifiers. However
> }
> } % setopt NO_EXTENDED_GLOB
> } % echo *(#q@)
> } <list of symlinks>
> }
> } Whereas
> }
> } % echo *(#q/)
> } zsh: unknown file attribute
> }
> } This is inconsistent, that is, sometimes (#q@) will also give "unknown"
> } and (#q/) will work.
>
> I believe this has to do with the new zpc_special[] array in pattern.c.
I'm aware of unfinished business for actually disabling hashes, but the
problem here is I'm using the array that's only initialised when you set
up a pattern too early in the glob process, which is why it sometimes
does the right thing after you've used a pattern.
See if this fixes everything you found...
diff --git a/Src/glob.c b/Src/glob.c
index 9299b95..0c7d22d 100644
--- a/Src/glob.c
+++ b/Src/glob.c
@@ -1112,7 +1112,8 @@ zglob(LinkList list, LinkNode np, int nountok)
gf_pre_words = NULL;
/* Check for qualifiers */
- while (!nobareglob || zpc_special[ZPC_HASH] != Marker) {
+ while (!nobareglob ||
+ (isset(EXTENDEDGLOB) && !zpc_disables[ZPC_HASH])) {
struct qual *newquals;
char *s;
int sense, paren;
@@ -1158,11 +1159,11 @@ zglob(LinkList list, LinkNode np, int nountok)
case Outpar:
paren++; /*FALLTHROUGH*/
case Bar:
- if (zpc_special[ZPC_BAR] != Marker)
+ if (!zpc_disables[ZPC_BAR])
nobareglob = 1;
break;
case Tilde:
- if (zpc_special[ZPC_TILDE] != Marker)
+ if (!isset(EXTENDEDGLOB) || !zpc_disables[ZPC_TILDE])
nobareglob = 1;
break;
case Inpar:
@@ -1172,7 +1173,7 @@ zglob(LinkList list, LinkNode np, int nountok)
}
if (*s != Inpar)
break;
- if (s[1] == zpc_special[ZPC_HASH]) {
+ if (isset(EXTENDEDGLOB) && !zpc_disables[ZPC_HASH] && s[1] == Pound) {
if (s[2] == 'q') {
*s = 0;
s += 2;
diff --git a/Src/pattern.c b/Src/pattern.c
index b7897e7..4f0166b 100644
--- a/Src/pattern.c
+++ b/Src/pattern.c
@@ -245,7 +245,8 @@ static const char *zpc_strings[ZPC_COUNT] = {
* Corresponding array of pattern disables as set by the user
* using "disable -p".
*/
-static char zpc_disables[ZPC_COUNT];
+/**/
+char zpc_disables[ZPC_COUNT];
/*
* Stack of saved (compressed) zpc_disables for function scope.
--
Peter Stephenson <p.w.stephenson@xxxxxxxxxxxx>
Web page now at http://homepage.ntlworld.com/p.w.stephenson/
Messages sorted by:
Reverse Date,
Date,
Thread,
Author