"fmt"
"os"
"strconv"
+ "strings"
"github.com/zyedidia/clipboard"
"github.com/zyedidia/tcell"
screenWasNil := screen == nil
if !screenWasNil {
screen.Fini()
+ screen = nil
}
fmt.Println(msg...)
- messenger.addLog(fmt.Sprint(msg...))
fmt.Print("\nPress enter to continue")
reader := bufio.NewReader(os.Stdin)
gutterMessage bool
}
-func (m *Messenger) addLog(msg string) {
+func (m *Messenger) AddLog(msg string) {
buffer := m.getBuffer()
- buffer.Insert(buffer.End(), msg+"\n")
+ buffer.insert(buffer.End(), []byte(msg+"\n"))
+ buffer.Cursor.Loc = buffer.End()
+ buffer.Cursor.Relocate()
}
func (m *Messenger) getBuffer() *Buffer {
if m.log == nil {
- m.log = NewBuffer([]byte{}, "")
- m.log.Name = "Log"
+ m.log = NewBuffer(strings.NewReader(""), "")
+ m.log.name = "Log"
}
return m.log
}
if _, ok := colorscheme["message"]; ok {
m.style = colorscheme["message"]
}
- m.addLog(m.message)
+ m.AddLog(m.message)
m.hasMessage = true
}
if _, ok := colorscheme["error-message"]; ok {
m.style = colorscheme["error-message"]
}
- m.addLog(m.message)
+ m.AddLog(m.message)
m.hasMessage = true
}
switch e.Key() {
case tcell.KeyRune:
if e.Rune() == 'y' {
- m.addLog("\t--> y")
+ m.AddLog("\t--> y")
m.hasPrompt = false
return true, false
} else if e.Rune() == 'n' {
- m.addLog("\t--> n")
+ m.AddLog("\t--> n")
m.hasPrompt = false
return false, false
}
case tcell.KeyCtrlC, tcell.KeyCtrlQ, tcell.KeyEscape:
- m.addLog("\t--> (cancel)")
+ m.AddLog("\t--> (cancel)")
m.hasPrompt = false
return false, true
}
case tcell.KeyRune:
for _, r := range responses {
if e.Rune() == r {
- m.addLog("\t--> " + string(r))
+ m.AddLog("\t--> " + string(r))
m.Clear()
m.Reset()
m.hasPrompt = false
}
}
case tcell.KeyCtrlC, tcell.KeyCtrlQ, tcell.KeyEscape:
- m.addLog("\t--> (cancel)")
+ m.AddLog("\t--> (cancel)")
m.Clear()
m.Reset()
m.hasPrompt = false
CommandCompletion
HelpCompletion
OptionCompletion
+ PluginCmdCompletion
+ PluginNameCompletion
)
// Prompt sends the user a message and waits for a response to be typed in
// This function blocks the main loop while waiting for input
-func (m *Messenger) Prompt(prompt, historyType string, completionTypes ...Completion) (string, bool) {
+func (m *Messenger) Prompt(prompt, placeholder, historyType string, completionTypes ...Completion) (string, bool) {
m.hasPrompt = true
m.Message(prompt)
if _, ok := m.history[historyType]; !ok {
}
m.historyNum = len(m.history[historyType]) - 1
- response, canceled := "", true
+ response, canceled := placeholder, true
+ m.response = response
+ m.cursorx = Count(placeholder)
RedrawAll()
for m.hasPrompt {
switch e.Key() {
case tcell.KeyCtrlQ, tcell.KeyCtrlC, tcell.KeyEscape:
// Cancel
- m.addLog("\t--> (cancel)")
+ m.AddLog("\t--> (cancel)")
m.hasPrompt = false
case tcell.KeyEnter:
// User is done entering their response
- m.addLog("\t--> " + m.response)
+ m.AddLog("\t--> " + m.response)
m.hasPrompt = false
response, canceled = m.response, false
m.history[historyType][len(m.history[historyType])-1] = response
chosen, suggestions = HelpComplete(currentArg)
} else if completionType == OptionCompletion {
chosen, suggestions = OptionComplete(currentArg)
+ } else if completionType == PluginCmdCompletion {
+ chosen, suggestions = PluginCmdComplete(currentArg)
+ } else if completionType == PluginNameCompletion {
+ chosen, suggestions = PluginNameComplete(currentArg)
} else if completionType < NoCompletion {
chosen, suggestions = PluginComplete(completionType, currentArg)
}