...
1 package prompt
2
3
4
5 type Option func(prompt *Prompt) error
6
7
8 func OptionParser(x ConsoleParser) Option {
9 return func(p *Prompt) error {
10 p.in = x
11 return nil
12 }
13 }
14
15
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
25 func OptionTitle(x string) Option {
26 return func(p *Prompt) error {
27 p.renderer.title = x
28 return nil
29 }
30 }
31
32
33 func OptionPrefix(x string) Option {
34 return func(p *Prompt) error {
35 p.renderer.prefix = x
36 return nil
37 }
38 }
39
40
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
49 func OptionCompletionWordSeparator(x string) Option {
50 return func(p *Prompt) error {
51 p.completion.wordSeparator = x
52 return nil
53 }
54 }
55
56
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
65 func OptionPrefixTextColor(x Color) Option {
66 return func(p *Prompt) error {
67 p.renderer.prefixTextColor = x
68 return nil
69 }
70 }
71
72
73 func OptionPrefixBackgroundColor(x Color) Option {
74 return func(p *Prompt) error {
75 p.renderer.prefixBGColor = x
76 return nil
77 }
78 }
79
80
81 func OptionInputTextColor(x Color) Option {
82 return func(p *Prompt) error {
83 p.renderer.inputTextColor = x
84 return nil
85 }
86 }
87
88
89 func OptionInputBGColor(x Color) Option {
90 return func(p *Prompt) error {
91 p.renderer.inputBGColor = x
92 return nil
93 }
94 }
95
96
97 func OptionPreviewSuggestionTextColor(x Color) Option {
98 return func(p *Prompt) error {
99 p.renderer.previewSuggestionTextColor = x
100 return nil
101 }
102 }
103
104
105 func OptionPreviewSuggestionBGColor(x Color) Option {
106 return func(p *Prompt) error {
107 p.renderer.previewSuggestionBGColor = x
108 return nil
109 }
110 }
111
112
113 func OptionSuggestionTextColor(x Color) Option {
114 return func(p *Prompt) error {
115 p.renderer.suggestionTextColor = x
116 return nil
117 }
118 }
119
120
121 func OptionSuggestionBGColor(x Color) Option {
122 return func(p *Prompt) error {
123 p.renderer.suggestionBGColor = x
124 return nil
125 }
126 }
127
128
129 func OptionSelectedSuggestionTextColor(x Color) Option {
130 return func(p *Prompt) error {
131 p.renderer.selectedSuggestionTextColor = x
132 return nil
133 }
134 }
135
136
137 func OptionSelectedSuggestionBGColor(x Color) Option {
138 return func(p *Prompt) error {
139 p.renderer.selectedSuggestionBGColor = x
140 return nil
141 }
142 }
143
144
145 func OptionDescriptionTextColor(x Color) Option {
146 return func(p *Prompt) error {
147 p.renderer.descriptionTextColor = x
148 return nil
149 }
150 }
151
152
153 func OptionDescriptionBGColor(x Color) Option {
154 return func(p *Prompt) error {
155 p.renderer.descriptionBGColor = x
156 return nil
157 }
158 }
159
160
161 func OptionSelectedDescriptionTextColor(x Color) Option {
162 return func(p *Prompt) error {
163 p.renderer.selectedDescriptionTextColor = x
164 return nil
165 }
166 }
167
168
169 func OptionSelectedDescriptionBGColor(x Color) Option {
170 return func(p *Prompt) error {
171 p.renderer.selectedDescriptionBGColor = x
172 return nil
173 }
174 }
175
176
177 func OptionScrollbarThumbColor(x Color) Option {
178 return func(p *Prompt) error {
179 p.renderer.scrollbarThumbColor = x
180 return nil
181 }
182 }
183
184
185 func OptionScrollbarBGColor(x Color) Option {
186 return func(p *Prompt) error {
187 p.renderer.scrollbarBGColor = x
188 return nil
189 }
190 }
191
192
193 func OptionMaxSuggestion(x uint16) Option {
194 return func(p *Prompt) error {
195 p.completion.max = x
196 return nil
197 }
198 }
199
200
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
210 func OptionSwitchKeyBindMode(m KeyBindMode) Option {
211 return func(p *Prompt) error {
212 p.keyBindMode = m
213 return nil
214 }
215 }
216
217
218 func OptionCompletionOnDown() Option {
219 return func(p *Prompt) error {
220 p.completionOnDown = true
221 return nil
222 }
223 }
224
225
226
227 var SwitchKeyBindMode = OptionSwitchKeyBindMode
228
229
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
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
246 func OptionShowCompletionAtStart() Option {
247 return func(p *Prompt) error {
248 p.completion.showAtStart = true
249 return nil
250 }
251 }
252
253
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
262 func OptionSetExitCheckerOnInput(fn ExitChecker) Option {
263 return func(p *Prompt) error {
264 p.exitChecker = fn
265 return nil
266 }
267 }
268
269
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,
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