summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKoni Marti <koni.marti@gmail.com>2022-04-17 01:03:49 +0200
committerRobin Jarry <robin@jarry.cc>2022-04-17 12:18:22 +0200
commit6edfbfa8ce3760b7d0ee91bb6be768b296a50574 (patch)
treef612c7fa831ecbb30e6c4719cf4b8b5cd9844a39
parent1ecee8efa5319cc9628deca04c354b2ebf87d89c (diff)
downloadaerc-6edfbfa8ce3760b7d0ee91bb6be768b296a50574.zip
aerc: use contextual ui styleset for tabs/compose
Use contextual ui styleset for tabs and compose widgets. If no account is selected, use default styleset as fallback. Fixes: https://todo.sr.ht/~rjarry/aerc/3 Signed-off-by: Koni Marti <koni.marti@gmail.com> Acked-by: Robin Jarry <robin@jarry.cc>
-rw-r--r--lib/ui/tab.go14
-rw-r--r--widgets/aerc.go18
2 files changed, 24 insertions, 8 deletions
diff --git a/lib/ui/tab.go b/lib/ui/tab.go
index 07f6199..a67bdab 100644
--- a/lib/ui/tab.go
+++ b/lib/ui/tab.go
@@ -31,6 +31,7 @@ type Tab struct {
invalid bool
pinned bool
indexBeforePin int
+ uiConf *config.UIConfig
}
type TabStrip Tabs
@@ -47,10 +48,11 @@ func NewTabs(uiConf *config.UIConfig) *Tabs {
return tabs
}
-func (tabs *Tabs) Add(content Drawable, name string) *Tab {
+func (tabs *Tabs) Add(content Drawable, name string, uiConf *config.UIConfig) *Tab {
tab := &Tab{
Content: content,
Name: name,
+ uiConf: uiConf,
}
tabs.Tabs = append(tabs.Tabs, tab)
tabs.TabStrip.Invalidate()
@@ -283,9 +285,13 @@ func (tabs *Tabs) removeHistory(index int) {
func (strip *TabStrip) Draw(ctx *Context) {
x := 0
for i, tab := range strip.Tabs {
- style := strip.uiConfig.GetStyle(config.STYLE_TAB)
+ uiConfig := strip.uiConfig
+ if tab.uiConf != nil {
+ uiConfig = tab.uiConf
+ }
+ style := uiConfig.GetStyle(config.STYLE_TAB)
if strip.Selected == i {
- style = strip.uiConfig.GetStyleSelected(config.STYLE_TAB)
+ style = uiConfig.GetStyleSelected(config.STYLE_TAB)
}
tabWidth := 32
if ctx.Width()-x < tabWidth {
@@ -293,7 +299,7 @@ func (strip *TabStrip) Draw(ctx *Context) {
}
name := tab.Name
if tab.pinned {
- name = strip.uiConfig.PinnedTabMarker + name
+ name = uiConfig.PinnedTabMarker + name
}
trunc := runewidth.Truncate(name, tabWidth, "…")
x += ctx.Printf(x, 0, style, " %s ", trunc)
diff --git a/widgets/aerc.go b/widgets/aerc.go
index 94e6754..717547d 100644
--- a/widgets/aerc.go
+++ b/widgets/aerc.go
@@ -87,10 +87,11 @@ func NewAerc(conf *config.AercConfig, logger *log.Logger,
for i, acct := range conf.Accounts {
view, err := NewAccountView(aerc, conf, &conf.Accounts[i], logger, aerc, deferLoop)
if err != nil {
- tabs.Add(errorScreen(err.Error(), conf.Ui), acct.Name)
+ tabs.Add(errorScreen(err.Error(), conf.Ui), acct.Name, nil)
} else {
aerc.accounts[acct.Name] = view
- tabs.Add(view, acct.Name)
+ conf := view.UiConfig()
+ tabs.Add(view, acct.Name, &conf)
}
}
@@ -303,7 +304,11 @@ func (aerc *Aerc) Logger() *log.Logger {
}
func (aerc *Aerc) SelectedAccount() *AccountView {
- switch tab := aerc.SelectedTab().(type) {
+ return aerc.account(aerc.SelectedTab())
+}
+
+func (aerc *Aerc) account(d ui.Drawable) *AccountView {
+ switch tab := d.(type) {
case *AccountView:
return tab
case *MessageViewer:
@@ -335,7 +340,12 @@ func (aerc *Aerc) NumTabs() int {
}
func (aerc *Aerc) NewTab(clickable ui.Drawable, name string) *ui.Tab {
- tab := aerc.tabs.Add(clickable, name)
+ var uiConf *config.UIConfig = nil
+ if acct := aerc.account(clickable); acct != nil {
+ conf := acct.UiConfig()
+ uiConf = &conf
+ }
+ tab := aerc.tabs.Add(clickable, name, uiConf)
aerc.tabs.Select(len(aerc.tabs.Tabs) - 1)
aerc.UpdateStatus()
return tab