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)}
38 // SetNum sets all this tab's views to have the correct tab number
39 func (t *Tab) SetNum(num int) {
40 for _, v := range t.views {
45 func (t *Tab) Cleanup() {
49 func (t *Tab) Resize() {
56 // CurView returns the current view
57 func CurView() *View {
58 curTab := tabs[curTab]
59 return curTab.views[curTab.curView]
62 // TabbarString returns the string that should be displayed in the tabbar
63 // It also returns a map containing which indicies correspond to which tab number
64 // This is useful when we know that the mouse click has occured at an x location
65 // but need to know which tab that corresponds to to accurately change the tab
66 func TabbarString() (string, map[int]int) {
68 indicies := make(map[int]int)
69 for i, t := range tabs {
75 str += t.views[t.curView].Buf.Name
81 indicies[len(str)-1] = i + 1
87 // TabbarHandleMouseEvent checks the given mouse event if it is clicking on the tabbar
88 // If it is it changes the current tab accordingly
89 // This function returns true if the tab is changed
90 func TabbarHandleMouseEvent(event tcell.Event) bool {
91 // There is no tabbar displayed if there are less than 2 tabs
96 switch e := event.(type) {
97 case *tcell.EventMouse:
99 // Must be a left click
100 if button == tcell.Button1 {
105 str, indicies := TabbarString()
111 for k := range indicies {
112 keys = append(keys, k)
115 for _, k := range keys {
117 tabnum = indicies[k] - 1
129 // DisplayTabs displays the tabbar at the top of the editor if there are multiple tabs
135 str, _ := TabbarString()
137 tabBarStyle := defStyle.Reverse(true)
138 if style, ok := colorscheme["tabbar"]; ok {
142 // Maybe there is a unicode filename?
143 fileRunes := []rune(str)
144 w, _ := screen.Size()
145 for x := 0; x < w; x++ {
146 if x < len(fileRunes) {
147 screen.SetContent(x, 0, fileRunes[x], nil, tabBarStyle)
149 screen.SetContent(x, 0, ' ', nil, tabBarStyle)