X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;f=cmd%2Fmicro%2Fmessenger.go;h=0d20603a2df05f026a30e5f4293631d50937ae8c;hb=b9e916999fbf59a64c61c0921802821cd4b35993;hp=0056c61e2faf2475ece53e747a9b46599e6d86cb;hpb=fcb09556b13c3794a98e0bb7e7dded3c812eeee9;p=micro.git diff --git a/cmd/micro/messenger.go b/cmd/micro/messenger.go index 0056c61e..0d20603a 100644 --- a/cmd/micro/messenger.go +++ b/cmd/micro/messenger.go @@ -3,6 +3,7 @@ package main import ( "bufio" "bytes" + "encoding/gob" "fmt" "os" "strconv" @@ -70,9 +71,11 @@ type Messenger struct { gutterMessage bool } -func (m *Messenger) AddLog(msg string) { +// AddLog sends a message to the log view +func (m *Messenger) AddLog(msg ...interface{}) { + logMessage := fmt.Sprint(msg...) buffer := m.getBuffer() - buffer.insert(buffer.End(), []byte(msg+"\n")) + buffer.insert(buffer.End(), []byte(logMessage+"\n")) buffer.Cursor.Loc = buffer.End() buffer.Cursor.Relocate() } @@ -229,6 +232,7 @@ const ( OptionCompletion PluginCmdCompletion PluginNameCompletion + OptionValueCompletion ) // Prompt sends the user a message and waits for a response to be typed in @@ -294,6 +298,10 @@ func (m *Messenger) Prompt(prompt, placeholder, historyType string, completionTy chosen, suggestions = HelpComplete(currentArg) } else if completionType == OptionCompletion { chosen, suggestions = OptionComplete(currentArg) + } else if completionType == OptionValueCompletion { + if currentArgNum-1 > 0 { + chosen, suggestions = OptionValueComplete(args[currentArgNum-1], currentArg) + } } else if completionType == PluginCmdCompletion { chosen, suggestions = PluginCmdComplete(currentArg) } else if completionType == PluginNameCompletion { @@ -478,6 +486,55 @@ func (m *Messenger) Display() { } } +// LoadHistory attempts to load user history from configDir/buffers/history +// into the history map +// The savehistory option must be on +func (m *Messenger) LoadHistory() { + if GetGlobalOption("savehistory").(bool) { + file, err := os.Open(configDir + "/buffers/history") + var decodedMap map[string][]string + if err == nil { + decoder := gob.NewDecoder(file) + err = decoder.Decode(&decodedMap) + file.Close() + + if err != nil { + m.Error("Error loading history:", err) + return + } + } + + m.history = decodedMap + } else { + m.history = make(map[string][]string) + } +} + +// SaveHistory saves the user's command history to configDir/buffers/history +// only if the savehistory option is on +func (m *Messenger) SaveHistory() { + if GetGlobalOption("savehistory").(bool) { + // Don't save history past 100 + for k, v := range m.history { + if len(v) > 100 { + m.history[k] = v[0:100] + } + } + + file, err := os.Create(configDir + "/buffers/history") + if err == nil { + encoder := gob.NewEncoder(file) + + err = encoder.Encode(m.history) + if err != nil { + m.Error("Error saving history:", err) + return + } + file.Close() + } + } +} + // A GutterMessage is a message displayed on the side of the editor type GutterMessage struct { lineNum int