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