Help output now wraps to the real terminal width instead of a fixed 80 columns, a spec can put ASCII art on its root help page, and default_subcommand_on_empty routes a bare invocation to the default subcommand.
Added
-
(parse)
default_subcommand_on_emptyselects the default subcommand on an empty invocation (#1458, @zeitlinger). Until nowdefault_subcommandonly fired on an unmatched word, soexwith no arguments stayed on the root. With this opt-in (Rust:#[usage(default_subcommand = "run", default_subcommand_on_empty)]), a bareexor one carrying only parent/global flags such asex --verboseparses asex run, with child env values and defaults bound afterwards and the child validated exactly as if it had been named. Explicit commands, positional values, a syntactic--,--help,--version, and parse errors keep their normal precedence; root requirements still apply unlesssubcommand_negates_reqsis set. It requiresdefault_subcommand(usage lintreportsinvalid-default-subcommand-on-emptyotherwise) and is implemented in the Rust library,usage-argv, generated Go parsers, and the Go runtime.default_subcommand "run" default_subcommand_on_empty #true cmd "run" { arg "[path]" }
-
(spec)
logoputs art on the root help page (#1455, @jdx). The optionalstyleproperty takes the same+-combined vocabulary ashelp_template(for example"cyan+bold") and is validated when the spec is parsed, or at compile time for#[usage(logo = include_str!("logo.txt"), logo_style = "cyan+bold")]. Placement depends on terminal width: beside the page when at least 50 columns remain after the art and a two-column gutter, above it as a banner when they do not, and omitted entirely when the terminal is narrower than the art. The logo appears only on the root's-h/--help, never on subcommand pages or in generated Markdown, man pages, or SDKs, and plain (non-TTY) output strips its escapes.usage --helpitself now shows the project's logo. The Rust library,usage-argv, and Go renderers share one placement rule.logo #""" /\ / \ /____\ """# style="cyan+bold"
Fixed
- (help) Help is laid out at the terminal's actual width (#1454, @jdx). Width came only from
COLUMNS, which almost no process has set, so nearly every CLI built on usage wrapped at 80 columns regardless of the window. The renderers now probe the terminal (TIOCGWINSZon unix, the console buffer on Windows) whenCOLUMNSis unset; output to a pipe or file still uses 80, and a declaredterm_width/max_term_widthstill wins. The probe is exposed asusage_argv::tty::columns(). The Go renderer still uses a fixed 80 columns. - (help)
Cli::render_helpnow colours its output by the same rule asparse(): ANSI on a terminal, plain elsewhere,NO_COLORrespected (#1454). CLIs that handledusage::Error::Helpthemselves were getting a monochrome page. Callers that keep the text rather than printing it can use the newCli::render_help_styled(cmd, long, Style::PLAIN)to guarantee escape-free output; see Breaking Changes. - (help) Examples are separated by a blank line on both
-hand--help, in all three renderers, instead of running together as a single block (#1454). - (cli) The published
usage-clicrate now includessrc/cli/logo.txt, which the initial 6.11.0 publish was missing and failed on (#1459, @jdx).
Breaking Changes
Cli::render_help(the derive-generated method) may now return ANSI escape sequences when stdout is a terminal. Code that writes its result to a file, compares it in a snapshot, or embeds it in a document should switch toCli::render_help_styled(cmd, long, Style::PLAIN); settingNO_COLORalso forces plain output with no code change.usage_argv::help::renderis unchanged and still plain.- Help pages rendered to a terminal now wrap at the detected width rather than 80 columns. Redirected output and specs that declare
term_widthare unaffected.
Full Changelog: v6.10.0...v6.11.0
💚 Sponsor usage
usage is built and maintained by @jdx, an open source developer at entire.io, the title sponsor of his open source work.
If usage powers CLI specs, docs, or completions for a tool you maintain or use, please consider becoming an individual or company sponsor. Your support funds ongoing development and helps keep usage fast, free, and independent.