zsh-users
 help / color / mirror / code / Atom feed
From: DervishD <zsh@dervishd.net>
To: Bart Schaefer <schaefer@brasslantern.com>
Cc: Zsh Users <zsh-users@sunsite.dk>
Subject: Re: How to handle unknown options in zparseopts
Date: Fri, 2 Sep 2005 18:35:15 +0200	[thread overview]
Message-ID: <20050902163515.GA962@DervishD> (raw)
In-Reply-To: <1050902161402.ZM22534@candle.brasslantern.com>

    Hi Bart :)

 * Bart Schaefer <schaefer@brasslantern.com> dixit:
> On Aug 31,  5:44pm, DervishD wrote:
> > 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?

    Because I *keep* forgetting that zsh can compare with patterns.
Sorry :(((
 
> >     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.

    Nice trick, thanks :))))) It doesn't work for my particular case,
but it's a good base to think about a solution :)

> 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.

    It doesn't, unfortunately :( But, why doesn't this work:

    set -- -a xyz
    zparseopts -A array -- a::

    This doesn't consider 'xyz' as an argument to '-a'. OK, I've told
to zparseopts that the argument is optional but this doesn't seem to
be different from "zparseopts -A array -- a", without any colon :?
Does that mean that optional arguments must ALWAYS go in the same
word as the option?

> 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.

    This drawback is not important for me. Really for my script there
shoudn't be any difference between an empty string and a missing
argument.
 
> 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.

    That was my other idea ;) The order of the options does matter
*only* if an option is repeated: the last value is the one that has
to be used. Other than that, order is not important. I'll use the
hybrid approach, I find it simpler and I can take advantage of
already written code (I have already written the code for parsing
short options)

    Thanks a lot for your help, Bart :)

    Raúl Núñez de Arenas Coronado

-- 
Linux Registered User 88736 | http://www.dervishd.net
http://www.pleyades.net & http://www.gotesdelluna.net
It's my PC and I'll cry if I want to...


  reply	other threads:[~2005-09-02 16:31 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
2005-09-02 16:35   ` DervishD [this message]
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=20050902163515.GA962@DervishD \
    --to=zsh@dervishd.net \
    --cc=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).