ulua.L.SetField(pkg, "BTScratch", luar.New(ulua.L, buffer.BTScratch.Kind))
ulua.L.SetField(pkg, "BTRaw", luar.New(ulua.L, buffer.BTRaw.Kind))
ulua.L.SetField(pkg, "BTInfo", luar.New(ulua.L, buffer.BTInfo.Kind))
+ ulua.L.SetField(pkg, "NewBuffer", luar.New(ulua.L, func(text, path string) *buffer.Buffer {
+ return buffer.NewBufferFromString(text, path, buffer.BTDefault)
+ }))
ulua.L.SetField(pkg, "NewBufferFromFile", luar.New(ulua.L, func(path string) (*buffer.Buffer, error) {
return buffer.NewBufferFromFile(path, buffer.BTDefault)
}))
multiWord bool
splitID uint64
+ tab *Tab
// remember original location of a search in case the search is canceled
searchOrig buffer.Loc
}
-func NewBufPane(buf *buffer.Buffer, win display.BWindow) *BufPane {
+func NewBufPane(buf *buffer.Buffer, win display.BWindow, tab *Tab) *BufPane {
h := new(BufPane)
h.Buf = buf
h.BWindow = win
+ h.tab = tab
h.Cursor = h.Buf.GetActiveCursor()
h.mouseReleased = true
return h
}
-func NewBufPaneFromBuf(buf *buffer.Buffer) *BufPane {
+func NewBufPaneFromBuf(buf *buffer.Buffer, tab *Tab) *BufPane {
w := display.NewBufWindow(0, 0, 0, 0, buf)
- return NewBufPane(buf, w)
+ return NewBufPane(buf, w, tab)
+}
+
+func (h *BufPane) SetTab(t *Tab) {
+ h.tab = t
+}
+
+func (h *BufPane) Tab() *Tab {
+ return h.tab
+}
+
+func (h *BufPane) ResizePane(size int) {
+ n := h.tab.GetNode(h.splitID)
+ n.ResizeSplit(size)
+ h.tab.Resize()
}
// PluginCB calls all plugin callbacks with a certain name and
}
}
-func (h *BufPane) VSplitBuf(buf *buffer.Buffer) *BufPane {
- e := NewBufPaneFromBuf(buf)
- e.splitID = MainTab().GetNode(h.splitID).VSplit(h.Buf.Settings["splitright"].(bool))
+func (h *BufPane) VSplitIndex(buf *buffer.Buffer, right bool) *BufPane {
+ e := NewBufPaneFromBuf(buf, h.tab)
+ e.splitID = MainTab().GetNode(h.splitID).VSplit(right)
MainTab().Panes = append(MainTab().Panes, e)
MainTab().Resize()
MainTab().SetActive(len(MainTab().Panes) - 1)
return e
}
-func (h *BufPane) HSplitBuf(buf *buffer.Buffer) *BufPane {
- e := NewBufPaneFromBuf(buf)
- e.splitID = MainTab().GetNode(h.splitID).HSplit(h.Buf.Settings["splitbottom"].(bool))
+func (h *BufPane) HSplitIndex(buf *buffer.Buffer, bottom bool) *BufPane {
+ e := NewBufPaneFromBuf(buf, h.tab)
+ e.splitID = MainTab().GetNode(h.splitID).HSplit(bottom)
MainTab().Panes = append(MainTab().Panes, e)
MainTab().Resize()
MainTab().SetActive(len(MainTab().Panes) - 1)
return e
}
+
+func (h *BufPane) VSplitBuf(buf *buffer.Buffer) *BufPane {
+ return h.VSplitIndex(buf, h.Buf.Settings["splitright"].(bool))
+}
+func (h *BufPane) HSplitBuf(buf *buffer.Buffer) *BufPane {
+ return h.HSplitIndex(buf, h.Buf.Settings["splitbottom"].(bool))
+}
func (h *BufPane) Close() {
h.Buf.Close()
}
func (h *BufPane) RawCmd(args []string) {
width, height := screen.Screen.Size()
iOffset := config.GetInfoBarOffset()
- tp := NewTabFromPane(0, 0, width, height-iOffset, NewRawPane())
+ tp := NewTabFromPane(0, 0, width, height-iOffset, NewRawPane(nil))
Tabs.AddTab(tp)
Tabs.SetActive(len(Tabs.List) - 1)
}
// TermCmd opens a terminal in the current view
func (h *BufPane) TermCmd(args []string) {
- ps := MainTab().Panes
+ ps := h.tab.Panes
if len(args) == 0 {
sh := os.Getenv("SHELL")
}
v := h.GetView()
- MainTab().Panes[i] = NewTermPane(v.X, v.Y, v.Width, v.Height, t, id)
+ MainTab().Panes[i] = NewTermPane(v.X, v.Y, v.Width, v.Height, t, id, MainTab())
MainTab().SetActive(i)
}
*info.InfoBuf
}
-func NewInfoPane(ib *info.InfoBuf, w display.BWindow) *InfoPane {
+func NewInfoPane(ib *info.InfoBuf, w display.BWindow, tab *Tab) *InfoPane {
ip := new(InfoPane)
ip.InfoBuf = ib
- ip.BufPane = NewBufPane(ib.Buffer, w)
+ ip.BufPane = NewBufPane(ib.Buffer, w, tab)
return ip
}
func NewInfoBar() *InfoPane {
ib := info.NewBuffer()
w := display.NewInfoWindow(ib)
- return NewInfoPane(ib, w)
+ return NewInfoPane(ib, w, nil)
}
func (h *InfoPane) Close() {
SetID(i uint64)
Name() string
Close()
+ SetTab(t *Tab)
+ Tab() *Tab
}
*BufPane
}
-func NewRawPaneFromWin(b *buffer.Buffer, win display.BWindow) *RawPane {
+func NewRawPaneFromWin(b *buffer.Buffer, win display.BWindow, tab *Tab) *RawPane {
rh := new(RawPane)
- rh.BufPane = NewBufPane(b, win)
+ rh.BufPane = NewBufPane(b, win, tab)
return rh
}
-func NewRawPane() *RawPane {
+func NewRawPane(tab *Tab) *RawPane {
b := buffer.NewBufferFromString("", "", buffer.BTRaw)
w := display.NewBufWindow(0, 0, 0, 0, b)
- return NewRawPaneFromWin(b, w)
+ return NewRawPaneFromWin(b, w, tab)
}
func (h *RawPane) HandleEvent(event tcell.Event) {
t.Node = views.NewRoot(x, y, width, height)
t.UIWindow = display.NewUIWindow(t.Node)
- e := NewBufPaneFromBuf(b)
+ e := NewBufPaneFromBuf(b, t)
e.SetID(t.ID())
t.Panes = append(t.Panes, e)
t := new(Tab)
t.Node = views.NewRoot(x, y, width, height)
t.UIWindow = display.NewUIWindow(t.Node)
-
+ pane.SetTab(t)
pane.SetID(t.ID())
t.Panes = append(t.Panes, pane)
mx, my := e.Position()
switch e.Buttons() {
case tcell.Button1:
- resizeID := t.GetMouseSplitID(buffer.Loc{mx, my})
if t.resizing != nil {
var size int
if t.resizing.Kind == views.STVert {
return
}
+ resizeID := t.GetMouseSplitID(buffer.Loc{mx, my})
if resizeID != 0 {
t.resizing = t.GetNode(uint64(resizeID))
return
id := MainTab().Panes[0].ID()
v := h.GetView()
- MainTab().Panes[0] = NewTermPane(v.X, v.Y, v.Width, v.Height, t, id)
+ MainTab().Panes[0] = NewTermPane(v.X, v.Y, v.Width, v.Height, t, id, MainTab())
MainTab().SetActive(0)
return nil
mouseReleased bool
id uint64
+ tab *Tab
}
-func NewTermPane(x, y, w, h int, t *shell.Terminal, id uint64) *TermPane {
+func NewTermPane(x, y, w, h int, t *shell.Terminal, id uint64, tab *Tab) *TermPane {
th := new(TermPane)
th.Terminal = t
th.id = id
th.mouseReleased = true
th.Window = display.NewTermWindow(x, y, w, h, t)
+ th.tab = tab
return th
}
t.id = i
}
+func (t *TermPane) SetTab(tab *Tab) {
+ t.tab = tab
+}
+
+func (t *TermPane) Tab() *Tab {
+ return t.tab
+}
+
func (t *TermPane) Close() {}
func (t *TermPane) Quit() {
reterr = errors.New("Plugin " + p.Name + ": " + err.Error())
continue
}
- if v, ok := val.(lua.LBool); !ok {
- reterr = errors.New(p.Name + "." + fn + " should return a boolean")
- } else {
+ if v, ok := val.(lua.LBool); ok {
retbool = retbool && bool(v)
}
}