diff --git a/cli.go b/cli.go index 959c939..f277780 100644 --- a/cli.go +++ b/cli.go @@ -6,7 +6,7 @@ import "os" var Name = os.Args[0] // Description of the program. -var Usage = "" +var Usage = "" // Version of the program var Version = "0.0.0" @@ -17,19 +17,19 @@ var Commands []Command = nil var DefaultAction = ShowHelp func Run(args []string) { - if len(args) > 1 { - command := args[1] - commands := CommandsWithDefaults() - for _, c := range commands { - if c.Name == command { - c.Action(command) - return - } - } - } + if len(args) > 1 { + command := args[1] + commands := CommandsWithDefaults() + for _, c := range commands { + if c.Name == command { + c.Action(command) + return + } + } + } // Run default Action - DefaultAction("") + DefaultAction("") } func CommandsWithDefaults() []Command { diff --git a/help.go b/help.go index 0dab987..bd92c0d 100644 --- a/help.go +++ b/help.go @@ -1,8 +1,17 @@ package cli -import "fmt" import "os" +import "log" + import "text/tabwriter" +import "text/template" + +type HelpData struct { + Name string + Usage string + Commands []Command + Version string +} var HelpCommand = Command{ Name: "help", @@ -11,14 +20,43 @@ var HelpCommand = Command{ Action: ShowHelp, } +var helpTemplate = `NAME: + {{.Name}} - {{.Usage}} + +USAGE: + {{.Name}} [global-options] COMMAND [command-options] + +VERSION: + {{.Version}} + +COMMANDS: + {{range .Commands}}{{.Name}}{{ "\t" }}{{.Usage}} + {{end}} + +` + var ShowHelp = func(name string) { - w := tabwriter.NewWriter(os.Stdout, 0, 8, 1, '\t', 0) - fmt.Printf("Usage: %v [global-options] COMMAND [command-options]\n\n", Name) - if Commands != nil { - fmt.Printf("The most commonly used %v commands are:\n", Name) - for _, c := range Commands { - fmt.Fprintln(w, " "+c.Name+"\t"+c.Usage) - } - w.Flush() + + data := HelpData{ + Name, + Usage, + Commands, + Version, } + + w := tabwriter.NewWriter(os.Stdout, 0, 8, 1, '\t', 0) + t := template.Must(template.New("help").Parse(helpTemplate)) + err := t.Execute(w, data) + w.Flush() + if err != nil { + log.Println("executing template:", err) + } + // fmt.Printf("Usage: %v [global-options] COMMAND [command-options]\n\n", Name) + // if Commands != nil { + // fmt.Printf("The most commonly used %v commands are:\n", Name) + // for _, c := range Commands { + // fmt.Fprintln(w, " "+c.Name+"\t"+c.Usage) + // } + // w.Flush() + // } }