func (s *Select) RunCursorAt(cursorPos, scroll int) (int, string, error) {
	if s.Size == 0 {
		s.Size = 5
	}
	l, err := list.New(s.Items, s.Size)
	if err != nil {
		return 0, "", err
	}
	l.Searcher = s.Searcher
	s.list = l
	s.setKeys()
	err = s.prepareTemplates()
	if err != nil {
		return 0, "", err
	}
	return s.innerRun(cursorPos, scroll, ' ')
}
RunCursorAt executes the select list, initializing the cursor to the given
position. Invalid cursor positions will be clamped to valid values.  It
displays the label and the list of items, asking the user to chose any value
within to list. Run will keep the prompt alive until it has been canceled
from the command prompt or it has received a valid value. It will return
the value and an error if any occurred during the select's execution.
package promptui
import (
	"bytes"
	"fmt"
	"io"
	"os"
	"text/template"
	"github.com/chzyer/readline"
	"github.com/juju/ansiterm"
	"github.com/manifoldco/promptui/list"
	"github.com/manifoldco/promptui/screenbuf"
)
const SelectedAdd = -1
type Select struct {
	Label interface{}
	Items interface{}
	Size int
	CursorPos int
	IsVimMode bool
	HideHelp bool
	HideSelected bool
	Templates *SelectTemplates
	Keys *SelectKeys
	Searcher list.Searcher
	StartInSearchMode bool
	list *list.List
	Pointer Pointer
	Stdin  io.ReadCloser
	Stdout io.WriteCloser
}
type SelectKeys struct {
	Next Key
	Prev Key
	PageUp Key
	PageDown Key
	Search Key
}
type Key struct {
	Code rune
	Display string
}
type SelectTemplates struct {
	Label string
	Active string
	Inactive string
	Selected string
	Details string
	Help string
	FuncMap template.FuncMap
	label    *template.Template
	active   *template.Template
	inactive *template.Template
	selected *template.Template
	details  *template.Template
	help     *template.Template
}
var SearchPrompt = "Search: "
func (s *Select) Run() (int, string, error) {
	return s.RunCursorAt(s.CursorPos, 0)
}