263 lines
7.2 KiB
Go
263 lines
7.2 KiB
Go
|
package kingpin
|
||
|
|
||
|
// Default usage template.
|
||
|
var DefaultUsageTemplate = `{{define "FormatCommand" -}}
|
||
|
{{if .FlagSummary}} {{.FlagSummary}}{{end -}}
|
||
|
{{range .Args}}{{if not .Hidden}} {{if not .Required}}[{{end}}{{if .PlaceHolder}}{{.PlaceHolder}}{{else}}<{{.Name}}>{{end}}{{if .Value|IsCumulative}}...{{end}}{{if not .Required}}]{{end}}{{end}}{{end -}}
|
||
|
{{end -}}
|
||
|
|
||
|
{{define "FormatCommands" -}}
|
||
|
{{range .FlattenedCommands -}}
|
||
|
{{if not .Hidden -}}
|
||
|
{{.FullCommand}}{{if .Default}}*{{end}}{{template "FormatCommand" .}}
|
||
|
{{.Help|Wrap 4}}
|
||
|
{{end -}}
|
||
|
{{end -}}
|
||
|
{{end -}}
|
||
|
|
||
|
{{define "FormatUsage" -}}
|
||
|
{{template "FormatCommand" .}}{{if .Commands}} <command> [<args> ...]{{end}}
|
||
|
{{if .Help}}
|
||
|
{{.Help|Wrap 0 -}}
|
||
|
{{end -}}
|
||
|
|
||
|
{{end -}}
|
||
|
|
||
|
{{if .Context.SelectedCommand -}}
|
||
|
usage: {{.App.Name}} {{.Context.SelectedCommand}}{{template "FormatUsage" .Context.SelectedCommand}}
|
||
|
{{ else -}}
|
||
|
usage: {{.App.Name}}{{template "FormatUsage" .App}}
|
||
|
{{end}}
|
||
|
{{if .Context.Flags -}}
|
||
|
Flags:
|
||
|
{{.Context.Flags|FlagsToTwoColumns|FormatTwoColumns}}
|
||
|
{{end -}}
|
||
|
{{if .Context.Args -}}
|
||
|
Args:
|
||
|
{{.Context.Args|ArgsToTwoColumns|FormatTwoColumns}}
|
||
|
{{end -}}
|
||
|
{{if .Context.SelectedCommand -}}
|
||
|
{{if len .Context.SelectedCommand.Commands -}}
|
||
|
Subcommands:
|
||
|
{{template "FormatCommands" .Context.SelectedCommand}}
|
||
|
{{end -}}
|
||
|
{{else if .App.Commands -}}
|
||
|
Commands:
|
||
|
{{template "FormatCommands" .App}}
|
||
|
{{end -}}
|
||
|
`
|
||
|
|
||
|
// Usage template where command's optional flags are listed separately
|
||
|
var SeparateOptionalFlagsUsageTemplate = `{{define "FormatCommand" -}}
|
||
|
{{if .FlagSummary}} {{.FlagSummary}}{{end -}}
|
||
|
{{range .Args}}{{if not .Hidden}} {{if not .Required}}[{{end}}{{if .PlaceHolder}}{{.PlaceHolder}}{{else}}<{{.Name}}>{{end}}{{if .Value|IsCumulative}}...{{end}}{{if not .Required}}]{{end}}{{end}}{{end -}}
|
||
|
{{end -}}
|
||
|
|
||
|
{{define "FormatCommands" -}}
|
||
|
{{range .FlattenedCommands -}}
|
||
|
{{if not .Hidden -}}
|
||
|
{{.FullCommand}}{{if .Default}}*{{end}}{{template "FormatCommand" .}}
|
||
|
{{.Help|Wrap 4}}
|
||
|
{{end -}}
|
||
|
{{end -}}
|
||
|
{{end -}}
|
||
|
|
||
|
{{define "FormatUsage" -}}
|
||
|
{{template "FormatCommand" .}}{{if .Commands}} <command> [<args> ...]{{end}}
|
||
|
{{if .Help}}
|
||
|
{{.Help|Wrap 0 -}}
|
||
|
{{end -}}
|
||
|
|
||
|
{{end -}}
|
||
|
{{if .Context.SelectedCommand -}}
|
||
|
usage: {{.App.Name}} {{.Context.SelectedCommand}}{{template "FormatUsage" .Context.SelectedCommand}}
|
||
|
{{else -}}
|
||
|
usage: {{.App.Name}}{{template "FormatUsage" .App}}
|
||
|
{{end -}}
|
||
|
|
||
|
{{if .Context.Flags|RequiredFlags -}}
|
||
|
Required flags:
|
||
|
{{.Context.Flags|RequiredFlags|FlagsToTwoColumns|FormatTwoColumns}}
|
||
|
{{end -}}
|
||
|
{{if .Context.Flags|OptionalFlags -}}
|
||
|
Optional flags:
|
||
|
{{.Context.Flags|OptionalFlags|FlagsToTwoColumns|FormatTwoColumns}}
|
||
|
{{end -}}
|
||
|
{{if .Context.Args -}}
|
||
|
Args:
|
||
|
{{.Context.Args|ArgsToTwoColumns|FormatTwoColumns}}
|
||
|
{{end -}}
|
||
|
{{if .Context.SelectedCommand -}}
|
||
|
Subcommands:
|
||
|
{{if .Context.SelectedCommand.Commands -}}
|
||
|
{{template "FormatCommands" .Context.SelectedCommand}}
|
||
|
{{end -}}
|
||
|
{{else if .App.Commands -}}
|
||
|
Commands:
|
||
|
{{template "FormatCommands" .App}}
|
||
|
{{end -}}
|
||
|
`
|
||
|
|
||
|
// Usage template with compactly formatted commands.
|
||
|
var CompactUsageTemplate = `{{define "FormatCommand" -}}
|
||
|
{{if .FlagSummary}} {{.FlagSummary}}{{end -}}
|
||
|
{{range .Args}}{{if not .Hidden}} {{if not .Required}}[{{end}}{{if .PlaceHolder}}{{.PlaceHolder}}{{else}}<{{.Name}}>{{end}}{{if .Value|IsCumulative}}...{{end}}{{if not .Required}}]{{end}}{{end}}{{end -}}
|
||
|
{{end -}}
|
||
|
|
||
|
{{define "FormatCommandList" -}}
|
||
|
{{range . -}}
|
||
|
{{if not .Hidden -}}
|
||
|
{{.Depth|Indent}}{{.Name}}{{if .Default}}*{{end}}{{template "FormatCommand" .}}
|
||
|
{{end -}}
|
||
|
{{template "FormatCommandList" .Commands -}}
|
||
|
{{end -}}
|
||
|
{{end -}}
|
||
|
|
||
|
{{define "FormatUsage" -}}
|
||
|
{{template "FormatCommand" .}}{{if .Commands}} <command> [<args> ...]{{end}}
|
||
|
{{if .Help}}
|
||
|
{{.Help|Wrap 0 -}}
|
||
|
{{end -}}
|
||
|
|
||
|
{{end -}}
|
||
|
|
||
|
{{if .Context.SelectedCommand -}}
|
||
|
usage: {{.App.Name}} {{.Context.SelectedCommand}}{{template "FormatUsage" .Context.SelectedCommand}}
|
||
|
{{else -}}
|
||
|
usage: {{.App.Name}}{{template "FormatUsage" .App}}
|
||
|
{{end -}}
|
||
|
{{if .Context.Flags -}}
|
||
|
Flags:
|
||
|
{{.Context.Flags|FlagsToTwoColumns|FormatTwoColumns}}
|
||
|
{{end -}}
|
||
|
{{if .Context.Args -}}
|
||
|
Args:
|
||
|
{{.Context.Args|ArgsToTwoColumns|FormatTwoColumns}}
|
||
|
{{end -}}
|
||
|
{{if .Context.SelectedCommand -}}
|
||
|
{{if .Context.SelectedCommand.Commands -}}
|
||
|
Commands:
|
||
|
{{.Context.SelectedCommand}}
|
||
|
{{template "FormatCommandList" .Context.SelectedCommand.Commands}}
|
||
|
{{end -}}
|
||
|
{{else if .App.Commands -}}
|
||
|
Commands:
|
||
|
{{template "FormatCommandList" .App.Commands}}
|
||
|
{{end -}}
|
||
|
`
|
||
|
|
||
|
var ManPageTemplate = `{{define "FormatFlags" -}}
|
||
|
{{range .Flags -}}
|
||
|
{{if not .Hidden -}}
|
||
|
.TP
|
||
|
\fB{{if .Short}}-{{.Short|Char}}, {{end}}--{{.Name}}{{if not .IsBoolFlag}}={{.FormatPlaceHolder}}{{end -}}\fR
|
||
|
{{.Help}}
|
||
|
{{end -}}
|
||
|
{{end -}}
|
||
|
{{end -}}
|
||
|
|
||
|
{{define "FormatCommand" -}}
|
||
|
{{if .FlagSummary}} {{.FlagSummary}}{{end -}}
|
||
|
{{range .Args}}{{if not .Hidden}} {{if not .Required}}[{{end}}{{if .PlaceHolder}}{{.PlaceHolder}}{{else}}<{{.Name}}>{{end}}{{if .Value|IsCumulative}}...{{end}}{{if not .Required}}]{{end}}{{end}}{{end -}}
|
||
|
{{end -}}
|
||
|
|
||
|
{{define "FormatCommands" -}}
|
||
|
{{range .FlattenedCommands -}}
|
||
|
{{if not .Hidden -}}
|
||
|
.SS
|
||
|
\fB{{.FullCommand}}{{template "FormatCommand" . -}}\fR
|
||
|
.PP
|
||
|
{{.Help}}
|
||
|
{{template "FormatFlags" . -}}
|
||
|
{{end -}}
|
||
|
{{end -}}
|
||
|
{{end -}}
|
||
|
|
||
|
{{define "FormatUsage" -}}
|
||
|
{{template "FormatCommand" .}}{{if .Commands}} <command> [<args> ...]{{end -}}\fR
|
||
|
{{end -}}
|
||
|
|
||
|
.TH {{.App.Name}} 1 {{.App.Version}} "{{.App.Author}}"
|
||
|
.SH "NAME"
|
||
|
{{.App.Name}}
|
||
|
.SH "SYNOPSIS"
|
||
|
.TP
|
||
|
\fB{{.App.Name}}{{template "FormatUsage" .App}}
|
||
|
.SH "DESCRIPTION"
|
||
|
{{.App.Help}}
|
||
|
.SH "OPTIONS"
|
||
|
{{template "FormatFlags" .App -}}
|
||
|
{{if .App.Commands -}}
|
||
|
.SH "COMMANDS"
|
||
|
{{template "FormatCommands" .App -}}
|
||
|
{{end -}}
|
||
|
`
|
||
|
|
||
|
// Default usage template.
|
||
|
var LongHelpTemplate = `{{define "FormatCommand" -}}
|
||
|
{{if .FlagSummary}} {{.FlagSummary}}{{end -}}
|
||
|
{{range .Args}}{{if not .Hidden}} {{if not .Required}}[{{end}}{{if .PlaceHolder}}{{.PlaceHolder}}{{else}}<{{.Name}}>{{end}}{{if .Value|IsCumulative}}...{{end}}{{if not .Required}}]{{end}}{{end}}{{end -}}
|
||
|
{{end -}}
|
||
|
|
||
|
{{define "FormatCommands" -}}
|
||
|
{{range .FlattenedCommands -}}
|
||
|
{{if not .Hidden -}}
|
||
|
{{.FullCommand}}{{template "FormatCommand" .}}
|
||
|
{{.Help|Wrap 4}}
|
||
|
{{with .Flags|FlagsToTwoColumns}}{{FormatTwoColumnsWithIndent . 4 2}}{{end}}
|
||
|
{{end -}}
|
||
|
{{end -}}
|
||
|
{{end -}}
|
||
|
|
||
|
{{define "FormatUsage" -}}
|
||
|
{{template "FormatCommand" .}}{{if .Commands}} <command> [<args> ...]{{end}}
|
||
|
{{if .Help}}
|
||
|
{{.Help|Wrap 0 -}}
|
||
|
{{end -}}
|
||
|
|
||
|
{{end -}}
|
||
|
|
||
|
usage: {{.App.Name}}{{template "FormatUsage" .App}}
|
||
|
{{if .Context.Flags -}}
|
||
|
Flags:
|
||
|
{{.Context.Flags|FlagsToTwoColumns|FormatTwoColumns}}
|
||
|
{{end -}}
|
||
|
{{if .Context.Args -}}
|
||
|
Args:
|
||
|
{{.Context.Args|ArgsToTwoColumns|FormatTwoColumns}}
|
||
|
{{end -}}
|
||
|
{{if .App.Commands -}}
|
||
|
Commands:
|
||
|
{{template "FormatCommands" .App}}
|
||
|
{{end -}}
|
||
|
`
|
||
|
|
||
|
var BashCompletionTemplate = `
|
||
|
_{{.App.Name}}_bash_autocomplete() {
|
||
|
local cur prev opts base
|
||
|
COMPREPLY=()
|
||
|
cur="${COMP_WORDS[COMP_CWORD]}"
|
||
|
opts=$( ${COMP_WORDS[0]} --completion-bash "${COMP_WORDS[@]:1:$COMP_CWORD}" )
|
||
|
COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
|
||
|
return 0
|
||
|
}
|
||
|
complete -F _{{.App.Name}}_bash_autocomplete -o default {{.App.Name}}
|
||
|
|
||
|
`
|
||
|
|
||
|
var ZshCompletionTemplate = `#compdef {{.App.Name}}
|
||
|
|
||
|
_{{.App.Name}}() {
|
||
|
local matches=($(${words[1]} --completion-bash "${(@)words[1,$CURRENT]}"))
|
||
|
compadd -a matches
|
||
|
|
||
|
if [[ $compstate[nmatches] -eq 0 && $words[$CURRENT] != -* ]]; then
|
||
|
_files
|
||
|
fi
|
||
|
}
|
||
|
|
||
|
if [[ "$(basename -- ${(%):-%x})" != "_{{.App.Name}}" ]]; then
|
||
|
compdef _{{.App.Name}} {{.App.Name}}
|
||
|
fi
|
||
|
`
|