| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310 |
- package prompt
- // Option is the type to replace default parameters.
- // prompt.New accepts any number of options (this is functional option pattern).
- type Option func(prompt *Prompt) error
- // OptionParser to set a custom ConsoleParser object. An argument should implement ConsoleParser interface.
- func OptionParser(x ConsoleParser) Option {
- return func(p *Prompt) error {
- p.in = x
- return nil
- }
- }
- // OptionWriter to set a custom ConsoleWriter object. An argument should implement ConsoleWriter interface.
- func OptionWriter(x ConsoleWriter) Option {
- return func(p *Prompt) error {
- registerConsoleWriter(x)
- p.renderer.out = x
- return nil
- }
- }
- // OptionTitle to set title displayed at the header bar of terminal.
- func OptionTitle(x string) Option {
- return func(p *Prompt) error {
- p.renderer.title = x
- return nil
- }
- }
- // OptionPrefix to set prefix string.
- func OptionPrefix(x string) Option {
- return func(p *Prompt) error {
- p.renderer.prefix = x
- return nil
- }
- }
- // OptionInitialBufferText to set the initial buffer text
- func OptionInitialBufferText(x string) Option {
- return func(p *Prompt) error {
- p.buf.InsertText(x, false, true)
- return nil
- }
- }
- // OptionCompletionWordSeparator to set word separators. Enable only ' ' if empty.
- func OptionCompletionWordSeparator(x string) Option {
- return func(p *Prompt) error {
- p.completion.wordSeparator = x
- return nil
- }
- }
- // OptionLivePrefix to change the prefix dynamically by callback function
- func OptionLivePrefix(f func() (prefix string, useLivePrefix bool)) Option {
- return func(p *Prompt) error {
- p.renderer.livePrefixCallback = f
- return nil
- }
- }
- // OptionPrefixTextColor change a text color of prefix string
- func OptionPrefixTextColor(x Color) Option {
- return func(p *Prompt) error {
- p.renderer.prefixTextColor = x
- return nil
- }
- }
- // OptionPrefixBackgroundColor to change a background color of prefix string
- func OptionPrefixBackgroundColor(x Color) Option {
- return func(p *Prompt) error {
- p.renderer.prefixBGColor = x
- return nil
- }
- }
- // OptionInputTextColor to change a color of text which is input by user
- func OptionInputTextColor(x Color) Option {
- return func(p *Prompt) error {
- p.renderer.inputTextColor = x
- return nil
- }
- }
- // OptionInputBGColor to change a color of background which is input by user
- func OptionInputBGColor(x Color) Option {
- return func(p *Prompt) error {
- p.renderer.inputBGColor = x
- return nil
- }
- }
- // OptionPreviewSuggestionTextColor to change a text color which is completed
- func OptionPreviewSuggestionTextColor(x Color) Option {
- return func(p *Prompt) error {
- p.renderer.previewSuggestionTextColor = x
- return nil
- }
- }
- // OptionPreviewSuggestionBGColor to change a background color which is completed
- func OptionPreviewSuggestionBGColor(x Color) Option {
- return func(p *Prompt) error {
- p.renderer.previewSuggestionBGColor = x
- return nil
- }
- }
- // OptionSuggestionTextColor to change a text color in drop down suggestions.
- func OptionSuggestionTextColor(x Color) Option {
- return func(p *Prompt) error {
- p.renderer.suggestionTextColor = x
- return nil
- }
- }
- // OptionSuggestionBGColor change a background color in drop down suggestions.
- func OptionSuggestionBGColor(x Color) Option {
- return func(p *Prompt) error {
- p.renderer.suggestionBGColor = x
- return nil
- }
- }
- // OptionSelectedSuggestionTextColor to change a text color for completed text which is selected inside suggestions drop down box.
- func OptionSelectedSuggestionTextColor(x Color) Option {
- return func(p *Prompt) error {
- p.renderer.selectedSuggestionTextColor = x
- return nil
- }
- }
- // OptionSelectedSuggestionBGColor to change a background color for completed text which is selected inside suggestions drop down box.
- func OptionSelectedSuggestionBGColor(x Color) Option {
- return func(p *Prompt) error {
- p.renderer.selectedSuggestionBGColor = x
- return nil
- }
- }
- // OptionDescriptionTextColor to change a background color of description text in drop down suggestions.
- func OptionDescriptionTextColor(x Color) Option {
- return func(p *Prompt) error {
- p.renderer.descriptionTextColor = x
- return nil
- }
- }
- // OptionDescriptionBGColor to change a background color of description text in drop down suggestions.
- func OptionDescriptionBGColor(x Color) Option {
- return func(p *Prompt) error {
- p.renderer.descriptionBGColor = x
- return nil
- }
- }
- // OptionSelectedDescriptionTextColor to change a text color of description which is selected inside suggestions drop down box.
- func OptionSelectedDescriptionTextColor(x Color) Option {
- return func(p *Prompt) error {
- p.renderer.selectedDescriptionTextColor = x
- return nil
- }
- }
- // OptionSelectedDescriptionBGColor to change a background color of description which is selected inside suggestions drop down box.
- func OptionSelectedDescriptionBGColor(x Color) Option {
- return func(p *Prompt) error {
- p.renderer.selectedDescriptionBGColor = x
- return nil
- }
- }
- // OptionScrollbarThumbColor to change a thumb color on scrollbar.
- func OptionScrollbarThumbColor(x Color) Option {
- return func(p *Prompt) error {
- p.renderer.scrollbarThumbColor = x
- return nil
- }
- }
- // OptionScrollbarBGColor to change a background color of scrollbar.
- func OptionScrollbarBGColor(x Color) Option {
- return func(p *Prompt) error {
- p.renderer.scrollbarBGColor = x
- return nil
- }
- }
- // OptionMaxSuggestion specify the max number of displayed suggestions.
- func OptionMaxSuggestion(x uint16) Option {
- return func(p *Prompt) error {
- p.completion.max = x
- return nil
- }
- }
- // OptionHistory to set history expressed by string array.
- func OptionHistory(x []string) Option {
- return func(p *Prompt) error {
- p.history.histories = x
- p.history.Clear()
- return nil
- }
- }
- // OptionSwitchKeyBindMode set a key bind mode.
- func OptionSwitchKeyBindMode(m KeyBindMode) Option {
- return func(p *Prompt) error {
- p.keyBindMode = m
- return nil
- }
- }
- // OptionCompletionOnDown allows for Down arrow key to trigger completion.
- func OptionCompletionOnDown() Option {
- return func(p *Prompt) error {
- p.completionOnDown = true
- return nil
- }
- }
- // SwitchKeyBindMode to set a key bind mode.
- // Deprecated: Please use OptionSwitchKeyBindMode.
- var SwitchKeyBindMode = OptionSwitchKeyBindMode
- // OptionAddKeyBind to set a custom key bind.
- func OptionAddKeyBind(b ...KeyBind) Option {
- return func(p *Prompt) error {
- p.keyBindings = append(p.keyBindings, b...)
- return nil
- }
- }
- // OptionAddASCIICodeBind to set a custom key bind.
- func OptionAddASCIICodeBind(b ...ASCIICodeBind) Option {
- return func(p *Prompt) error {
- p.ASCIICodeBindings = append(p.ASCIICodeBindings, b...)
- return nil
- }
- }
- // OptionShowCompletionAtStart to set completion window is open at start.
- func OptionShowCompletionAtStart() Option {
- return func(p *Prompt) error {
- p.completion.showAtStart = true
- return nil
- }
- }
- // OptionBreakLineCallback to run a callback at every break line
- func OptionBreakLineCallback(fn func(*Document)) Option {
- return func(p *Prompt) error {
- p.renderer.breakLineCallback = fn
- return nil
- }
- }
- // OptionSetExitCheckerOnInput set an exit function which checks if go-prompt exits its Run loop
- func OptionSetExitCheckerOnInput(fn ExitChecker) Option {
- return func(p *Prompt) error {
- p.exitChecker = fn
- return nil
- }
- }
- // New returns a Prompt with powerful auto-completion.
- func New(executor Executor, completer Completer, opts ...Option) *Prompt {
- defaultWriter := NewStdoutWriter()
- registerConsoleWriter(defaultWriter)
- pt := &Prompt{
- in: NewStandardInputParser(),
- renderer: &Render{
- prefix: "> ",
- out: defaultWriter,
- livePrefixCallback: func() (string, bool) { return "", false },
- prefixTextColor: Blue,
- prefixBGColor: DefaultColor,
- inputTextColor: DefaultColor,
- inputBGColor: DefaultColor,
- previewSuggestionTextColor: Green,
- previewSuggestionBGColor: DefaultColor,
- suggestionTextColor: White,
- suggestionBGColor: Cyan,
- selectedSuggestionTextColor: Black,
- selectedSuggestionBGColor: Turquoise,
- descriptionTextColor: Black,
- descriptionBGColor: Turquoise,
- selectedDescriptionTextColor: White,
- selectedDescriptionBGColor: Cyan,
- scrollbarThumbColor: DarkGray,
- scrollbarBGColor: Cyan,
- },
- buf: NewBuffer(),
- executor: executor,
- history: NewHistory(),
- completion: NewCompletionManager(completer, 6),
- keyBindMode: EmacsKeyBind, // All the above assume that bash is running in the default Emacs setting
- }
- for _, opt := range opts {
- if err := opt(pt); err != nil {
- panic(err)
- }
- }
- return pt
- }
|