Zsh Mailing List Archive
Messages sorted by:
Reverse Date,
Date,
Thread,
Author
Re: zsh[modules]/zutil: zparseopts should parse alternate long options
- X-seq: zsh-users 17001
- From: Bart Schaefer <schaefer@xxxxxxxxxxxxxxxx>
- To: toki clover <tokiclover@xxxxxxxxx>, zsh-users@xxxxxxx
- Subject: Re: zsh[modules]/zutil: zparseopts should parse alternate long options
- Date: Mon, 09 Apr 2012 14:42:25 -0700
- In-reply-to: <CAGw_SrOBWv=s2Re8oZga=DSfqjQfEAJHXy9xfTqFzKNJuh4Z5Q@mail.gmail.com>
- List-help: <mailto:zsh-users-help@zsh.org>
- List-id: Zsh Users List <zsh-users.zsh.org>
- List-post: <mailto:zsh-users@zsh.org>
- Mailing-list: contact zsh-users-help@xxxxxxx; run by ezmlm
- References: <CAGw_SrOBWv=s2Re8oZga=DSfqjQfEAJHXy9xfTqFzKNJuh4Z5Q@mail.gmail.com>
On Apr 9, 2:12pm, toki clover wrote:
}
} Now, it would be nice if an alternate long option e.g. `-option'
} instead of the GNU style `--option' would work, because in the present
} day, if the first letter of a long option name is a short option name,
} the long option would never be parsed as one would expect.
An example would help to clarify your question. Do any of the following
explain what you mean? If not, could you provide a sample?
Given
ARGV=(-option)
zparseopts o=shortopts option=longopts
the entire string "-option" will be placed in the array "$longopts",
which seems to be what you want. Given
ARGV=(-option -o)
zparseopts o=shortopts option=longopts
then $shortops will contain "-o" and $longopts will contain "-option".
In fact zparseopts normally attempts to make the longest match first, so
except in ambiguous cases option=longopts will always consume -option
before o=shortopts is attempted. Only when no spec is matched that can
be treated as a single element does zparseopts fall back to handling
the prefix of -option as if it were -o.
The ambigous case happens with
zparseopts option=longopts o:=shortopts
where -option could be parsed as either [-o with argument ption] or as
[-option]. The above would place (-o ption) in $shortopts and leave
nothing for $longopts. However, this can be handled by making two
passes with separate specs:
zparseopts -E -D option=longopts
zparseopts -D o:=shortopts
In fact as currently implemented zparseopts scans the specs in reverse
order from last to first, so the above two passes are the same as
zparseopts -D o:=shortopts option=longopts
but that's undocumented so not guaranteed to remain the case. Since
using -E is an imperfect solution for the two-pass example, it would
probably not be unreasonable to suggest that the search order should
become documented and therefore trustworthy.
Messages sorted by:
Reverse Date,
Date,
Thread,
Author