summaryrefslogtreecommitdiff
path: root/cmd/cmd.go
diff options
context:
space:
mode:
authorEyal Posener <[email protected]>2019-11-14 06:51:44 +0200
committerEyal Posener <[email protected]>2019-11-18 01:05:47 +0200
commit8724aaf18312e54750540a9578e00d61b1c545d8 (patch)
treed3e736b4fb279975bbcc017ae1bad53e454c5773 /cmd/cmd.go
parent05b68ffc813dd10c420993cb1cf927b346c057b8 (diff)
V2
Diffstat (limited to 'cmd/cmd.go')
-rw-r--r--cmd/cmd.go128
1 files changed, 0 insertions, 128 deletions
diff --git a/cmd/cmd.go b/cmd/cmd.go
deleted file mode 100644
index b99fe52..0000000
--- a/cmd/cmd.go
+++ /dev/null
@@ -1,128 +0,0 @@
-// Package cmd used for command line options for the complete tool
-package cmd
-
-import (
- "errors"
- "flag"
- "fmt"
- "os"
- "strings"
-
- "github.com/posener/complete/cmd/install"
-)
-
-// CLI for command line
-type CLI struct {
- Name string
- InstallName string
- UninstallName string
-
- install bool
- uninstall bool
- yes bool
-}
-
-const (
- defaultInstallName = "install"
- defaultUninstallName = "uninstall"
-)
-
-// Run is used when running complete in command line mode.
-// this is used when the complete is not completing words, but to
-// install it or uninstall it.
-func (f *CLI) Run() bool {
- err := f.validate()
- if err != nil {
- os.Stderr.WriteString(err.Error() + "\n")
- os.Exit(1)
- }
-
- switch {
- case f.install:
- f.prompt()
- err = install.Install(f.Name)
- case f.uninstall:
- f.prompt()
- err = install.Uninstall(f.Name)
- default:
- // non of the action flags matched,
- // returning false should make the real program execute
- return false
- }
-
- if err != nil {
- fmt.Printf("%s failed! %s\n", f.action(), err)
- os.Exit(3)
- }
- fmt.Println("Done!")
- return true
-}
-
-// prompt use for approval
-// exit if approval was not given
-func (f *CLI) prompt() {
- defer fmt.Println(f.action() + "ing...")
- if f.yes {
- return
- }
- fmt.Printf("%s completion for %s? ", f.action(), f.Name)
- var answer string
- fmt.Scanln(&answer)
-
- switch strings.ToLower(answer) {
- case "y", "yes":
- return
- default:
- fmt.Println("Cancelling...")
- os.Exit(1)
- }
-}
-
-// AddFlags adds the CLI flags to the flag set.
-// 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) {
- if flags == nil {
- flags = flag.CommandLine
- }
-
- if f.InstallName == "" {
- f.InstallName = defaultInstallName
- }
- if f.UninstallName == "" {
- f.UninstallName = defaultUninstallName
- }
-
- 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(f.UninstallName) == nil {
- flags.BoolVar(&f.uninstall, f.UninstallName, false,
- fmt.Sprintf("Uninstall completion for %s command", f.Name))
- }
- if flags.Lookup("y") == nil {
- flags.BoolVar(&f.yes, "y", false, "Don't prompt user for typing 'yes' when installing completion")
- }
-}
-
-// validate the CLI
-func (f *CLI) validate() error {
- if f.install && f.uninstall {
- return errors.New("Install and uninstall are mutually exclusive")
- }
- return nil
-}
-
-// action name according to the CLI values.
-func (f *CLI) action() string {
- switch {
- case f.install:
- return "Install"
- case f.uninstall:
- return "Uninstall"
- default:
- return "unknown"
- }
-}