aerc/widgets/termhost.go

53 lines
1.0 KiB
Go

package widgets
import (
"github.com/gdamore/tcell"
"git.sr.ht/~sircmpwn/aerc2/config"
"git.sr.ht/~sircmpwn/aerc2/lib/ui"
)
type TermHost struct {
grid *ui.Grid
term *Terminal
}
// Thin wrapper around terminal which puts it in a grid and passes through
// input events. A bit of a hack tbh
func NewTermHost(term *Terminal, conf *config.AercConfig) *TermHost {
grid := ui.NewGrid().Rows([]ui.GridSpec{
{ui.SIZE_WEIGHT, 1},
}).Columns([]ui.GridSpec{
{ui.SIZE_EXACT, conf.Ui.SidebarWidth},
{ui.SIZE_WEIGHT, 1},
})
grid.AddChild(term).At(0, 1)
return &TermHost{grid, term}
}
func (th *TermHost) Draw(ctx *ui.Context) {
th.grid.Draw(ctx)
}
func (th TermHost) Invalidate() {
th.grid.Invalidate()
}
func (th *TermHost) OnInvalidate(fn func(d ui.Drawable)) {
th.grid.OnInvalidate(func(_ ui.Drawable) {
fn(th)
})
}
func (th *TermHost) Event(event tcell.Event) bool {
return th.term.Event(event)
}
func (th *TermHost) Focus(focus bool) {
th.term.Focus(focus)
}
func (th *TermHost) Terminal() *Terminal {
return th.term
}