aboutsummaryrefslogtreecommitdiff
path: root/ui/render.go
diff options
context:
space:
mode:
Diffstat (limited to 'ui/render.go')
-rw-r--r--ui/render.go45
1 files changed, 45 insertions, 0 deletions
diff --git a/ui/render.go b/ui/render.go
new file mode 100644
index 0000000..bca0cf6
--- /dev/null
+++ b/ui/render.go
@@ -0,0 +1,45 @@
+package ui
+
+import (
+ tb "github.com/nsf/termbox-go"
+
+ "git.sr.ht/~sircmpwn/aerc2/config"
+)
+
+func Initialize(conf *config.AercConfig) (*UIState, error) {
+ state := UIState{
+ InvalidPanes: InvalidateAll,
+ Tabs: make([]AercTab, len(conf.Accounts)),
+ }
+ // TODO: Initialize each tab to a mailbox tab
+ if err := tb.Init(); err != nil {
+ return nil, err
+ }
+ tb.SetInputMode(tb.InputEsc | tb.InputMouse)
+ tb.SetOutputMode(tb.Output256)
+ return &state, nil
+}
+
+func (state *UIState) Close() {
+ tb.Close()
+}
+
+func (state *UIState) Invalidate(what uint) {
+ state.InvalidPanes |= what
+}
+
+func (state *UIState) Tick() bool {
+ switch e := tb.PollEvent(); e.Type {
+ case tb.EventKey:
+ if e.Key == tb.KeyEsc {
+ state.Exit = true
+ }
+ case tb.EventResize:
+ state.Invalidate(InvalidateAll)
+ }
+ if state.InvalidPanes != 0 {
+ // TODO: re-render
+ state.InvalidPanes = 0
+ }
+ return true
+}