mirror of
https://github.com/nsnail/spectre.console.git
synced 2025-04-27 13:42:51 +08:00

Allow custom help providers * Version option will show in help even with a default command * Reserve `-v` and `--version` as special Spectre.Console command line arguments (nb. breaking change for Spectre.Console users who have a default command with a settings class that uses either of these switches). * Help writer correctly determines if trailing commands exist and whether to display them as optional or mandatory in the usage statement. * Ability to control the number of indirect commands to display in the help text when the command itself doesn't have any examples of its own. Defaults to 5 (for backward compatibility) but can be set to any integer or zero to disable completely. * Significant increase in unit test coverage for the help writer. * Minor grammatical improvements to website documentation.
48 lines
2.1 KiB
Markdown
48 lines
2.1 KiB
Markdown
Title: Command Help
|
|
Order: 13
|
|
Description: "Console applications built with *Spectre.Console.Cli* include automatically generated help command line help."
|
|
---
|
|
|
|
Console applications built with `Spectre.Console.Cli` include automatically generated help which is displayed when `-h` or `--help` has been specified on the command line.
|
|
|
|
The automatically generated help is derived from the configured commands and their command settings.
|
|
|
|
The help is also context aware and tailored depending on what has been specified on the command line before it. For example,
|
|
|
|
1. When `-h` or `--help` appears immediately after the application name (eg. `application.exe --help`), then the help displayed is a high-level summary of the application, including any command line examples and a listing of all possible commands the user can execute.
|
|
|
|
2. When `-h` or `--help` appears immediately after a command has been specified (eg. `application.exe command --help`), then the help displayed is specific to the command and includes information about command specific switches and any default values.
|
|
|
|
`HelpProvider` is the `Spectre.Console` class responsible for determining context and preparing the help text to write to the console. It is an implementation of the public interface `IHelpProvider`.
|
|
|
|
## Custom help providers
|
|
|
|
Whilst it shouldn't be common place to implement your own help provider, it is however possible.
|
|
|
|
You are able to implement your own `IHelpProvider` and configure a `CommandApp` to use that instead of the Spectre.Console help provider.
|
|
|
|
```csharp
|
|
using Spectre.Console.Cli;
|
|
|
|
namespace Help;
|
|
|
|
public static class Program
|
|
{
|
|
public static int Main(string[] args)
|
|
{
|
|
var app = new CommandApp<DefaultCommand>();
|
|
|
|
app.Configure(config =>
|
|
{
|
|
// Register the custom help provider
|
|
config.SetHelpProvider(new CustomHelpProvider(config.Settings));
|
|
});
|
|
|
|
return app.Run(args);
|
|
}
|
|
}
|
|
```
|
|
|
|
There is a working [example of a custom help provider](https://github.com/spectreconsole/spectre.console/tree/main/examples/Cli/Help) demonstrating this.
|
|
|