Skip to content

Design better boolean arguments #14

Open
@matejak

Description

@matejak

Currently, the ARG_OPTIONAL_BOOL does not behave optimally (see #2 ).
It seems to be a good idea to have more macros for switch-on, switch-off and both (as the current ARG_OPTIONAL_BOOL somehow attempts to).
Currently, ARG_OPTIONAL_BOOL assumes that one wants to switch something on (using long and short option) and autogenerating long option to switch something off. This falls on its head when one wants to switch something off.
Proposed behavior:

  • ARG_OPTIONAL_BOOL will remain, it will autodetect whether it is in a switch-on or switch-off mode by examining the default (or the option whether it begins withno-..., I'm not yet decided). It will use the provided long and short options for the detected mode, but it will also generate a long option for the opposite mode.
    • Occurence of ARG_OPTIONAL_BOOL(no-video, v) would make the script accept --no-video, -v, that would set _arg_video (which would be on by default) to off, and --video, that would set _arg_video to on, overriding possible previous occurence of -v or --no-video.
    • Conversely, occurence of ARG_OPTIONAL_BOOL(video, v) would make the script accept --video, -v, that would set _arg_video (which would be off by default) to on, and --no-video, that would set _arg_video to off, overriding possible previous occurence of -v or --video.

New macros would be introduced:

  • ARG_OPTIONAL_SWITCH_ON will be introduced. It will accept long and short option (and no default since off will be assumed as default).
    • Occurence of ARG_OPTIONAL_SWITCH_ON(video, v) would make the script accept --video, -v, that would set _arg_video (which would be off by default) to on.
  • ARG_OPTIONAL_SWITCH_OFF will be introduced. It will accept long and short option (and no default since on will be assumed).
    • Occurence of ARG_OPTIONAL_SWITCH_OFF(no-video, v) would make the script accept --no-video, -v, that would set _arg_video (which would be on by default) to off.
      Everybody's comments are highly appreciated!

Metadata

Metadata

Assignees

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions