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}} [ ...]{{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}} [ ...]{{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}} [ ...]{{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}} [ ...]{{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}} [ ...]{{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 `