zsh-users
 help / color / mirror / code / Atom feed
From: Bart Schaefer <schaefer@brasslantern.com>
To: Zsh Users <zsh-users@sunsite.dk>
Subject: Re: How to handle unknown options in zparseopts
Date: Fri, 02 Sep 2005 16:14:02 +0000	[thread overview]
Message-ID: <1050902161402.ZM22534@candle.brasslantern.com> (raw)
In-Reply-To: <20050831154454.GA122@DervishD>

On Aug 31,  5:44pm, DervishD wrote:
>
> zparseopts -D -A OPTIONS -- -help+
> 
> tmp=$argv[1]
> 
> [[ "$tmp[1]" == "-" ]] && {
>     print "ERROR, unknown option \"$tmp\""
>     return 1
> }
> 
>     That's pretty ugly and not very clean, neither :(

Why are you messing around with the tmp variable?

    zparseopts -D -A OPTIONS -- -help+
    [[ $1 = -* ]] && {
	print -u2 "ERROR, unknown option \"$1\""
	return 1
    }

>     But, worse, zparseopts spits an error in this case:
> 
>     set -- -a
>     zparseopts -a array -- a:

    zparseopts -- a::=array
    (( $#array == 1 )) && {
	print -u2 "ERROR, required argument of \"-a\" is missing"
	return 1
    }

When you use 'a:' you tell zparseopts that *it* should require an
argument; but what you tell zparseopts doesn't have to literally
reflect whether *you* require one.

However, that does mean that the argument must be given in the same
word as the option (e.g. "-axyz" rather than "-a xyz") so that may
not fit your needs.  There are two drawbacks to zparseopts; that's
one of them, and the other is that it doesn't differentiate empty
strings from omitted arguments very effectively.

You might want to try a hybrid approach: Call zparseopts -D -E to
strip all the long options, then use getopts to process the rest of
them and issue error messages.  However, that means that the order of
the options on the command line must not matter.


  reply	other threads:[~2005-09-02 16:14 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2005-08-31 15:44 DervishD
2005-09-02 16:14 ` Bart Schaefer [this message]
2005-09-02 16:35   ` DervishD
2005-09-02 16:54     ` Bart Schaefer
2005-09-02 17:20       ` DervishD

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1050902161402.ZM22534@candle.brasslantern.com \
    --to=schaefer@brasslantern.com \
    --cc=zsh-users@sunsite.dk \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.vuxu.org/mirror/zsh/

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).