6 "github.com/zyedidia/tcell"
10 // This contains all the views in this tab
11 // There is generally only one view per tab, but you can have
12 // multiple views with splits
14 // This is the current view for this tab
16 // Generally this is the name of the current view's buffer
22 // NewTabFromView creates a new tab and puts the given view in the tab
23 func NewTabFromView(v *View) *Tab {
25 t.views = append(t.views, v)
28 t.tree = new(SplitTree)
29 t.tree.kind = VerticalSplit
30 t.tree.children = []Node{NewLeafNode(t.views[0], t.tree)}
36 if globalSettings["infobar"].(bool) {
43 // SetNum sets all this tab's views to have the correct tab number
44 func (t *Tab) SetNum(num int) {
45 for _, v := range t.views {
50 func (t *Tab) Cleanup() {
54 func (t *Tab) Resize() {
59 if globalSettings["infobar"].(bool) {
66 // CurView returns the current view
67 func CurView() *View {
68 curTab := tabs[curTab]
69 return curTab.views[curTab.curView]
72 // TabbarString returns the string that should be displayed in the tabbar
73 // It also returns a map containing which indicies correspond to which tab number
74 // This is useful when we know that the mouse click has occurred at an x location
75 // but need to know which tab that corresponds to to accurately change the tab
76 func TabbarString() (string, map[int]int) {
78 indicies := make(map[int]int)
79 for i, t := range tabs {
85 str += t.views[t.curView].Buf.Name
91 indicies[len(str)-1] = i + 1
97 // TabbarHandleMouseEvent checks the given mouse event if it is clicking on the tabbar
98 // If it is it changes the current tab accordingly
99 // This function returns true if the tab is changed
100 func TabbarHandleMouseEvent(event tcell.Event) bool {
101 // There is no tabbar displayed if there are less than 2 tabs
106 switch e := event.(type) {
107 case *tcell.EventMouse:
108 button := e.Buttons()
109 // Must be a left click
110 if button == tcell.Button1 {
115 str, indicies := TabbarString()
121 for k := range indicies {
122 keys = append(keys, k)
125 for _, k := range keys {
127 tabnum = indicies[k] - 1
139 // DisplayTabs displays the tabbar at the top of the editor if there are multiple tabs
145 str, _ := TabbarString()
147 tabBarStyle := defStyle.Reverse(true)
148 if style, ok := colorscheme["tabbar"]; ok {
152 // Maybe there is a unicode filename?
153 fileRunes := []rune(str)
154 w, _ := screen.Size()
155 for x := 0; x < w; x++ {
156 if x < len(fileRunes) {
157 screen.SetContent(x, 0, fileRunes[x], nil, tabBarStyle)
159 screen.SetContent(x, 0, ' ', nil, tabBarStyle)