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
|
|
|
|
}
|