From 41dde0adab111833d417ca56d51f13978d522d6c Mon Sep 17 00:00:00 2001 From: Jeremy Saenz Date: Sat, 20 Jul 2013 10:46:47 -0700 Subject: [PATCH] JMS #5: Displaying help for subcommands. Better looking help code --- help.go | 74 +++++++++++++++++++++++++++++++++++++++++---------------- 1 file changed, 54 insertions(+), 20 deletions(-) diff --git a/help.go b/help.go index e8ccb05..eef0d24 100644 --- a/help.go +++ b/help.go @@ -7,22 +7,10 @@ import ( "text/template" ) -var helpCommand = Command{ - Name: "help", - ShortName: "h", - Usage: "Shows a list of commands or help for one command", - Action: func(c *Context) { - args := c.Args() - if len(args) > 0 { - showCommandHelp(c) - } else { - showAppHelp(c) - } - }, -} - -func showAppHelp(c *Context) { - helpTemplate := `NAME: +// The text template for the Default help topic. +// cli.go uses text/template to render templates. You can +// render custom help text by setting this variable. +var AppHelpTemplate = `NAME: {{.Name}} - {{.Usage}} USAGE: @@ -39,13 +27,59 @@ GLOBAL OPTIONS: {{end}} ` - w := tabwriter.NewWriter(os.Stdout, 0, 8, 1, '\t', 0) - t := template.Must(template.New("help").Parse(helpTemplate)) - t.Execute(w, c.App) - w.Flush() +// The text template for the command help topic. +// cli.go uses text/template to render templates. You can +// render custom help text by setting this variable. +var CommandHelpTemplate = `NAME: + {{.Name}} - {{.Usage}} + +USAGE: + command {{.Name}} [command options] [arguments...] + +DESCRIPTION: + {{.Description}} + +OPTIONS: + {{range .Flags}}{{.}} + {{end}} +` + +var helpCommand = Command{ + Name: "help", + ShortName: "h", + Usage: "Shows a list of commands or help for one command", + Action: func(c *Context) { + args := c.Args() + if len(args) > 0 { + showCommandHelp(c) + } else { + showAppHelp(c) + } + }, +} + +func showAppHelp(c *Context) { + printHelp(AppHelpTemplate, c.App) } func showCommandHelp(c *Context) { + name := c.Args()[0] + for _, c := range c.App.Commands { + if c.HasName(name) { + printHelp(CommandHelpTemplate, c) + return + } + } + + fmt.Printf("No help topic for '%v'\n", name) + os.Exit(1) +} + +func printHelp(templ string, data interface{}) { + w := tabwriter.NewWriter(os.Stdout, 0, 8, 1, '\t', 0) + t := template.Must(template.New("help").Parse(templ)) + t.Execute(w, data) + w.Flush() } func showVersion(c *Context) {