A zig library for composing declarative command-line interfaces. Heavily inspired by click for Python.
The alarm rings, and expletives spill from my mouth—instinctively, before any neuron has a chance to fire. You’d think this would get easier, having done it at least 12000 times, but I guess it just goes to show that practice does not necessarily converge on perfection, no matter what infinite limit t approaches. Eyes clamped shut against the encroaching underglow spilling from the curtains, I stretch my arms straight out from my sides and proceed to lose my balance, flying horizontally off of the mattress. An attempt at attitude control fails vigorously and I begin cartwheeling through open space, asserting a lopsided trajectory that intersects with the roof of the house. Passing through it unencumbered, I careen skyward and watch the ground recede into the distance, as the features of the landscape shrink and pop out of existence.
Requires Zig 0.13.x
. May work with 0.12.x
.
Warning
|
NOCLIP is usable but not currently mature or well-tested. Unfinished features and bugs likely exist. |
-
highly configurable short/long option and argument specification
-
named options can be associated with an environment variable
-
named flags, which take no value and can be biased
true
orfalse
-
multiple specification options, which can be provided many times to the CLI
-
overridable built-in conversion functions for standard types
-
required options that must be specified by the user
-
default values for options
-
-
arbitrarily nestable subcommands for building sophisticated tools
-
parser that supports many conventional CLI behaviors
-
congealed short flags (e.g.
-abc
is the same as-a -b -c
) -
--
to force early end of flag parsing -
both
--long value
and--long=value
styles are supported
-
-
option values are converted into rich native types using conversion callback functions
-
integers
-
basic tuple values
-
strings
-
enumerations as named choice sets
-
more to come
-
-
automatic help text generation and formatting
-
CLI specification and parser are built at compile time
zig build demo
for a demo. Otherwise just copy the file or use a submodule or
something.
Usage: noclip-demo [options...] <arg> <subcommand ...> The definitive noclip demonstration utility This command demonstrates the functionality of the noclip library. cool! Arguments: arg This is an argument that doesn't really do anything, but it's very important. Options: -t, --test <int> <int> multi-value test option (env: NOCLIP_TEST) -c, --choice <choice> enum choice option (env: NOCLIP_CHOICE) (default: demo.Choice.second) -d, --default <uint> default value integer option (env: NOCLIP_DEFAULT) (default: 100) -m, --multi <u8> multiple specification test option -f, --flag / -F, --no-flag boolean flag (env: NOCLIP_FLAG) -M multiple specification test flag Environment variables: NOCLIP_ENVIRON environment variable only option Subcommands: verb Perform some sort of work