@@ -12,28 +12,30 @@ import (
1212const (
1313 DefaultPrompt = "»"
1414 DefaultErrorMsgPrefix = "✘ "
15- DefaultQuestionTpl = "{{ . | cyan }} "
15+ DefaultAskTpl = "{{ . | cyan }} "
1616 DefaultPromptTpl = "{{ . | green }} "
1717 DefaultInvalidTpl = "{{ . | red }} "
1818 DefaultValidTpl = "{{ . | green }} "
1919 DefaultErrorMsgTpl = "{{ . | red }} "
2020)
2121
2222type Prompt struct {
23- Question string
23+ Ask string
2424 Prompt string
2525 PromptTpl * Tpl
2626 FuncMap template.FuncMap
2727
28- question * template.Template
28+ isFirstRun bool
29+
30+ ask * template.Template
2931 prompt * template.Template
3032 valid * template.Template
3133 invalid * template.Template
3234 errorMsg * template.Template
3335}
3436
3537type Tpl struct {
36- QuestionTpl string
38+ AskTpl string
3739 PromptTpl string
3840 ValidTpl string
3941 InvalidTpl string
@@ -43,7 +45,7 @@ type Tpl struct {
4345
4446func NewDefaultTpl (check func (line []rune ) error ) * Tpl {
4547 return & Tpl {
46- QuestionTpl : DefaultQuestionTpl ,
48+ AskTpl : DefaultAskTpl ,
4749 PromptTpl : DefaultPromptTpl ,
4850 InvalidTpl : DefaultInvalidTpl ,
4951 ValidTpl : DefaultValidTpl ,
@@ -52,19 +54,20 @@ func NewDefaultTpl(check func(line []rune) error) *Tpl {
5254 }
5355}
5456
55- func NewDefaultPrompt (check func (line []rune ) error , question string ) * Prompt {
57+ func NewDefaultPrompt (check func (line []rune ) error , ask string ) * Prompt {
5658 return & Prompt {
57- Question : question ,
58- Prompt : DefaultPrompt ,
59- PromptTpl : NewDefaultTpl (check ),
60- FuncMap : FuncMap ,
59+ isFirstRun : true ,
60+ Ask : ask ,
61+ Prompt : DefaultPrompt ,
62+ PromptTpl : NewDefaultTpl (check ),
63+ FuncMap : FuncMap ,
6164 }
6265}
6366
6467func (p * Prompt ) prepareTemplates () {
6568
6669 var err error
67- p .question , err = template .New ("" ).Funcs (FuncMap ).Parse (p .PromptTpl .QuestionTpl )
70+ p .ask , err = template .New ("" ).Funcs (FuncMap ).Parse (p .PromptTpl .AskTpl )
6871 util .CheckAndExit (err )
6972 p .prompt , err = template .New ("" ).Funcs (FuncMap ).Parse (p .PromptTpl .PromptTpl )
7073 util .CheckAndExit (err )
@@ -99,9 +102,9 @@ func (p *Prompt) Run() string {
99102
100103 p .prepareTemplates ()
101104
102- displayPrompt := append (render (p .prompt , p .Prompt ), render (p .question , p .Question )... )
103- validPrompt := append (render (p .valid , p .Prompt ), render (p .question , p .Question )... )
104- invalidPrompt := append (render (p .invalid , p .Prompt ), render (p .question , p .Question )... )
105+ displayPrompt := append (render (p .prompt , p .Prompt ), render (p .ask , p .Ask )... )
106+ validPrompt := append (render (p .valid , p .Prompt ), render (p .ask , p .Ask )... )
107+ invalidPrompt := append (render (p .invalid , p .Prompt ), render (p .ask , p .Ask )... )
105108
106109 l , err := readline .NewEx (& readline.Config {
107110 Prompt : string (displayPrompt ),
@@ -129,6 +132,14 @@ func (p *Prompt) Run() string {
129132 s , err := l .Readline ()
130133 util .CheckAndExit (err )
131134 if err = p .PromptTpl .CheckListener ([]rune (s )); err != nil {
135+ if p .isFirstRun {
136+ fmt .Print (moveUp )
137+ p .isFirstRun = false
138+ } else {
139+ fmt .Print (moveUp )
140+ fmt .Print (moveUp )
141+ }
142+ fmt .Print (clearLine )
132143 fmt .Println (string (render (p .errorMsg , DefaultErrorMsgPrefix + err .Error ())))
133144 } else {
134145 return s
0 commit comments