cliack.go 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. package cliack
  2. import (
  3. "fmt"
  4. "strings"
  5. )
  6. func Acknowledge(text string, defaultYes bool) bool {
  7. var opt []string
  8. if defaultYes {
  9. opt = []string{"y", "N"}
  10. } else {
  11. opt = []string{"Y", "n"}
  12. }
  13. v, _ := SimpleSelect(text, opt)
  14. return v == 0
  15. }
  16. func printSimplePrompt(text string, options []string) {
  17. tipstr := "(" + strings.Join(options, "/") + ")"
  18. fmt.Print(text, " ", tipstr, " > ")
  19. }
  20. func printComplexPromptFirst(text string, options map[string]string) string {
  21. fmt.Println(text)
  22. fmt.Println()
  23. var opts []string
  24. for k, v := range options {
  25. fmt.Println("\t", k, "\t", "-", "\t", v)
  26. opts = append(opts, k)
  27. }
  28. optstr := "(" + strings.Join(opts, "/") + ")"
  29. fmt.Print(optstr, " > ")
  30. return optstr
  31. }
  32. func SimpleSelect(text string, options []string) (v int, err error) {
  33. for {
  34. printSimplePrompt(text, options)
  35. var input string
  36. _, err := fmt.Scanln(&input)
  37. if err != nil {
  38. return -1, err
  39. }
  40. for i, v := range options {
  41. if input == v {
  42. return i, nil
  43. }
  44. }
  45. fmt.Println("Invalid input!")
  46. }
  47. }
  48. func ComplexSelect(text string, options map[string]string) (k string, err error) {
  49. optstr := printComplexPromptFirst(text, options)
  50. for {
  51. var input string
  52. _, err := fmt.Scanln(&input)
  53. if err != nil {
  54. return "", err
  55. }
  56. _, ok := options[input]
  57. if ok {
  58. return input, nil
  59. }
  60. fmt.Println("Invalid input!")
  61. fmt.Print(optstr, " > ")
  62. }
  63. }