]> git.lizzy.rs Git - micro.git/blob - internal/buffer/message.go
Merge pull request #1426 from Nergel3/master
[micro.git] / internal / buffer / message.go
1 package buffer
2
3 import (
4         "github.com/zyedidia/micro/internal/config"
5         "github.com/zyedidia/tcell"
6 )
7
8 type MsgType int
9
10 const (
11         MTInfo = iota
12         MTWarning
13         MTError
14 )
15
16 type Message struct {
17         Msg        string
18         Start, End Loc
19         Kind       MsgType
20         Owner      string
21 }
22
23 func NewMessage(owner string, msg string, start, end Loc, kind MsgType) *Message {
24         return &Message{
25                 Msg:   msg,
26                 Start: start,
27                 End:   end,
28                 Kind:  kind,
29                 Owner: owner,
30         }
31 }
32
33 func NewMessageAtLine(owner string, msg string, line int, kind MsgType) *Message {
34         start := Loc{-1, line - 1}
35         end := start
36         return NewMessage(owner, msg, start, end, kind)
37 }
38
39 func (m *Message) Style() tcell.Style {
40         switch m.Kind {
41         case MTInfo:
42                 if style, ok := config.Colorscheme["gutter-info"]; ok {
43                         return style
44                 }
45         case MTWarning:
46                 if style, ok := config.Colorscheme["gutter-warning"]; ok {
47                         return style
48                 }
49         case MTError:
50                 if style, ok := config.Colorscheme["gutter-error"]; ok {
51                         return style
52                 }
53         }
54         return config.DefStyle
55 }
56
57 func (b *Buffer) AddMessage(m *Message) {
58         b.Messages = append(b.Messages, m)
59 }
60
61 func (b *Buffer) removeMsg(i int) {
62         copy(b.Messages[i:], b.Messages[i+1:])
63         b.Messages[len(b.Messages)-1] = nil
64         b.Messages = b.Messages[:len(b.Messages)-1]
65 }
66
67 func (b *Buffer) ClearMessages(owner string) {
68         for i := len(b.Messages) - 1; i >= 0; i-- {
69                 if b.Messages[i].Owner == owner {
70                         b.removeMsg(i)
71                 }
72         }
73 }
74
75 func (b *Buffer) ClearAllMessages() {
76         b.Messages = make([]*Message, 0)
77 }