go-prompt/prompt/option.go

126 lines
2.3 KiB
Go
Raw Normal View History

2017-07-16 08:20:58 +00:00
package prompt
2017-07-16 08:39:26 +00:00
import "syscall"
2017-07-16 08:20:58 +00:00
type option func(prompt *Prompt) error
func ParserOption(x ConsoleParser) option {
return func(p *Prompt) error {
p.in = x
return nil
}
}
func WriterOption(x ConsoleWriter) option {
return func(p *Prompt) error {
p.renderer.out = x
return nil
}
}
func TitleOption(x string) option {
return func(p *Prompt) error {
2017-07-16 17:18:11 +00:00
p.renderer.title = x
2017-07-16 08:20:58 +00:00
return nil
}
}
func PrefixOption(x string) option {
return func(p *Prompt) error {
2017-07-16 17:11:52 +00:00
p.renderer.prefix = x
return nil
}
}
2017-07-16 19:32:42 +00:00
func PrefixColorOption(x Color) option {
2017-07-16 17:11:52 +00:00
return func(p *Prompt) error {
p.renderer.prefixColor = x
2017-07-16 08:20:58 +00:00
return nil
}
}
2017-07-16 19:55:05 +00:00
func TextColorOption(x Color) option {
return func(p *Prompt) error {
p.renderer.textColor = x
return nil
}
}
func CompletedTextColorOption(x Color) option {
return func(p *Prompt) error {
p.renderer.completedTextColor = x
return nil
}
}
func ResultTextColorOption(x Color) option {
return func(p *Prompt) error {
p.renderer.outputTextColor = x
return nil
}
}
2017-07-16 19:32:42 +00:00
func CompletionTextColor(x Color) option {
return func(p *Prompt) error {
p.renderer.completionTextColor = x
return nil
}
}
func CompletionBackgroundColor(x Color) option {
return func(p *Prompt) error {
p.renderer.completionBGColor = x
return nil
}
}
func SelectedCompletionTextColor(x Color) option {
return func(p *Prompt) error {
p.renderer.selectedCompletionTextColor = x
return nil
}
}
func SelectedCompletionBackgroundColor(x Color) option {
return func(p *Prompt) error {
p.renderer.selectedCompletionBGColor = x
return nil
}
}
2017-07-16 08:20:58 +00:00
func MaxCompletionsOption(x uint16) option {
return func(p *Prompt) error {
p.renderer.maxCompletions = x
return nil
}
}
func NewPrompt(executor Executor, completer Completer, opts ...option) *Prompt {
pt := &Prompt{
2017-07-16 08:39:26 +00:00
in: &VT100Parser{fd: syscall.Stdin},
2017-07-16 08:20:58 +00:00
renderer: &Render{
2017-07-16 17:11:52 +00:00
prefix: "> ",
out: &VT100Writer{fd: syscall.Stdout},
2017-07-16 19:55:05 +00:00
prefixColor: Blue,
textColor: DefaultColor,
outputTextColor: DefaultColor,
completedTextColor: Green,
2017-07-16 19:32:42 +00:00
completionTextColor: White,
completionBGColor: Cyan,
selectedCompletionTextColor: Black,
selectedCompletionBGColor: Turquoise,
2017-07-16 08:20:58 +00:00
},
buf: NewBuffer(),
executor: executor,
completer: completer,
chosen: -1,
}
for _, opt := range opts {
if err := opt(pt); err != nil {
panic(err)
}
}
return pt
}