Documentation ¶
Index ¶
- Constants
- Variables
- func ApplyTemplate(tmplStr string, data interface{}) (string, error)
- func Ask(qs []*Question, response interface{}, opts ...AskOpt) error
- func AskOne(p Prompt, response interface{}, opts ...AskOpt) error
- func Required(val interface{}) error
- func Styler(attrs ...attribute) func(interface{}) string
- func Title(ans interface{}) interface{}
- func ToLower(ans interface{}) interface{}
- type AskOpt
- func WithFilter(filter func(filter string, value string, index int) (include bool)) AskOpt
- func WithHelpInput(r rune) AskOpt
- func WithHideCharacter(char rune) AskOpt
- func WithIcons(setIcons func(*IconSet)) AskOpt
- func WithKeepFilter(KeepFilter bool) AskOpt
- func WithPageSize(pageSize int) AskOpt
- func WithRemoveSelectAll() AskOpt
- func WithRemoveSelectNone() AskOpt
- func WithShowCursor(ShowCursor bool) AskOpt
- func WithStdio(in terminal.FileReader, out terminal.FileWriter, err io.Writer) AskOpt
- func WithValidator(v Validator) AskOpt
- type AskOptions
- type Confirm
- type ConfirmTemplateData
- type Editor
- type EditorTemplateData
- type ErrorTemplateData
- type Icon
- type IconSet
- type Input
- type InputTemplateData
- type IterableOpts
- type MultiSelect
- type MultiSelectTemplateData
- type MultiSelectTemplates
- type Multiline
- type MultilineTemplateData
- type OptionAnswer
- type Password
- type PasswordTemplateData
- type Prompt
- type PromptAgainer
- type PromptConfig
- type PromptTemplates
- type Question
- type Renderer
- func (r *Renderer) AppendRenderedText(text string)
- func (r *Renderer) Error(config *PromptConfig, invalid error) error
- func (r *Renderer) NewCursor() *terminal.Cursor
- func (r *Renderer) NewRuneReader() *terminal.RuneReader
- func (r *Renderer) OffsetCursor(offset int)
- func (r *Renderer) Render(tmpl string, data interface{}, details string) error
- func (r *Renderer) RenderWithCursorOffset(tmpl string, data IterableOpts, opts []core.OptionAnswer, idx int, ...) error
- func (r *Renderer) Stdio() terminal.Stdio
- func (r *Renderer) WithStdio(stdio terminal.Stdio)
- type Select
- type SelectTemplateData
- type SelectTemplates
- type Transformer
- type Validator
Constants ¶
const ( FGBold attribute FGFaint FGItalic FGUnderline )
The possible state of text inside the application, either Bold, faint, italic or underline.
These constants are called through the use of the Styler function.
const ( FGBlack attribute = iota + 30 FGRed FGGreen FGYellow FGBlue FGMagenta FGCyan FGWhite )
The possible colors of text inside the application.
These constants are called through the use of the Styler function.
const ( BGBlack attribute = iota + 40 BGRed BGGreen BGYellow BGBlue BGMagenta BGCyan BGWhite )
The possible background colors of text inside the application.
These constants are called through the use of the Styler function.
Variables ¶
var ( // IconInitial is the icon used when starting in prompt mode and the icon next to the label when // starting in select mode. IconInitial = Styler(FGBlue)("?") // IconGood is the icon used when a good answer is entered in prompt mode. IconGood = Styler(FGGreen)("✔") // IconWarn is the icon used when a good, but potentially invalid answer is entered in prompt mode. IconWarn = Styler(FGYellow)("⚠") // IconBad is the icon used when a bad answer is entered in prompt mode. IconBad = Styler(FGRed)("✗") // IconSelect is the icon used to identify the currently selected item in select mode. IconSelect = Styler(FGBold)("▸") )
These are the default icons used by promptui for select and prompts. These should not be overridden and instead customized through the use of custom templates
var ConfirmQuestionTemplate = `` /* 571-byte string literal not displayed */
Templates with Color formatting. See Documentation: https://github.com/mgutz/ansi#style-format
var EditorQuestionTemplate = `` /* 656-byte string literal not displayed */
Templates with Color formatting. See Documentation: https://github.com/mgutz/ansi#style-format
var ErrorTemplate = `{{color .Icon.Format }}{{ .Icon.Text }} Sorry, your reply was invalid: {{ .Error.Error }}{{color "reset"}}
`
var FuncMap = template.FuncMap{ "black": Styler(FGBlack), "red": Styler(FGRed), "green": Styler(FGGreen), "yellow": Styler(FGYellow), "blue": Styler(FGBlue), "magenta": Styler(FGMagenta), "cyan": Styler(FGCyan), "white": Styler(FGWhite), "bgBlack": Styler(BGBlack), "bgRed": Styler(BGRed), "bgGreen": Styler(BGGreen), "bgYellow": Styler(BGYellow), "bgBlue": Styler(BGBlue), "bgMagenta": Styler(BGMagenta), "bgCyan": Styler(BGCyan), "bgWhite": Styler(BGWhite), "bold": Styler(FGBold), "faint": Styler(FGFaint), "italic": Styler(FGItalic), "underline": Styler(FGUnderline), }
FuncMap defines template helpers for the output. It can be extended as a regular map.
The functions inside the map link the state, color and background colors strings detected in templates to a Styler function that applies the given style using the corresponding constant.
var InputQuestionTemplate = `` /* 1153-byte string literal not displayed */
Templates with Color formatting. See Documentation: https://github.com/mgutz/ansi#style-format
var MultiSelectQuestionTemplate = `` /* 1425-byte string literal not displayed */
var MultilineQuestionTemplate = `` /* 566-byte string literal not displayed */
Templates with Color formatting. See Documentation: https://github.com/mgutz/ansi#style-format
var PasswordQuestionTemplate = `` /* 392-byte string literal not displayed */
PasswordQuestionTemplate is a template with color formatting. See Documentation: https://github.com/mgutz/ansi#style-format
var ResetCode = fmt.Sprintf("%s%dm", esc, reset)
ResetCode is the character code used to reset the terminal formatting
var SelectQuestionTemplate = `` /* 1033-byte string literal not displayed */
Functions ¶
func ApplyTemplate ¶
func Ask ¶
Ask performs the prompt loop, asking for validation when appropriate. The response type can be one of two options. If a struct is passed, the answer will be written to the field whose name matches the Name field on the corresponding question. Field types should be something that can be casted from the response type designated in the documentation. Note, a survey tag can also be used to identify a Otherwise, a map[string]interface{} can be passed, responses will be written to the key with the matching name. For example:
qs := []*survey.Question{ { Name: "name", Prompt: &survey.Input{Message: "What is your name?"}, Validate: survey.Required, Transform: survey.Title, }, } answers := struct{ Name string }{} err := survey.Ask(qs, &answers)
func AskOne ¶
AskOne performs the prompt for a single prompt and asks for validation if required. Response types should be something that can be casted from the response type designated in the documentation. For example:
name := "" prompt := &survey.Input{ Message: "name", } survey.AskOne(prompt, &name)
func Styler ¶
func Styler(attrs ...attribute) func(interface{}) string
Styler is a function that accepts multiple possible styling transforms from the state, color and background colors constants and transforms them into a templated string to apply those styles in the CLI.
The returned styling function accepts a string that will be extended with the wrapping function's styling attributes.
func Title ¶
func Title(ans interface{}) interface{}
Title is a `Transformer`. It receives an answer value and returns a copy of the "ans" with all Unicode letters that begin words mapped to their title case.
Note that if "ans" is not a string then it will return a nil value, meaning that the above answer will not be affected by this call at all.
func ToLower ¶
func ToLower(ans interface{}) interface{}
ToLower is a `Transformer`. It receives an answer value and returns a copy of the "ans" with all Unicode letters mapped to their lower case.
Note that if "ans" is not a string then it will return a nil value, meaning that the above answer will not be affected by this call at all.
Types ¶
type AskOpt ¶
type AskOpt func(options *AskOptions) error
AskOpt allows setting optional ask options.
func WithFilter ¶
WithFilter specifies the default filter to use when asking questions.
func WithHelpInput ¶
WithHelpInput changes the character that prompts look for to give the user helpful information.
func WithHideCharacter ¶
WithHideCharacter sets the default character shown instead of the password for password inputs
func WithKeepFilter ¶
WithKeepFilter sets the if the filter is kept after selections
func WithPageSize ¶
WithPageSize sets the default page size used by prompts
func WithRemoveSelectAll ¶
func WithRemoveSelectAll() AskOpt
WithRemoveSelectAll remove the select all option in Multiselect
func WithRemoveSelectNone ¶
func WithRemoveSelectNone() AskOpt
WithRemoveSelectNone remove the select none/unselect all in Multiselect
func WithShowCursor ¶
WithShowCursor sets the show cursor behavior when prompting the user
func WithStdio ¶
func WithStdio(in terminal.FileReader, out terminal.FileWriter, err io.Writer) AskOpt
WithStdio specifies the standard input, output and error files survey interacts with. By default, these are os.Stdin, os.Stdout, and os.Stderr.
func WithValidator ¶
WithValidator specifies a validator to use while prompting the user
type AskOptions ¶
type AskOptions struct { Stdio terminal.Stdio Validators []Validator PromptConfig PromptConfig }
AskOptions provides additional options on ask.
type Confirm ¶
Confirm is a regular text input that accept yes/no answers. Response type is a bool.
func (*Confirm) Cleanup ¶
func (c *Confirm) Cleanup(config *PromptConfig, val interface{}) error
Cleanup overwrite the line with the finalized formatted version
func (*Confirm) Prompt ¶
func (c *Confirm) Prompt(config *PromptConfig) (interface{}, error)
Prompt prompts the user with a simple text field and expects a reply followed by a carriage return.
likesPie := false prompt := &survey.Confirm{ Message: "What is your name?" } survey.AskOne(prompt, &likesPie)
type ConfirmTemplateData ¶
type ConfirmTemplateData struct { Confirm Answer string ShowHelp bool Config *PromptConfig }
data available to the templates when processing
type Editor ¶
type Editor struct { Renderer Message string Default string Help string Editor string HideDefault bool AppendDefault bool FileName string }
Editor launches an instance of the users preferred editor on a temporary file. The editor to use is determined by reading the $VISUAL or $EDITOR environment variables. If neither of those are present, notepad (on Windows) or vim (others) is used. The launch of the editor is triggered by the enter key. Since the response may be long, it will not be echoed as Input does, instead, it print <Received>. Response type is a string.
message := "" prompt := &survey.Editor{ Message: "What is your commit message?" } survey.AskOne(prompt, &message)
func (*Editor) Cleanup ¶
func (e *Editor) Cleanup(config *PromptConfig, val interface{}) error
func (*Editor) Prompt ¶
func (e *Editor) Prompt(config *PromptConfig) (interface{}, error)
func (*Editor) PromptAgain ¶
func (e *Editor) PromptAgain(config *PromptConfig, invalid interface{}, err error) (interface{}, error)
type EditorTemplateData ¶
type EditorTemplateData struct { Editor Answer string ShowAnswer bool ShowHelp bool Config *PromptConfig }
data available to the templates when processing
type ErrorTemplateData ¶
type IconSet ¶
type IconSet struct { HelpInput Icon Error Icon Help Icon Question Icon MarkedOption Icon UnmarkedOption Icon SelectFocus Icon }
IconSet holds the icons to use for various prompts
type Input ¶
type Input struct { Renderer Message string Default string Help string Suggest func(toComplete string) []string // contains filtered or unexported fields }
Input is a regular text input that prints each character the user types on the screen and accepts the input with the enter key. Response type is a string.
name := "" prompt := &survey.Input{ Message: "What is your name?" } survey.AskOne(prompt, &name)
func (*Input) Cleanup ¶
func (i *Input) Cleanup(config *PromptConfig, val interface{}) error
func (*Input) Prompt ¶
func (i *Input) Prompt(config *PromptConfig) (interface{}, error)
type InputTemplateData ¶
type InputTemplateData struct { Input ShowAnswer bool ShowHelp bool Answer string PageEntries []core.OptionAnswer SelectedIndex int Config *PromptConfig }
data available to the templates when processing
type IterableOpts ¶
type IterableOpts interface {
IterateOption(int, core.OptionAnswer) interface{}
}
type MultiSelect ¶
type MultiSelect struct { Renderer Message string Options []string Default interface{} Help string PageSize int VimMode bool FilterMessage string Filter func(filter string, value string, index int) bool Description func(value string, index int) string // contains filtered or unexported fields }
MultiSelect is a prompt that presents a list of various options to the user for them to select using the arrow keys and enter. Response type is a slice of strings.
days := []string{} prompt := &survey.MultiSelect{ Message: "What days do you prefer:", Options: []string{"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"}, } survey.AskOne(prompt, &days)
func (*MultiSelect) Cleanup ¶
func (m *MultiSelect) Cleanup(config *PromptConfig, val interface{}) error
Cleanup removes the options section, and renders the ask like a normal question.
func (*MultiSelect) OnChange ¶
func (m *MultiSelect) OnChange(key rune, config *PromptConfig)
OnChange is called on every keypress.
func (*MultiSelect) Prompt ¶
func (m *MultiSelect) Prompt(config *PromptConfig) (interface{}, error)
type MultiSelectTemplateData ¶
type MultiSelectTemplateData struct { MultiSelect Answer string ShowAnswer bool Checked map[int]bool SelectedIndex int ShowHelp bool Description func(value string, index int) string PageEntries []core.OptionAnswer Config *PromptConfig // These fields are used when rendering an individual option CurrentOpt core.OptionAnswer CurrentIndex int }
data available to the templates when processing
func (MultiSelectTemplateData) GetDescription ¶
func (m MultiSelectTemplateData) GetDescription(opt core.OptionAnswer) string
func (MultiSelectTemplateData) IterateOption ¶
func (m MultiSelectTemplateData) IterateOption(ix int, opt core.OptionAnswer) interface{}
IterateOption sets CurrentOpt and CurrentIndex appropriately so a multiselect option can be rendered individually
type MultiSelectTemplates ¶
type MultiSelectTemplates struct { // Label is a text/template for the main command line label. Defaults to printing the label as it with // the IconInitial. Label string // Active is a text/template for when an item is currently active within the list. Active string // Inactive is a text/template for when an item is not currently active inside the list. This // template is used for all items unless they are active or selected. Inactive string // Selected is a text/template for when an item was successfully selected. Selected string // Details is a text/template for when an item current active to show // additional information. It can have multiple lines. // // Detail will always be displayed for the active element and thus can be used to display additional // information on the element beyond its label. // // promptui will not trim spaces and tabs will be displayed if the template is indented. Details string // Help is a text/template for displaying instructions at the top. By default // it shows keys for movement and search. Help string // FuncMap is a map of helper functions that can be used inside of templates according to the text/template // documentation. // // By default, FuncMap contains the color functions used to color the text in templates. If FuncMap // is overridden, the colors functions must be added in the override from promptui.FuncMap to work. FuncMap template.FuncMap // contains filtered or unexported fields }
type Multiline ¶
func (*Multiline) Cleanup ¶
func (i *Multiline) Cleanup(config *PromptConfig, val interface{}) error
func (*Multiline) Prompt ¶
func (i *Multiline) Prompt(config *PromptConfig) (interface{}, error)
type MultilineTemplateData ¶
type MultilineTemplateData struct { Multiline Answer string ShowAnswer bool ShowHelp bool Config *PromptConfig }
data available to the templates when processing
type OptionAnswer ¶
type OptionAnswer = core.OptionAnswer
OptionAnswer is an ergonomic alias for core.OptionAnswer
type Password ¶
Password is like a normal Input but the text shows up as *'s and there is no default. Response type is a string.
password := "" prompt := &survey.Password{ Message: "Please type your password" } survey.AskOne(prompt, &password)
func (*Password) Cleanup ¶
func (prompt *Password) Cleanup(config *PromptConfig, val interface{}) error
Cleanup hides the string with a fixed number of characters.
func (*Password) Prompt ¶
func (p *Password) Prompt(config *PromptConfig) (interface{}, error)
type PasswordTemplateData ¶
type PasswordTemplateData struct { Password ShowHelp bool Config *PromptConfig }
type Prompt ¶
type Prompt interface { Prompt(config *PromptConfig) (interface{}, error) Cleanup(*PromptConfig, interface{}) error Error(*PromptConfig, error) error }
Prompt is the primary interface for the objects that can take user input and return a response.
type PromptAgainer ¶
type PromptAgainer interface {
PromptAgain(config *PromptConfig, invalid interface{}, err error) (interface{}, error)
}
PromptAgainer Interface for Prompts that support prompting again after invalid input
type PromptConfig ¶
type PromptConfig struct { PageSize int Icons IconSet HelpInput string SuggestInput string Filter func(filter string, option string, index int) bool KeepFilter bool ShowCursor bool RemoveSelectAll bool RemoveSelectNone bool HideCharacter rune }
PromptConfig holds the global configuration for a prompt
type PromptTemplates ¶
type PromptTemplates struct { // Prompt is a text/template for the prompt label displayed on the left side of the prompt. Prompt string // Prompt is a text/template for the prompt label when IsConfirm is set as true. Confirm string // Valid is a text/template for the prompt label when the value entered is valid. Valid string // Invalid is a text/template for the prompt label when the value entered is invalid. Invalid string // Success is a text/template for the prompt label when the user has pressed entered and the value has been // deemed valid by the validation function. The label will keep using this template even when the prompt ends // inside the console. Success string // Prompt is a text/template for the prompt label when the value is invalid due to an error triggered by // the prompt's validation function. ValidationError string // FuncMap is a map of helper functions that can be used inside of templates according to the text/template // documentation. // // By default, FuncMap contains the color functions used to color the text in templates. If FuncMap // is overridden, the colors functions must be added in the override from promptui.FuncMap to work. FuncMap template.FuncMap // contains filtered or unexported fields }
type Question ¶
type Question struct { Name string Prompt Prompt Validate Validator Transform Transformer Templates *PromptTemplates }
Question is the core data structure for a survey questionnaire.
type Renderer ¶
type Renderer struct {
// contains filtered or unexported fields
}
func (*Renderer) AppendRenderedText ¶
AppendRenderedText appends text to the renderer's text buffer which is used to track of what has been printed. The buffer is used to calculate how many lines to erase before updating the prompt.
func (*Renderer) NewRuneReader ¶
func (r *Renderer) NewRuneReader() *terminal.RuneReader
func (*Renderer) OffsetCursor ¶
func (*Renderer) RenderWithCursorOffset ¶
func (r *Renderer) RenderWithCursorOffset(tmpl string, data IterableOpts, opts []core.OptionAnswer, idx int, details string) error
type Select ¶
type Select struct { Renderer Message string Options []string Items interface{} Default interface{} Help string PageSize int VimMode bool FilterMessage string Filter func(filter string, value string, index int) bool Description func(value string, index int) string Templates *SelectTemplates // contains filtered or unexported fields }
Select is a prompt that presents a list of various options to the user for them to select using the arrow keys and enter. Response type is a string.
color := "" prompt := &survey.Select{ Message: "Choose a color:", Options: []string{"red", "blue", "green"}, } survey.AskOne(prompt, &color)
func (*Select) Cleanup ¶
func (s *Select) Cleanup(config *PromptConfig, val interface{}) error
func (*Select) OnChange ¶
func (s *Select) OnChange(key rune, config *PromptConfig) bool
OnChange is called on every keypress.
func (*Select) Prompt ¶
func (s *Select) Prompt(config *PromptConfig) (interface{}, error)
type SelectTemplateData ¶
type SelectTemplateData struct { Select PageEntries []core.OptionAnswer SelectedIndex int Answer string ShowAnswer bool ShowHelp bool Description func(value string, index int) string Config *PromptConfig CurrentOpt core.OptionAnswer CurrentIndex int }
func (SelectTemplateData) GetDescription ¶
func (s SelectTemplateData) GetDescription(opt core.OptionAnswer) string
func (SelectTemplateData) IterateOption ¶
func (s SelectTemplateData) IterateOption(ix int, opt core.OptionAnswer) interface{}
IterateOption sets CurrentOpt and CurrentIndex appropriately so a select option can be rendered individually
type SelectTemplates ¶
type Transformer ¶
type Transformer func(ans interface{}) (newAns interface{})
Transformer is a function passed to a Question after a user has provided a response. The function can be used to implement a custom logic that will result to return a different representation of the given answer.
Look `TransformString`, `ToLower` `Title` and `ComposeTransformers` for more.
func ComposeTransformers ¶
func ComposeTransformers(transformers ...Transformer) Transformer
ComposeTransformers is a variadic function used to create one transformer from many.
func TransformString ¶
func TransformString(f func(s string) string) Transformer
TransformString returns a `Transformer` based on the "f" function which accepts a string representation of the answer and returns a new one, transformed, answer. Take for example the functions inside the std `strings` package, they can be converted to a compatible `Transformer` by using this function, i.e: `TransformString(strings.Title)`, `TransformString(strings.ToUpper)`.
Note that `TransformString` is just a helper, `Transformer` can be used to transform any type of answer.
type Validator ¶
type Validator func(ans interface{}) error
Validator is a function passed to a Question after a user has provided a response. If the function returns an error, then the user will be prompted again for another response.
func ComposeValidators ¶
ComposeValidators is a variadic function used to create one validator from many.