unofficial mirror of notmuch@notmuchmail.org
 help / color / mirror / code / Atom feed
From: Mark Walters <markwalters1009@gmail.com>
To: Jani Nikula <jani@nikula.org>, notmuch@notmuchmail.org
Subject: Re: [PATCH 0/2] cli: Parsing. Add option NOTMUCH_OPT_INT_OR_BOOLEAN
Date: Fri, 09 Mar 2012 05:11:54 +0000	[thread overview]
Message-ID: <87399iicit.fsf@qmul.ac.uk> (raw)
In-Reply-To: <87lina8uqk.fsf@nikula.org>


Hi

On Fri, 09 Mar 2012 02:48:35 +0200, Jani Nikula <jani@nikula.org> wrote:
> On Thu,  8 Mar 2012 22:15:42 +0000, Mark Walters <markwalters1009@gmail.com> wrote:
> > The first patch adds a new command line parsing option
> > NOTMUCH_OPT_INT_OR_BOOLEAN for command line parsing which accepts
> > --verbose=3 and --verbose with the latter setting verbose to 1. It
> > also allows --verbose=0 so (with a little caller support) the user can
> > turn off boolean options.
> > 
> > It also means that extra options can be added to the command line
> > programs in a backwards compatible manner (e.g. if --verbose already
> > exists we could add --verbose=2).
> > 
> > The second patch uses this to make the --entire-thread option to
> > notmuch-show a NOTMUCH_OPT_INT_OR_BOOLEAN. In particular this allows
> > the caller to disable --entire-thread (with --entire-thread=0) when
> > format=json.
> 
> I'm afraid I find both of the patches a bit hacky. The first because
> it's more about optional arguments to options than int-or-bool. The
> second because it's more about detecting whether the user has provided
> an option than int-or-bool.

Yes to both of these (although I don't think of it has hacky). The
second of these is the important consideration.

> For booleans, I think the notmuch style would be to allow --foo=true and
> --foo=false in addition to just --foo (which implies true) so you could
> also disable booleans. I think this would be fairly simple to implement,
> and would require no changes to option parser users.
>
> With --entire-thread the bigger problem is detecting whether the option
> was specified by the user or not. It would be great if the option parser
> could provide this information, but it might take a while to get
> there... In the mean time, I think I would rather see a well commented
> local hack here initializing the notmuch_bool_t params.entire_thread to
> -1, and changing it to TRUE or FALSE if not already done so by
> parse_arguments().

I think these need to be considered together. There are three important
possibilities for a boolean option foo: 1) foo not mentioned 2)
--foo=false and 3) --foo=true (--foo as an alias) but the parser only
has a boolean to store this in. We could overload the boolean as you
suggest (it is really an int so should be safe) but that does seem
hacky. 

That was why I decided to make the parser set an int rather than a
boolean. Since there are not very many OPT_BOOLEANs currently in the
code I think my decision to allow general ints to be returned is a
needless extension, but I do think we wish to allow the 3 states of
UNSET, FALSE and TRUE. Otherwise we limit any future boolean options to
always have the same default regardless of other settings.

If people are happy with setting a notmuch_bool_t to -1 (for unset) then
that is definitely the simplest option. Or if people think that default
boolean options should not depend on other options then we can just add
this hack for --entire-thread.

Best wishes

Mark

  reply	other threads:[~2012-03-09  5:12 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-03-08 22:15 [PATCH 0/2] cli: Parsing. Add option NOTMUCH_OPT_INT_OR_BOOLEAN Mark Walters
2012-03-08 22:15 ` [PATCH 1/2] " Mark Walters
2012-03-08 22:15 ` [PATCH 2/2] cli: make --entire-thread option notmuch-show.c INT_OR_BOOLEAN Mark Walters
2012-03-09  0:48 ` [PATCH 0/2] cli: Parsing. Add option NOTMUCH_OPT_INT_OR_BOOLEAN Jani Nikula
2012-03-09  5:11   ` Mark Walters [this message]
2012-03-09 22:33     ` [PATCH 0/3] argument parsing additions Jani Nikula
2012-03-09 22:33       ` [PATCH 1/3] command-line-arguments: allow true and false keywords for booleans Jani Nikula
2012-03-09 22:33       ` [PATCH 2/3] command-line-arguments: support keyword arguments with default value Jani Nikula
2012-03-09 22:33       ` [PATCH 3/3] cli: allow switching off entire thread mode in notmuch show json format Jani Nikula
2012-03-10 11:23       ` [PATCH 0/3] argument parsing additions Mark Walters
2012-03-11 19:26         ` Jani Nikula

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

  List information: https://notmuchmail.org/

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

  git send-email \
    --in-reply-to=87399iicit.fsf@qmul.ac.uk \
    --to=markwalters1009@gmail.com \
    --cc=jani@nikula.org \
    --cc=notmuch@notmuchmail.org \
    /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://yhetil.org/notmuch.git/

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 read-only IMAP folder(s) and NNTP newsgroup(s).