cmdr
is a POSIX/GNU style, command-line UI (CLI) Go library.
It is a getopt-like parser of command-line options,
be compatible with the getopt_long
command line UI, which is an extension of the syntax recommended
by POSIX.
There are couples of enhancements beyond the standard
library flag
.
There is a full Options Store
(configurations) for your
hierarchy configuration data too.
To review the image frames, go surfing at #1 (comment)
Youtube - 李宗盛2013最新單曲 山丘 官方完整版音檔 / Jonathan Lee - Hill CHT + ENU
The better choice is importing with go-modules enabled:
import "github.com/hedzr/cmdr"
See our extras:
- cmdr-docs: documentations (Working)
- cmdr-addons: a new daemon plugin
dex
for linux/macOS/windows. - cmdr-examples: collects the samples for cmdr
-
docs (WIP):
- english documentation not completed yet
- documentation at: https://hedzr.github.io/cmdr-docs/
-
v1.7.21
- new feature: the builtin pluggable extensions (see also: cmdr-examples/flags )
-
v1.7.11
- update: new log.Logger instance in log.GetLogger
- fixed: ReadPassword in windows
-
v1.7.10
- fixed: too much empty lines in help screen
-
v1.7.9
- right align multi-lines desc string in help screen
- added new envvars: HELP, NO_COLOR (
HELP=1 app some sub cmd
==app some sub cmd --help
)
-
v1.7.8
- tabStop in help screen will be autosize now
- deprecated at next minor release (v1.8+):
WithHelpTabStop()
- deprecated at next minor release (v1.8+): plugins/daemon
- BREAK: some two methods in the interface
Painter
has been changed.
-
v1.7.7
- update deps to improve logging supports
- deprecated:
WithLogex()
, as its replacement,WithLogx()
has a better generic logging interface (hedzr/log.Logger)
-
v1.7.6:
- using hedzr/log and remove other logging dependencies.
- added
WithLogx(logger)
: integrating with your logger (vialog.Logger
interface)
-
v1.7.5:
- move some helper function to
tool
sub-package
- move some helper function to
-
v1.7.3
- update dependencies to new logger packages
-
v1.7.2
- update dependencies to new logger packages
-
v1.7.1
- update dependencies to new logger packages
-
v1.7.0
- adds
AddGlobalPreAction(pre)
,AddGlobalPostAction(post)
- using logex v1.2.0 and new logging switching framework
- added more logging output in trace mode enabled see also: GetTraceMode(), GetDebugMode(), InDebugging(), and logex.GetTraceMode().
- more...
- adds
-
v1.6.51
- deprecated: daemon plugin
- implements the required flag logic
-
v1.6.50
- fixed: correct the error printing while wrong args got
- fixed: valid-args - ensure the
found
flag as a value matched - fixed: withIgnoredMessage - format with liveArgs
- cmd.NewFlagV was deprecated since v1.6.50, we recommend the new form:
cmdr.NewBool(false).Titles(...)...AttachTo(ownerCmd)
- better
Titles(long, ...)
andName(name)
Now you can compose the order prefix easily: with.Titles("001.start")
, we can recognize the prefix and move it toName
field automatically.
We will remove the deprecated api at next minor version (v1.7)
-
v1.6.49
- added: Name() for command & flag defining
-
v1.6.48
- code reviewed
- maintained
- unnecessary deps removed.
- small fixes
-
v1.6.47
- fixed/improved: reset slice value if an empty slice was been setting
- improved: add logging output in delve debugging mode
- fixed: matching the longest short flag for combining flags
- BROKEN API: the param
defaultValue
is optional now: cmdr.NewBool(), cmdr.NewInt(), ... - added
cmdr.NewUintSlice()
-
v1.6.45
- fixed/improved:
ToBool(value, defval...) bool
- fixed: flag.OnSet trigger for envvar hit
- fixed/improved: friendly error msg
- fixed/improved:
-
v1.6.43
- fixed/improved: the matching algorithm and remained args
-
v1.6.41
WithPagerEnabled()
: enables OS pager for help screen output
-
v1.6.39
- BROKEN API: the params order exchanged, their new prototypes are
OptFlag.Titles(long, short, aliases)
andOptCmd.Titles(long, short, alases)
. - improved help screen
- bug fixed:
- the value of remained args could be wrong sometimes
- stop flag split in parsing
- some coverage test errors
- BROKEN API: the params order exchanged, their new prototypes are
-
v1.6.36
ToggleGroup
:- assume the empty Group field with ToggleGroup
- set "command-path.toggleGroupName" to the hit flag full name as flipping a toggle-group.
For example, supposed a toggle-group 'KK' under 'server' command with 3 choices/flags: apple, banana, orange. For the input '--orange', these entries will be set in option store:
server.orange
<== true;
server.KK
<== 'orange';
- fixed:
GetStringSliceXxx()
return the value array without expand the envvar. - improved: some supports for plan9
- fixed: can't expand envvar correectly at earlier initializing.
-
For more information to refer to CHANGELOG
Old README.md: README.old.md
-
short
simple codes with structured data style. -
demo
normal demo with external config files. -
wget-demo
partial-covered for GNUwget
. -
fluent
demostrates how to define your command-ui with the fluent api style. -
a demo to show you how to migrate from go
flag
smoothly. -
cmdr-http2
http2 server with daemon supports, graceful shutdown -
awesome-tool
awesome-tool
is a cli app that fetch the repo stars and generate a markdown summary, accordingly with most of awesome-xxx list in github (such as awesome-go).
See Also the examples index: Examples.md (zh-cn TODO: Examples.zh-cn.md)
- https://github.com/hedzr/consul-tags
- https://github.com/hedzr/ini-op
- https://github.com/hedzr/awesome-tool
- austr
- Issue me to adding yours
Feel free to issue me bug reports and fixes. Many thanks to all contributors.
JODL (JetBrains OpenSource Development License) is good:
MIT