| 158 | } |
| 159 | |
| 160 | func usageGenerator(flagset *flag.FlagSet, commands []command) usageFunc { |
| 161 | return func() { |
| 162 | var longestCmdLen int |
| 163 | |
| 164 | for _, cmd := range commands { |
| 165 | if len(cmd.Name()) > longestCmdLen { |
| 166 | longestCmdLen = len(cmd.Name()) |
| 167 | } |
| 168 | } |
| 169 | |
| 170 | w := flag.CommandLine.Output() |
| 171 | fmt.Fprint(w, "A BloodHound Swiss Army Knife\n\nUsage: stbernard [OPTIONS] COMMAND\n\nOptions:\n") |
| 172 | |
| 173 | flagset.VisitAll(func(f *flag.Flag) { |
| 174 | padding := strings.Repeat(" ", longestCmdLen-len(f.Name)-1) |
| 175 | fmt.Fprintf(w, " -%s%s %v\n", f.Name, padding, f.Usage) |
| 176 | }) |
| 177 | |
| 178 | fmt.Fprintf(w, "\nCommands:\n") |
| 179 | |
| 180 | for _, cmd := range commands { |
| 181 | padding := strings.Repeat(" ", longestCmdLen-len(cmd.Name())) |
| 182 | fmt.Fprintf(w, " %s%s %s\n", cmd.Name(), padding, cmd.Usage()) |
| 183 | } |
| 184 | } |
| 185 | } |