Skip to content

Commit b280fcf

Browse files
author
mritd
committed
feat(prompt): 调整交互库
调整交互库 Signed-off-by: mritd <[email protected]>
1 parent f403415 commit b280fcf

File tree

1 file changed

+25
-14
lines changed

1 file changed

+25
-14
lines changed

pkg/prompt/prompt.go

Lines changed: 25 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -12,28 +12,30 @@ import (
1212
const (
1313
DefaultPrompt = "»"
1414
DefaultErrorMsgPrefix = "✘ "
15-
DefaultQuestionTpl = "{{ . | cyan }} "
15+
DefaultAskTpl = "{{ . | cyan }} "
1616
DefaultPromptTpl = "{{ . | green }} "
1717
DefaultInvalidTpl = "{{ . | red }} "
1818
DefaultValidTpl = "{{ . | green }} "
1919
DefaultErrorMsgTpl = "{{ . | red }} "
2020
)
2121

2222
type 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

3537
type 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

4446
func 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

6467
func (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

Comments
 (0)