-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathview.go
78 lines (65 loc) · 1.23 KB
/
view.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
package main
import (
"math"
"github.com/gdamore/tcell"
)
type ViewHighlight struct {
Beg *Location
End *Location
Style tcell.Style
}
type View struct {
Buf *Buffer
LineOffset int
CenterPending bool
Highlights []*ViewHighlight
}
func NewView(buf *Buffer) *View {
return &View{
Buf: buf,
LineOffset: 0,
CenterPending: false,
Highlights: []*ViewHighlight{},
}
}
func (v *View) AdjustScroll(w, h int) {
l := v.Buf.Cursor.Line
if v.CenterPending {
v.LineOffset = max(l-int(math.Floor(float64(h-1)/2)), 1)
v.CenterPending = false
return
}
// too low
// (h-2) as height includes status bar and moving to 0 based
if l > h-2+v.LineOffset {
v.LineOffset = max(l-h+2, 0)
}
// too high
if l < v.LineOffset {
v.LineOffset = l
}
}
// }}}
// {{{ ViewTree
type ViewTree struct {
Parent *ViewTree
Left *ViewTree
Right *ViewTree
Top *ViewTree
Bottom *ViewTree
Leaf *View
Size int
}
func NewViewTreeLeaf(parent *ViewTree, v *View) *ViewTree {
return &ViewTree{Parent: parent, Leaf: v, Size: 50}
}
// }}}
// {{{ message
func message(m string) {
editorMessage = m
editorMessageType = "info"
}
func messageError(m string) {
editorMessage = m
editorMessageType = "error"
}