diff --git a/pkg/prompt/prompt.go b/pkg/prompt/prompt.go index 0e1058e22034200bc4d13982d13d31765a72f6f3..711ad3bbb064d043e120d73b3baf989e1188b637 100644 --- a/pkg/prompt/prompt.go +++ b/pkg/prompt/prompt.go @@ -68,7 +68,7 @@ func (p boolPrompt) EvaluateChoice(c string) (interface{}, error) { type multipleChoicePrompt []string func (p multipleChoicePrompt) PromptMessage(name string) string { - return fmt.Sprintf("Please choose an index for %q", name) + return fmt.Sprintf("Please choose an option for %q", name) } func (p multipleChoicePrompt) EvaluateChoice(c string) (interface{}, error) { diff --git a/pkg/prompt/prompt_test.go b/pkg/prompt/prompt_test.go index c24e4061a24982bfbac88201e48d09bb80d151ec..3e3b93c3088e997c642ed685bed7b74959ace36f 100644 --- a/pkg/prompt/prompt_test.go +++ b/pkg/prompt/prompt_test.go @@ -90,7 +90,7 @@ func TestMultipleChoicePromptFunc(t *testing.T) { msg := slicePrompt.PromptMessage(name) - expectedPromptMsg := "Please choose an index for \"fieldName\"" + expectedPromptMsg := "Please choose an option for \"fieldName\"" if msg != expectedPromptMsg { t.Errorf("slicePrompt(%q).PromptMessage(%q) expected %q got %q", defval, name, expectedPromptMsg, msg) } diff --git a/pkg/util/tlog/log.go b/pkg/util/tlog/log.go index fd0f45006eab7e471565cd5e8c130944c69f2930..1b03f2501f89f64c3dc73c0fddbbe670425c6500 100644 --- a/pkg/util/tlog/log.go +++ b/pkg/util/tlog/log.go @@ -135,11 +135,27 @@ func Fatal(msg string) { // Prompt outputs the given message as a question along with a default value. func Prompt(msg string, defval interface{}) { - fmt.Print(strings.Join([]string{ + tokens := []string{ color.New(color.FgBlue).SprintFunc()("[" + QuestionMark + "]"), color.New(color.Bold, color.FgWhite).SprintFunc()(msg), - color.New(color.FgBlue).SprintFunc()(fmt.Sprintf("[default: %#v]: ", defval)), - }, " ")) + } + + // TODO refactor & eliminate duplication + switch val := defval.(type) { + case []interface{}: + tokens = append(tokens, "\n") + for i, v := range val { + tokens = append(tokens, color.New(color.Bold, color.FgWhite).SprintFunc()(fmt.Sprintf(" %v - %#v\n", i+1, v))) + } + + tokens = append(tokens, color.New(color.Bold, color.FgWhite).SprintFunc()(fmt.Sprintf(" Choose from %v..%v", 1, len(val)))) + + tokens = append(tokens, color.New(color.Bold, color.FgBlue).SprintFunc()(fmt.Sprintf("[default: %v]: ", 1))) + default: + tokens = append(tokens, color.New(color.Bold, color.FgBlue).SprintFunc()(fmt.Sprintf("[default: %#v]: ", defval))) + } + + fmt.Print(strings.Join(tokens, " ")) } // TODO use dependency injection wrapper for fmt.Print usage in the code base