Zsh Mailing List Archive
Messages sorted by: Reverse Date, Date, Thread, Author

Re: PATCH: 3.1.5 - (Sven) Case-insensitive globbing



Peter Stephenson wrote:
>I've got two possible implentations to propose (I have them both
>working, the differences aren't so great).  Both are based on the way
>it's done in perl 5:  the closure operator, in our case #, at the
>start of a group signifies that flags follow.  This doesn't clash with
>any existing syntax.  Obviously you need EXTENDED_GLOB set.

Good.  I'd considered this extension mechanism, but for some reason
dismissed it as impractical -- maybe I was confused by the dependence
on EXTENDED_GLOB.

>Syntax 1       Syntax 2
>(#ifoo)bar     ((#i)foo)bar    match FOObar FoObar fOobar, not FOOBAR
>bar(#ifoo)     bar(#i)foo      same with the bits the other way round
>(#lfooBAR)     (#l)fooBAR      match FOOBAR FoOBAR fOoBAR, not foobar
>(#ifoo(#cbar)) (#i)foo(#c)bar  same as first example; #c negates i or l

Let's go for the more Perl-like syntax.  I think your syntax 1 is slightly
more logical, but the difference is minimal so I think it would be wise
to follow precedent.

>#s (for significant) could be an alternative to #c; #l corresponds to
>Sven's (f) qualifier, i.e. only lower case letters in the pattern
>match case-insensitively in the target string.

If there were just two senses to the flag, I'd argue for #i and #I (#I
being the opposite of #i).  In this case perhaps #i, #l and #I could be
used.  I'd prefer a better mnemonic for the one-way case insensitivity,
though.

>              The only real bind with this is with KSH_GLOB, where the
>second set of examples would have to become @(@(#i)foo)bar,
>@(#l)fooBAR and @(#i)foo@(#c)bar.

Considering the circumstances under which KSH_GLOB will be used,
I don't think that making it pleasant to mix with EXTENDED_GLOB is a
major consideration.

>shell doesn't need the @ if it comes across the left parenthesis
>before anything else, so you can drop the first @ in each case, but
>this is deliberately undocumented.)

It's not explicitly documented, but it's intentional, and should be
derivable from the documentation.  Basically, KSH_GLOB doesn't turn off
the effects of "("; it just makes certain characters special immediately
before a "(".

>One point about this is that you need to turn on case-insensitivity at
>any segment of the path where you need it:

I'm rather dubious about this.  () grouping doesn't have to be on a
component-by-component basis; I think these modifiers' effects should
last up to the end of the textual group, even if this spans multiple
pathname components.  It's the principle of least surprise.

-zefram



Messages sorted by: Reverse Date, Date, Thread, Author