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

PATCH: zsh-3.1.2-zefram3: ksh globbing syntax



This patch implements (as far as I know, completely, at least up to
lexical differences) the ksh globbing syntax.  This was one of
the major remaining incompatibilities. The option KSH_GLOB has been
created to control this.  With this on, parentheses are only
recognised in patterns in the following combinations:

KSH_GLOB      Normal zsh equivalent
-------       ---------------------
  @(...)        (...)
  *(...)        (...)#
  +(...)        (...)##
  ?(...)        (...|)
  !(...)        (*~...)  or (after fix) (^...)
  -(...)        pattern(...)  (qualifiers)

Introducing a new symbol for qualifiers was basically forced; there is
just too much scope for confusion otherwise.  As this is now explicit,
-(...) at the end of a pattern with KSH_GLOB is enough to turn on
globbing.  In other words, foobar-(.) will fail unless foobar exists
and is a regular file.  I could easily change this.  (Of course I
haven't touch the behaviour without KSH_GLOB.)

The lexical difference referred to above is that in ksh, both the `('
and the character before must be unquoted, while in my implementation
only the `(' need be.  It just seemed too much of a waste of time
forcing the lexical analyser to tokenise @, ! and - when this aspect
of zsh is any case totally different from ksh.  If ksh finds a left
parenthesis without one of the five tokens in front, (it doesn't know
about -(...), of course) it flags an error, so any functional ksh code
will work.

Note that SH_GLOB is respected, i.e. a @(...) or whatever resulting
from a parameter expansion is not treated specially, in agreement with
ksh.

There are a couple of other associated fixes:

1) As hinted at, the EXTENDED_GLOB ^ works properly if at the
start of a set of parentheses, so that (^...) is like (*~(...)),
and is in fact implemented that way.  Anywhere else the older,
rather cruder, parsing is used.  This comes as a side effect of
implementing !(...), it takes very little extra code.  Unfortunately
it is easy to confuse an expression like this with a set of
qualifiers, but there's no way of fixing that, you just have to type
the more confusing but scarcely longer (*~..) (or (*~(...|...)) if
there are |'s in the pattern).

2) A bug fix for the closure code was necessary (this hunk is actually
independent of the rest):

  [[ fofoofoo = (fo|foo)# ]]

failed, because the alternation code didn't search for the longest
match.

One question: when patterns are used in condtions and case statements,
the shell adds an extra layer of parentheses around them: `pattern'
becomes `(pattern)' which now has to be `@(pattern)' for KSH_GLOB.  I
couldn't see any reason for this grotesquery; everything seems to work
without it.  Does anyone know?  I've left it in just in case.

[It's nothing to do with the optional parentheses in `case' patterns,
which I've had to handle specially:

  case $foo in
    (pat1|pat2) action;;
  esac

was passing the full (pat1|pat2) through, but the parentheses need to
be stripped for KSH_GLOB.]

begin 644 ksh_glob.dif.gz
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
94H%47<%$4>HA9$%0+:/#!0#IPD>#GE8`````
`
end

-- 
Peter Stephenson <pws@xxxxxx>       Tel: +39 50 911239
WWW:  http://www.ifh.de/~pws/
Gruppo Teorico, Dipartimento di Fisica
Piazza Torricelli 2, 56100 Pisa, Italy



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