code: func GetSelection(ctx context.Context, prompt, usage string, choices []string) (string, int) {
  	if ctxutil.IsAlwaysYes(ctx) || !ctxutil.IsInteractive(ctx) {
  		return "impossible", 0
  	}
  
  	if prompt != "" {
  		prompt += " "
  	}
  
  	if err := termbox.Init(); err != nil {
  		panic(err)
  	}
  	defer termbox.Close()
  
  	const coldef = termbox.ColorDefault
  	termbox.Clear(coldef, coldef)
  
  	cur := 0
  	for {
  		// check for context cancelation
  		select {
  		case <-ctx.Done():
  			return "aborted", cur
  		default:
  		}
  		termbox.Clear(coldef, coldef)
  		tbprint(0, 0, coldef, coldef, prompt+"Please select:")
  		_, h := termbox.Size()
  		offset := 0
  		if len(choices)+2 > h && cur > h-3 {
  			offset = cur
  		}
  		for i := offset; i < len(choices) && i-offset < h; i++ {
  			c := choices[i]
  			mark := " "
  			if cur == i {
  				mark = ">"
  			}
  			tbprint(0, 1+i-offset, coldef, coldef, fmt.Sprintf("%s %s", mark, c))
  		}
  		tbprint(0, h-1, coldef, coldef, formatUsageLine(ctx, usage, offset, cur, choices))
  		_ = termbox.Flush()
  		var act string
  		if act, cur = tbpoll(cur, len(choices)); act != "" {
  			return act, cur
  		}
  	}
  }
docs: // GetSelection show a navigateable multiple-choice list to the user
  // and returns the selected entry along with the action