6 ms·
Stubborn complaint (and maybe a hot take): I dislike CLIs that try to be overly pretty. I don't receive any tangible benefit as the user from the "fancy" (their
by jonpalmisc 1y ago
Stubborn complaint (and maybe a hot take): I dislike CLIs that try to be overly pretty. I don't receive any tangible benefit as the user from the "fancy" (their words) help output. I'd much rather simple plain text output that looks like all the other tools I already use.
- assbuttbuttass 1y agoagreed, plain text is more scriptable too. Let me pipe it into awk!
- caarlos0 1y agoIf you do it right, you can output plain text when stdout is not a tty - which is something fang does, fwiw :)
- arp242 1y agoIt still tries to put the terminal in raw mode or something. "cmd | less" doesn't work and requires "stty sane". I didn't investigate, but FYI.
- kitd 1y agoA lot of the fancy CLIs I use have a `--json` option that gives the user the chance to pipe output to eg jq and process it there. I find that a good alternative to running stuff through cut, sed or awk before processing.
- arp242 1y agoAlignment (and maybe bold text for some things) is all you need in >95% of cases, IMHO. One of the downsides of a lot of these tools is that's exactly what they don't do well: many things don't align or wrap nicely. For example, here's a comparison of this fang library vs one where I just raw-dogged the usage text: https://imgur.com/a/QWh9TLD https://imgur.com/a/QWh9TLD – the nice alignment does a lot more than colours. Especially for larger programs with a bunch of flags it can be such a pain. For example from an otherwise quite nice tool: https://imgur.com/a/RELL9Gk https://imgur.com/a/RELL9Gk – you just completely lose any "overview". I did spend some time on some better tooling to improve all of this, because manually writing these isn't super-fun either, but not so straight-forward to do well (or at least: not in a way that I like).
- quotemstr 1y ago> One of the downsides of a lot of these tools is that's exactly what they don't do well: many things don't align or wrap nicely. Bling is easy. Unsexy usability details are hard. Z$ time ./example/run You ran the root command. Now try --help. ./example/run 0.13s user 0.27s system 177% cpu 0.228 total Why would an example program take 228ms? Z$ ./example/run --name='abc def' Unknown command "def" for "example". Try --help for usage. Huh? 'abc def' is one shell word. --name=abc works fine. Z$ ./example/run --name '' ERROR Flag needs an argument: --name. Try --help for usage. But I did give it an argument: the empty string. And why is the output indented two columns from the left margin anyway? Z$ ./example/run '' You ran the root command. Now try --help. Z$ ./example/run 'x' ERROR Unknown command "x" for "example". Try --help for usage. Should have produced an error using '' for the subcommand name. Z$ ./example/run sub "multi-word quoted string" --flag "another quoted string" Ran the sub command! Z$ ./example/run --help A little example program! It doesn’t really do anything, but that’s the point.™ USAGE example [command] [args] [--flags] EXAMPLES # Run it: example # Run it with some arguments: example --name=Carlos -a -s Becker -a # Run a subcommand with an argument: example sub --async --foo=xyz --async arguments # Run with a quoted string: example sub "quoted string" # Mix and match: example sub "multi-word quoted string" --flag "another quoted string" COMMANDS help [command] Help about any command sub [command] [args] [--flags] An example subcommand throw Throws an error FLAGS -a --async Run async -h --help Help for example --name Your name (jane) -s --surname Your surname (doe) -v --version Version for example Z$ ./example/run sub "multi-word quoted string" --flag "another quoted string" zsh: command not found: example sub multi-word quoted string --flag another quoted string Huh? Why did the command work when I typed it myself but not when I pasted from the help output? Oh. Because the help output is using nbsp, not regular spaces. Anyway, command line interfaces have a surprising number of hairy corner cases. I'd rather have boring monochrome that gets them right than an all-colorful theme auto-shell-completion-generating system that doesn't.
- anitil 1y agoI like colour in a tool like 'bat' or 'jless' where it helps me visually scan, but other than that I'd agree with you
- quotemstr 1y ago> overly pretty "bling" is the word you're looking for. It's just a fashion. Fashion is famously cyclic, and we're just in a high-ornamentation part of the cycle. Eventually, restraint will become fashionable again.
- guappa 1y agoAnd they often don't check the terminal so if you pipe them or run on a serial terminal they break horribly.
- joshka 1y agoAs a counter argument, not putting color in help usage text leaves a large amount on the table for readability. The reasonable compromise for those that disagree with this is to set the NO_COLOR environment variable. This should be respected by most things which do use color (and if it's not, that's a bug).