...

Source file src/github.com/c-bata/go-prompt/option.go

Documentation: github.com/c-bata/go-prompt

     1  package prompt
     2  
     3  // Option is the type to replace default parameters.
     4  // prompt.New accepts any number of options (this is functional option pattern).
     5  type Option func(prompt *Prompt) error
     6  
     7  // OptionParser to set a custom ConsoleParser object. An argument should implement ConsoleParser interface.
     8  func OptionParser(x ConsoleParser) Option {
     9  	return func(p *Prompt) error {
    10  		p.in = x
    11  		return nil
    12  	}
    13  }
    14  
    15  // OptionWriter to set a custom ConsoleWriter object. An argument should implement ConsoleWriter interface.
    16  func OptionWriter(x ConsoleWriter) Option {
    17  	return func(p *Prompt) error {
    18  		registerConsoleWriter(x)
    19  		p.renderer.out = x
    20  		return nil
    21  	}
    22  }
    23  
    24  // OptionTitle to set title displayed at the header bar of terminal.
    25  func OptionTitle(x string) Option {
    26  	return func(p *Prompt) error {
    27  		p.renderer.title = x
    28  		return nil
    29  	}
    30  }
    31  
    32  // OptionPrefix to set prefix string.
    33  func OptionPrefix(x string) Option {
    34  	return func(p *Prompt) error {
    35  		p.renderer.prefix = x
    36  		return nil
    37  	}
    38  }
    39  
    40  // OptionInitialBufferText to set the initial buffer text
    41  func OptionInitialBufferText(x string) Option {
    42  	return func(p *Prompt) error {
    43  		p.buf.InsertText(x, false, true)
    44  		return nil
    45  	}
    46  }
    47  
    48  // OptionCompletionWordSeparator to set word separators. Enable only ' ' if empty.
    49  func OptionCompletionWordSeparator(x string) Option {
    50  	return func(p *Prompt) error {
    51  		p.completion.wordSeparator = x
    52  		return nil
    53  	}
    54  }
    55  
    56  // OptionLivePrefix to change the prefix dynamically by callback function
    57  func OptionLivePrefix(f func() (prefix string, useLivePrefix bool)) Option {
    58  	return func(p *Prompt) error {
    59  		p.renderer.livePrefixCallback = f
    60  		return nil
    61  	}
    62  }
    63  
    64  // OptionPrefixTextColor change a text color of prefix string
    65  func OptionPrefixTextColor(x Color) Option {
    66  	return func(p *Prompt) error {
    67  		p.renderer.prefixTextColor = x
    68  		return nil
    69  	}
    70  }
    71  
    72  // OptionPrefixBackgroundColor to change a background color of prefix string
    73  func OptionPrefixBackgroundColor(x Color) Option {
    74  	return func(p *Prompt) error {
    75  		p.renderer.prefixBGColor = x
    76  		return nil
    77  	}
    78  }
    79  
    80  // OptionInputTextColor to change a color of text which is input by user
    81  func OptionInputTextColor(x Color) Option {
    82  	return func(p *Prompt) error {
    83  		p.renderer.inputTextColor = x
    84  		return nil
    85  	}
    86  }
    87  
    88  // OptionInputBGColor to change a color of background which is input by user
    89  func OptionInputBGColor(x Color) Option {
    90  	return func(p *Prompt) error {
    91  		p.renderer.inputBGColor = x
    92  		return nil
    93  	}
    94  }
    95  
    96  // OptionPreviewSuggestionTextColor to change a text color which is completed
    97  func OptionPreviewSuggestionTextColor(x Color) Option {
    98  	return func(p *Prompt) error {
    99  		p.renderer.previewSuggestionTextColor = x
   100  		return nil
   101  	}
   102  }
   103  
   104  // OptionPreviewSuggestionBGColor to change a background color which is completed
   105  func OptionPreviewSuggestionBGColor(x Color) Option {
   106  	return func(p *Prompt) error {
   107  		p.renderer.previewSuggestionBGColor = x
   108  		return nil
   109  	}
   110  }
   111  
   112  // OptionSuggestionTextColor to change a text color in drop down suggestions.
   113  func OptionSuggestionTextColor(x Color) Option {
   114  	return func(p *Prompt) error {
   115  		p.renderer.suggestionTextColor = x
   116  		return nil
   117  	}
   118  }
   119  
   120  // OptionSuggestionBGColor change a background color in drop down suggestions.
   121  func OptionSuggestionBGColor(x Color) Option {
   122  	return func(p *Prompt) error {
   123  		p.renderer.suggestionBGColor = x
   124  		return nil
   125  	}
   126  }
   127  
   128  // OptionSelectedSuggestionTextColor to change a text color for completed text which is selected inside suggestions drop down box.
   129  func OptionSelectedSuggestionTextColor(x Color) Option {
   130  	return func(p *Prompt) error {
   131  		p.renderer.selectedSuggestionTextColor = x
   132  		return nil
   133  	}
   134  }
   135  
   136  // OptionSelectedSuggestionBGColor to change a background color for completed text which is selected inside suggestions drop down box.
   137  func OptionSelectedSuggestionBGColor(x Color) Option {
   138  	return func(p *Prompt) error {
   139  		p.renderer.selectedSuggestionBGColor = x
   140  		return nil
   141  	}
   142  }
   143  
   144  // OptionDescriptionTextColor to change a background color of description text in drop down suggestions.
   145  func OptionDescriptionTextColor(x Color) Option {
   146  	return func(p *Prompt) error {
   147  		p.renderer.descriptionTextColor = x
   148  		return nil
   149  	}
   150  }
   151  
   152  // OptionDescriptionBGColor to change a background color of description text in drop down suggestions.
   153  func OptionDescriptionBGColor(x Color) Option {
   154  	return func(p *Prompt) error {
   155  		p.renderer.descriptionBGColor = x
   156  		return nil
   157  	}
   158  }
   159  
   160  // OptionSelectedDescriptionTextColor to change a text color of description which is selected inside suggestions drop down box.
   161  func OptionSelectedDescriptionTextColor(x Color) Option {
   162  	return func(p *Prompt) error {
   163  		p.renderer.selectedDescriptionTextColor = x
   164  		return nil
   165  	}
   166  }
   167  
   168  // OptionSelectedDescriptionBGColor to change a background color of description which is selected inside suggestions drop down box.
   169  func OptionSelectedDescriptionBGColor(x Color) Option {
   170  	return func(p *Prompt) error {
   171  		p.renderer.selectedDescriptionBGColor = x
   172  		return nil
   173  	}
   174  }
   175  
   176  // OptionScrollbarThumbColor to change a thumb color on scrollbar.
   177  func OptionScrollbarThumbColor(x Color) Option {
   178  	return func(p *Prompt) error {
   179  		p.renderer.scrollbarThumbColor = x
   180  		return nil
   181  	}
   182  }
   183  
   184  // OptionScrollbarBGColor to change a background color of scrollbar.
   185  func OptionScrollbarBGColor(x Color) Option {
   186  	return func(p *Prompt) error {
   187  		p.renderer.scrollbarBGColor = x
   188  		return nil
   189  	}
   190  }
   191  
   192  // OptionMaxSuggestion specify the max number of displayed suggestions.
   193  func OptionMaxSuggestion(x uint16) Option {
   194  	return func(p *Prompt) error {
   195  		p.completion.max = x
   196  		return nil
   197  	}
   198  }
   199  
   200  // OptionHistory to set history expressed by string array.
   201  func OptionHistory(x []string) Option {
   202  	return func(p *Prompt) error {
   203  		p.history.histories = x
   204  		p.history.Clear()
   205  		return nil
   206  	}
   207  }
   208  
   209  // OptionSwitchKeyBindMode set a key bind mode.
   210  func OptionSwitchKeyBindMode(m KeyBindMode) Option {
   211  	return func(p *Prompt) error {
   212  		p.keyBindMode = m
   213  		return nil
   214  	}
   215  }
   216  
   217  // OptionCompletionOnDown allows for Down arrow key to trigger completion.
   218  func OptionCompletionOnDown() Option {
   219  	return func(p *Prompt) error {
   220  		p.completionOnDown = true
   221  		return nil
   222  	}
   223  }
   224  
   225  // SwitchKeyBindMode to set a key bind mode.
   226  // Deprecated: Please use OptionSwitchKeyBindMode.
   227  var SwitchKeyBindMode = OptionSwitchKeyBindMode
   228  
   229  // OptionAddKeyBind to set a custom key bind.
   230  func OptionAddKeyBind(b ...KeyBind) Option {
   231  	return func(p *Prompt) error {
   232  		p.keyBindings = append(p.keyBindings, b...)
   233  		return nil
   234  	}
   235  }
   236  
   237  // OptionAddASCIICodeBind to set a custom key bind.
   238  func OptionAddASCIICodeBind(b ...ASCIICodeBind) Option {
   239  	return func(p *Prompt) error {
   240  		p.ASCIICodeBindings = append(p.ASCIICodeBindings, b...)
   241  		return nil
   242  	}
   243  }
   244  
   245  // OptionShowCompletionAtStart to set completion window is open at start.
   246  func OptionShowCompletionAtStart() Option {
   247  	return func(p *Prompt) error {
   248  		p.completion.showAtStart = true
   249  		return nil
   250  	}
   251  }
   252  
   253  // OptionBreakLineCallback to run a callback at every break line
   254  func OptionBreakLineCallback(fn func(*Document)) Option {
   255  	return func(p *Prompt) error {
   256  		p.renderer.breakLineCallback = fn
   257  		return nil
   258  	}
   259  }
   260  
   261  // OptionSetExitCheckerOnInput set an exit function which checks if go-prompt exits its Run loop
   262  func OptionSetExitCheckerOnInput(fn ExitChecker) Option {
   263  	return func(p *Prompt) error {
   264  		p.exitChecker = fn
   265  		return nil
   266  	}
   267  }
   268  
   269  // New returns a Prompt with powerful auto-completion.
   270  func New(executor Executor, completer Completer, opts ...Option) *Prompt {
   271  	defaultWriter := NewStdoutWriter()
   272  	registerConsoleWriter(defaultWriter)
   273  
   274  	pt := &Prompt{
   275  		in: NewStandardInputParser(),
   276  		renderer: &Render{
   277  			prefix:                       "> ",
   278  			out:                          defaultWriter,
   279  			livePrefixCallback:           func() (string, bool) { return "", false },
   280  			prefixTextColor:              Blue,
   281  			prefixBGColor:                DefaultColor,
   282  			inputTextColor:               DefaultColor,
   283  			inputBGColor:                 DefaultColor,
   284  			previewSuggestionTextColor:   Green,
   285  			previewSuggestionBGColor:     DefaultColor,
   286  			suggestionTextColor:          White,
   287  			suggestionBGColor:            Cyan,
   288  			selectedSuggestionTextColor:  Black,
   289  			selectedSuggestionBGColor:    Turquoise,
   290  			descriptionTextColor:         Black,
   291  			descriptionBGColor:           Turquoise,
   292  			selectedDescriptionTextColor: White,
   293  			selectedDescriptionBGColor:   Cyan,
   294  			scrollbarThumbColor:          DarkGray,
   295  			scrollbarBGColor:             Cyan,
   296  		},
   297  		buf:         NewBuffer(),
   298  		executor:    executor,
   299  		history:     NewHistory(),
   300  		completion:  NewCompletionManager(completer, 6),
   301  		keyBindMode: EmacsKeyBind, // All the above assume that bash is running in the default Emacs setting
   302  	}
   303  
   304  	for _, opt := range opts {
   305  		if err := opt(pt); err != nil {
   306  			panic(err)
   307  		}
   308  	}
   309  	return pt
   310  }
   311  

View as plain text