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) {
45 // SetNum sets all this tab's views to have the correct tab number
46 func (t *Tab) SetNum(num int) {
48 for _, v := range t.views {
53 func (t *Tab) Cleanup() {
57 func (t *Tab) Resize() {
62 if globalSettings["infobar"].(bool) {
69 // CurView returns the current view
70 func CurView() *View {
71 curTab := tabs[curTab]
72 return curTab.views[curTab.curView]
75 // TabbarString returns the string that should be displayed in the tabbar
76 // It also returns a map containing which indicies correspond to which tab number
77 // This is useful when we know that the mouse click has occurred at an x location
78 // but need to know which tab that corresponds to to accurately change the tab
79 func TabbarString() (string, map[int]int) {
81 indicies := make(map[int]int)
82 for i, t := range tabs {
88 str += t.views[t.curView].Buf.Name
94 indicies[len(str)-1] = i + 1
100 // TabbarHandleMouseEvent checks the given mouse event if it is clicking on the tabbar
101 // If it is it changes the current tab accordingly
102 // This function returns true if the tab is changed
103 func TabbarHandleMouseEvent(event tcell.Event) bool {
104 // There is no tabbar displayed if there are less than 2 tabs
109 switch e := event.(type) {
110 case *tcell.EventMouse:
111 button := e.Buttons()
112 // Must be a left click
113 if button == tcell.Button1 {
118 str, indicies := TabbarString()
124 for k := range indicies {
125 keys = append(keys, k)
128 for _, k := range keys {
130 tabnum = indicies[k] - 1
142 // DisplayTabs displays the tabbar at the top of the editor if there are multiple tabs
148 str, _ := TabbarString()
150 tabBarStyle := defStyle.Reverse(true)
151 if style, ok := colorscheme["tabbar"]; ok {
155 // Maybe there is a unicode filename?
156 fileRunes := []rune(str)
157 w, _ := screen.Size()
158 for x := 0; x < w; x++ {
159 if x < len(fileRunes) {
160 screen.SetContent(x, 0, fileRunes[x], nil, tabBarStyle)
162 screen.SetContent(x, 0, ' ', nil, tabBarStyle)