]> git.lizzy.rs Git - micro.git/blobdiff - cmd/micro/messenger.go
make undothresthold a setting (part 2)
[micro.git] / cmd / micro / messenger.go
index ff164c3b6edc02a74dd295884e3a970a1db3f2bc..27f556912adccbaf6300fb0e748772db2303c46c 100644 (file)
@@ -2,11 +2,12 @@ package main
 
 import (
        "bufio"
+       "bytes"
        "fmt"
        "os"
        "strconv"
 
-       "github.com/gdamore/tcell"
+       "github.com/zyedidia/tcell"
 )
 
 // TermMessage sends a message to the user in the terminal. This usually occurs before
@@ -15,12 +16,21 @@ import (
 // The function must be called when the screen is not initialized
 // This will write the message, and wait for the user
 // to press and key to continue
-func TermMessage(msg string) {
-       fmt.Println(msg)
+func TermMessage(msg ...interface{}) {
+       screenWasNil := screen == nil
+       if !screenWasNil {
+               screen.Fini()
+       }
+
+       fmt.Println(msg...)
        fmt.Print("\nPress enter to continue")
 
        reader := bufio.NewReader(os.Stdin)
        reader.ReadString('\n')
+
+       if !screenWasNil {
+               InitScreen()
+       }
 }
 
 // TermError sends an error to the user in the terminal. Like TermMessage except formatted
@@ -46,11 +56,16 @@ type Messenger struct {
 
        // We have to keep track of the cursor for prompting
        cursorx int
+
+       // Is the current message a message from the gutter
+       gutterMessage bool
 }
 
 // Message sends a message to the user
-func (m *Messenger) Message(msg string) {
-       m.message = msg
+func (m *Messenger) Message(msg ...interface{}) {
+       buf := new(bytes.Buffer)
+       fmt.Fprint(buf, msg...)
+       m.message = buf.String()
        m.style = defStyle
 
        if _, ok := colorscheme["message"]; ok {
@@ -60,8 +75,10 @@ func (m *Messenger) Message(msg string) {
 }
 
 // Error sends an error message to the user
-func (m *Messenger) Error(msg string) {
-       m.message = msg
+func (m *Messenger) Error(msg ...interface{}) {
+       buf := new(bytes.Buffer)
+       fmt.Fprint(buf, msg...)
+       m.message = buf.String()
        m.style = defStyle.
                Foreground(tcell.ColorBlack).
                Background(tcell.ColorMaroon)
@@ -73,7 +90,7 @@ func (m *Messenger) Error(msg string) {
 }
 
 // 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 {
+func (m *Messenger) YesNoPrompt(prompt string) (bool, bool) {
        m.Message(prompt)
 
        for {
@@ -84,12 +101,15 @@ func (m *Messenger) YesNoPrompt(prompt string) bool {
 
                switch e := event.(type) {
                case *tcell.EventKey:
-                       if e.Key() == tcell.KeyRune {
+                       switch e.Key() {
+                       case tcell.KeyRune:
                                if e.Rune() == 'y' {
-                                       return true
+                                       return true, false
                                } else if e.Rune() == 'n' {
-                                       return false
+                                       return false, false
                                }
+                       case tcell.KeyCtrlC, tcell.KeyCtrlQ, tcell.KeyEscape:
+                               return false, true
                        }
                }
        }
@@ -147,14 +167,11 @@ func (m *Messenger) HandleEvent(event tcell.Event) {
                        if m.cursorx < Count(m.response) {
                                m.cursorx++
                        }
-               case tcell.KeyBackspace2:
+               case tcell.KeyBackspace2, tcell.KeyBackspace:
                        if m.cursorx > 0 {
                                m.response = string([]rune(m.response)[:m.cursorx-1]) + string(m.response[m.cursorx:])
                        }
                        m.cursorx--
-               case tcell.KeySpace:
-                       m.response += " "
-                       m.cursorx++
                case tcell.KeyRune:
                        m.response = Insert(m.response, m.cursorx, string(e.Rune()))
                        m.cursorx++
@@ -191,3 +208,20 @@ func (m *Messenger) Display() {
                screen.Show()
        }
 }
+
+// A GutterMessage is a message displayed on the side of the editor
+type GutterMessage struct {
+       lineNum int
+       msg     string
+       kind    int
+}
+
+// These are the different types of messages
+const (
+       // GutterInfo represents a simple info message
+       GutterInfo = iota
+       // GutterWarning represents a compiler warning
+       GutterWarning
+       // GutterError represents a compiler error
+       GutterError
+)