]> git.lizzy.rs Git - micro.git/blobdiff - cmd/micro/tab.go
Code optimisation (#1117)
[micro.git] / cmd / micro / tab.go
index bbdd7eb0cffcad1169dfd922cba54ff2ce3bbd9d..0998779aee2887542186ea086e5a3f312566fe70 100644 (file)
@@ -8,11 +8,13 @@ import (
 
 var tabBarOffset int
 
+// A Tab holds an array of views and a splitTree to determine how the
+// views should be arranged
 type Tab struct {
        // This contains all the views in this tab
        // There is generally only one view per tab, but you can have
        // multiple views with splits
-       views []*View
+       Views []*View
        // This is the current view for this tab
        CurView int
 
@@ -22,12 +24,12 @@ type Tab struct {
 // NewTabFromView creates a new tab and puts the given view in the tab
 func NewTabFromView(v *View) *Tab {
        t := new(Tab)
-       t.views = append(t.views, v)
-       t.views[0].Num = 0
+       t.Views = append(t.Views, v)
+       t.Views[0].Num = 0
 
        t.tree = new(SplitTree)
        t.tree.kind = VerticalSplit
-       t.tree.children = []Node{NewLeafNode(t.views[0], t.tree)}
+       t.tree.children = []Node{NewLeafNode(t.Views[0], t.tree)}
 
        w, h := screen.Size()
        t.tree.width = w
@@ -36,6 +38,9 @@ func NewTabFromView(v *View) *Tab {
        if globalSettings["infobar"].(bool) {
                t.tree.height--
        }
+       if globalSettings["keymenu"].(bool) {
+               t.tree.height -= 2
+       }
 
        t.Resize()
 
@@ -45,15 +50,18 @@ func NewTabFromView(v *View) *Tab {
 // SetNum sets all this tab's views to have the correct tab number
 func (t *Tab) SetNum(num int) {
        t.tree.tabNum = num
-       for _, v := range t.views {
+       for _, v := range t.Views {
                v.TabNum = num
        }
 }
 
+// Cleanup cleans up the tree (for example if views have closed)
 func (t *Tab) Cleanup() {
        t.tree.Cleanup()
 }
 
+// Resize handles a resize event from the terminal and resizes
+// all child views correctly
 func (t *Tab) Resize() {
        w, h := screen.Size()
        t.tree.width = w
@@ -62,18 +70,24 @@ func (t *Tab) Resize() {
        if globalSettings["infobar"].(bool) {
                t.tree.height--
        }
+       if globalSettings["keymenu"].(bool) {
+               t.tree.height -= 2
+       }
 
        t.tree.ResizeSplits()
 
-       for i, v := range t.views {
+       for i, v := range t.Views {
                v.Num = i
+               if v.Type == vtTerm {
+                       v.term.Resize(v.Width, v.Height)
+               }
        }
 }
 
 // CurView returns the current view
 func CurView() *View {
        curTab := tabs[curTab]
-       return curTab.views[curTab.CurView]
+       return curTab.Views[curTab.CurView]
 }
 
 // TabbarString returns the string that should be displayed in the tabbar
@@ -89,13 +103,17 @@ func TabbarString() (string, map[int]int) {
                } else {
                        str += " "
                }
-               str += t.views[t.CurView].Buf.GetName()
+               buf := t.Views[t.CurView].Buf
+               str += buf.GetName()
+               if buf.Modified() {
+                       str += " +"
+               }
                if i == curTab {
                        str += "]"
                } else {
                        str += " "
                }
-               indicies[len(str)-1] = i + 1
+               indicies[Count(str)-1] = i + 1
                str += " "
        }
        return str, indicies