54 lines
1.3 KiB
Go
54 lines
1.3 KiB
Go
|
// 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.CLI.InstallName = "complete"
|
||
|
cmp.CLI.UninstallName = "uncomplete"
|
||
|
cmp.AddFlags(nil)
|
||
|
|
||
|
// 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.Complete() {
|
||
|
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)
|
||
|
}
|