pacak / bpaf

Command line parser with applicative interface
Apache License 2.0
340 stars 17 forks source link

Custom Help Section for group with exclusively hidden subcommands #277

Open ysndr opened 1 year ago

ysndr commented 1 year ago

First off, I'm trying to create a Group with a compact listing of subcommands, e.g..

Usage: flox [[-v]... | -q] [--debug]... [COMMAND ...]

Some Group
  search         search packages in subscribed channels

Additional Commands. Use `prog COMMAND --help' for more info
  build, upgrade, import, export, config, subscribe, unsubscribe, 
  channels, history

Since changing the layout of subcommands in the doc does not seem to be possible, I ended up with this wonky solution, that adds a non hidden subcommand "" to force showing the group:

/// Additional Commands. Use `prog COMMAND --help' for more info
///
/// build, upgrade, import, export, config, subscribe, unsubscribe, 
/// channels, history
#[derive(Bpaf, Clone)]
enum AdditionalCommands {
    Documentation(
        #[bpaf(external(AdditionalCommands::documentation), command("")] AdditionalCommandsDocumentation,
    ),
    Push(#[bpaf(external(environment::import), hide)] Import),
    Pull(#[bpaf(external(environment::export), hide)] Export),
}

Is there a way to achieve that anyway else?

pacak commented 1 year ago

So the goal is to create an indented block of text ("Additional commands ...") that shows up as "COMMAND" in generated usage line but without actual commands listed below? I'd put this text into "header" section of OptionParser and use with_usage to add COMMAND into usage line.

ysndr commented 1 year ago

The actual goal is to list all "additional" commands. We want to show those commands exist without taking too much vertical space.

The indented bit was a copy paste error, it should just be a group header like Some Group

I can't seem to manipulate the listing of subcommands so i hid all subcommands. However a group disappears completely if all subcommands are hidden, this the weird hack i have now, with a "" command that I kinda have to handle somehow.

The group is supposed to come last, which makes utilizing the command header kinda not viable either..

pacak commented 1 year ago

I'll see what I can do

The group is supposed to come last, which makes utilizing the command header kinda not viable either..

There's also footer :)

ysndr commented 1 year ago

There's also footer :)

That's past the option listing 🙃