|
@@ -0,0 +1,69 @@
|
|
|
+package cliack
|
|
|
+
|
|
|
+import (
|
|
|
+ "fmt"
|
|
|
+ "strings"
|
|
|
+)
|
|
|
+
|
|
|
+func Acknowledge(text string, defaultYes bool) bool {
|
|
|
+ var opt []string
|
|
|
+ if defaultYes {
|
|
|
+ opt = []string{"y", "N"}
|
|
|
+ } else {
|
|
|
+ opt = []string{"Y", "n"}
|
|
|
+ }
|
|
|
+ v, _ := SimpleSelect(text, opt)
|
|
|
+ return v == 0
|
|
|
+}
|
|
|
+
|
|
|
+func printSimplePrompt(text string, options []string) {
|
|
|
+ tipstr := "(" + strings.Join(options, "/") + ")"
|
|
|
+ fmt.Println(text, tipstr, "> ")
|
|
|
+}
|
|
|
+
|
|
|
+func printComplexPromptFirst(text string, options map[string]string) string {
|
|
|
+ fmt.Println(text)
|
|
|
+ fmt.Println()
|
|
|
+ var opts []string
|
|
|
+ for k, v := range options {
|
|
|
+ fmt.Println("\t", k, "\t", "-", "\t", v)
|
|
|
+ opts = append(opts, k)
|
|
|
+ }
|
|
|
+ optstr := "(" + strings.Join(opts, "/") + ")"
|
|
|
+ fmt.Println(optstr, "> ")
|
|
|
+ return optstr
|
|
|
+}
|
|
|
+
|
|
|
+func SimpleSelect(text string, options []string) (v int, err error) {
|
|
|
+ for {
|
|
|
+ printSimplePrompt(text, options)
|
|
|
+ var input string
|
|
|
+ _, err := fmt.Scanln(&input)
|
|
|
+ if err != nil {
|
|
|
+ return -1, err
|
|
|
+ }
|
|
|
+ for i, v := range options {
|
|
|
+ if input == v {
|
|
|
+ return i, nil
|
|
|
+ }
|
|
|
+ }
|
|
|
+ fmt.Println("Invalid input!")
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+func ComplexSelect(text string, options map[string]string) (k string, err error) {
|
|
|
+ optstr := printComplexPromptFirst(text, options)
|
|
|
+ for {
|
|
|
+ var input string
|
|
|
+ _, err := fmt.Scanln(&input)
|
|
|
+ if err != nil {
|
|
|
+ return "", err
|
|
|
+ }
|
|
|
+ _, ok := options[input]
|
|
|
+ if ok {
|
|
|
+ return input, nil
|
|
|
+ }
|
|
|
+ fmt.Println("Invalid input!")
|
|
|
+ fmt.Println(optstr, "> ")
|
|
|
+ }
|
|
|
+}
|