diff options
Diffstat (limited to 'example/self/main.go')
| -rw-r--r-- | example/self/main.go | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/example/self/main.go b/example/self/main.go new file mode 100644 index 0000000..068a0ac --- /dev/null +++ b/example/self/main.go @@ -0,0 +1,51 @@ +// Package self +// a program that complete itself +package main + +import ( + "flag" + "fmt" + "os" + + "github.com/posener/complete" +) + +func main() { + + // add a variable to the program + var name string + flag.StringVar(&name, "name", "", "Give your name") + + // create the complete command + cmp := complete.New( + "self", + complete.Command{Flags: complete.Flags{"name": complete.PredictAnything}}, + ) + + // AddFlags adds the completion flags to the program flags, + // in case of using non-default flag set, it is possible to pass + // it as an argument. + // 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") + + // parse the flags - both the program's flags and the completion flags + flag.Parse() + + // run the completion, in case that the completion was invoked + // and ran as a completion script or handled a flag that passed + // as argument, the Run method will return true, + // in that case, our program have nothing to do and should return. + if cmp.Run() { + return + } + + // if the completion did not do anything, we can run our program logic here. + if name == "" { + fmt.Println("Your name is missing") + os.Exit(1) + } + + fmt.Println("Hi,", name) +} |
