diff --git a/cmd/cmd.go b/cmd/cmd.go index f796ec8..7137dee 100644 --- a/cmd/cmd.go +++ b/cmd/cmd.go @@ -13,7 +13,9 @@ import ( // CLI for command line type CLI struct { - Name string + Name string + InstallName string + UninstallName string install bool uninstall bool @@ -29,12 +31,6 @@ const ( // this is used when the complete is not completing words, but to // install it or uninstall it. func (f *CLI) Run() bool { - - // add flags and parse them in case they were not added and parsed - // by the main program - f.AddFlags(nil, "", "") - flag.Parse() - err := f.validate() if err != nil { os.Stderr.WriteString(err.Error() + "\n") @@ -86,24 +82,24 @@ func (f *CLI) prompt() { // If flags is nil, the default command line flags will be taken. // Pass non-empty strings as installName and uninstallName to override the default // flag names. -func (f *CLI) AddFlags(flags *flag.FlagSet, installName, uninstallName string) { +func (f *CLI) AddFlags(flags *flag.FlagSet) { if flags == nil { flags = flag.CommandLine } - if installName == "" { - installName = defaultInstallName + if f.InstallName == "" { + f.InstallName = defaultInstallName } - if uninstallName == "" { - uninstallName = defaultUninstallName + if f.UninstallName == "" { + f.UninstallName = defaultUninstallName } - if flags.Lookup(installName) == nil { - flags.BoolVar(&f.install, installName, false, + if flags.Lookup(f.InstallName) == nil { + flags.BoolVar(&f.install, f.InstallName, false, fmt.Sprintf("Install completion for %s command", f.Name)) } - if flags.Lookup(uninstallName) == nil { - flags.BoolVar(&f.uninstall, uninstallName, false, + if flags.Lookup(f.UninstallName) == nil { + flags.BoolVar(&f.uninstall, f.UninstallName, false, fmt.Sprintf("Uninstall completion for %s command", f.Name)) } if flags.Lookup("y") == nil { diff --git a/example/self/main.go b/example/self/main.go index 068a0ac..ae4c2e4 100644 --- a/example/self/main.go +++ b/example/self/main.go @@ -28,7 +28,9 @@ func main() { // it is possible to set custom flags name // so when one will type 'self -h', he will see '-complete' to install the // completion and -uncomplete to uninstall it. - cmp.AddFlags(nil, "complete", "uncomplete") + cmp.CLI.InstallName = "complete" + cmp.CLI.UninstallName = "uncomplete" + cmp.AddFlags(nil) // parse the flags - both the program's flags and the completion flags flag.Parse()