Open l3nz opened 5 years ago
A related requirement would be the possibility of specifying some, but not all, options as interactive, e.g. password options and the like. This is common in database command line clients where most options are specified on the command line, but the password is prompted for interactively. Thus, it would make sense to separate between masked (.readPassword System/console)
and unmasked (read-line)
input.
Edit: Thank you for putting together this very useful library. It is really appreciated!
I was thinking of making some options "completable", that is, if missing, they would be asked for interactively. What do you think?
That sounds like it would satisfy my requirement quite nicely! So long as it only tries asking for them if a tty is present. Otherwise it would cause weird behavior when running the app in daemon mode.
I just about mucked about implementing support for interactive options in a fork (ps not quite complete or tested): https://github.com/snorremd/cli-matic/commit/4293ea2684e433b880fc38a7060d5037159408d5
Line 163 in the parse-cmds-with-defaults
function tripped me up as I can't understand how it would return anything other than the full list of environment options though.
The set-keys-in
value is a clojure map with keywords -> option maps.
Whereas each map in the env-options
vector is a cli-matic option map.
So when looking up the keyword in the cli-matic option map, it would return nil a falsy value, and then complement it returning true. E.g.:
(filter (complement #{:foo :bar}) [{:option "foo"} {:option "bar"}])
=> ({:option "foo"} {:option "bar"})
So that might be a bug?
Thanks again.
If we have:
Why shouldn't we have: