"fmt"
"os"
"strconv"
- "strings"
"github.com/zyedidia/clipboard"
"github.com/zyedidia/tcell"
func (m *Messenger) getBuffer() *Buffer {
if m.log == nil {
- m.log = NewBuffer(strings.NewReader(""), "")
+ m.log = NewBufferFromString("", "")
m.log.name = "Log"
}
return m.log
// Message sends a message to the user
func (m *Messenger) Message(msg ...interface{}) {
- displayMessage = fmt.Sprint(msg...)
+ displayMessage := fmt.Sprint(msg...)
// only display a new message if there isn't an active prompt
// this is to prevent overwriting an existing prompt to the user
if m.hasPrompt == false {
m.style = defStyle.
Foreground(tcell.ColorBlack).
Background(tcell.ColorMaroon)
-
+
if _, ok := colorscheme["error-message"]; ok {
m.style = colorscheme["error-message"]
}
m.AddLog(buf.String())
}
+func (m *Messenger) PromptText(msg ...interface{}) {
+ displayMessage := fmt.Sprint(msg...)
+ // if there is no active prompt then style and display the message as normal
+ m.message = displayMessage
+
+ m.style = defStyle
+
+ if _, ok := colorscheme["message"]; ok {
+ m.style = colorscheme["message"]
+ }
+
+ m.hasMessage = true
+ // add the message to the log regardless of active prompts
+ m.AddLog(displayMessage)
+}
+
// YesNoPrompt asks the user a yes or no question (waits for y or n) and returns the result
func (m *Messenger) YesNoPrompt(prompt string) (bool, bool) {
m.hasPrompt = true
- m.Message(prompt)
+ m.PromptText(prompt)
_, h := screen.Size()
for {
case *tcell.EventKey:
switch e.Key() {
case tcell.KeyRune:
- if e.Rune() == 'y' {
+ if e.Rune() == 'y' || e.Rune() == 'Y' {
m.AddLog("\t--> y")
m.hasPrompt = false
return true, false
- } else if e.Rune() == 'n' {
+ } else if e.Rune() == 'n' || e.Rune() == 'N' {
m.AddLog("\t--> n")
m.hasPrompt = false
return false, false
}
case tcell.KeyCtrlC, tcell.KeyCtrlQ, tcell.KeyEscape:
m.AddLog("\t--> (cancel)")
+ m.Clear()
+ m.Reset()
m.hasPrompt = false
return false, true
}
// LetterPrompt gives the user a prompt and waits for a one letter response
func (m *Messenger) LetterPrompt(prompt string, responses ...rune) (rune, bool) {
m.hasPrompt = true
- m.Message(prompt)
+ m.PromptText(prompt)
_, h := screen.Size()
for {
// This function blocks the main loop while waiting for input
func (m *Messenger) Prompt(prompt, placeholder, historyType string, completionTypes ...Completion) (string, bool) {
m.hasPrompt = true
- m.Message(prompt)
+ m.PromptText(prompt)
if _, ok := m.history[historyType]; !ok {
m.history[historyType] = []string{""}
} else {