code: func (ui *UI) DisplayTextMenu(choices []string, promptTemplate string, templateValues ...map[string]interface{}) (string, error) {
  	for i, c := range choices {
  		t := fmt.Sprintf("%d. %s", i+1, c)
  		ui.DisplayText(t)
  	}
  
  	translatedPrompt := ui.TranslateText(promptTemplate, templateValues...)
  
  	interactivePrompt := ui.Interactor.NewInteraction(translatedPrompt)
  
  	interactivePrompt.SetIn(ui.In)
  	interactivePrompt.SetOut(ui.OutForInteration)
  
  	var value string = "enter to skip"
  	err := interactivePrompt.Resolve(&value)
  
  	if isInterrupt(err) {
  		ui.Exiter.Exit(sigIntExitCode)
  	}
  
  	if err != nil {
  		return "", err
  	}
  
  	if value == "enter to skip" {
  		return "", nil
  	}
  
  	i, err := strconv.Atoi(value)
  	if err != nil {
  		if contains(choices, value) {
  			return value, nil
  		}
  		return "", InvalidChoiceError{Choice: value}
  	}
  
  	if i > len(choices) || i <= 0 {
  		return "", ErrInvalidIndex
  	}
  	return choices[i-1], nil
  }
docs: // DisplayTextMenu lets the user choose from a list of options, either by name
  // or by number.