diff --git a/widgets/account.go b/widgets/account.go index b92a619..bc2dc36 100644 --- a/widgets/account.go +++ b/widgets/account.go @@ -42,7 +42,7 @@ type AccountView struct { func (acct *AccountView) UiConfig() *config.UIConfig { if dirlist := acct.Directories(); dirlist != nil { - return dirlist.UiConfig() + return dirlist.UiConfig("") } return acct.uiConf } @@ -291,16 +291,17 @@ func (acct *AccountView) onMessage(msg types.WorkerMessage) { if store, ok := acct.dirlist.MsgStore(msg.Info.Name); ok { store.Update(msg) } else { + name := msg.Info.Name store = lib.NewMessageStore(acct.worker, msg.Info, acct.GetSortCriteria(), - acct.UiConfig().ThreadingEnabled, - acct.UiConfig().ForceClientThreads, - acct.UiConfig().ClientThreadsDelay, + acct.dirlist.UiConfig(name).ThreadingEnabled, + acct.dirlist.UiConfig(name).ForceClientThreads, + acct.dirlist.UiConfig(name).ClientThreadsDelay, func(msg *models.MessageInfo) { acct.conf.Triggers.ExecNewEmail(acct.acct, acct.conf, msg) }, func() { - if acct.UiConfig().NewMessageBell { + if acct.dirlist.UiConfig(name).NewMessageBell { acct.host.Beep() } }) diff --git a/widgets/dirlist.go b/widgets/dirlist.go index 03f9239..38f3c84 100644 --- a/widgets/dirlist.go +++ b/widgets/dirlist.go @@ -43,7 +43,7 @@ type DirectoryLister interface { FilterDirs([]string, []string, bool) []string - UiConfig() *config.UIConfig + UiConfig(string) *config.UIConfig } type DirectoryList struct { @@ -78,7 +78,7 @@ func NewDirectoryList(conf *config.AercConfig, acctConf *config.AccountConfig, skipSelectCancel: cancel, uiConf: uiConfMap, } - uiConf := dirlist.UiConfig() + uiConf := dirlist.UiConfig("") dirlist.spinner = NewSpinner(uiConf) dirlist.spinner.OnInvalidate(func(_ ui.Drawable) { dirlist.Invalidate() @@ -92,15 +92,18 @@ func NewDirectoryList(conf *config.AercConfig, acctConf *config.AccountConfig, return dirlist } -func (dirlist *DirectoryList) UiConfig() *config.UIConfig { - if ui, ok := dirlist.uiConf[dirlist.Selected()]; ok { +func (dirlist *DirectoryList) UiConfig(dir string) *config.UIConfig { + if dir == "" { + dir = dirlist.Selected() + } + if ui, ok := dirlist.uiConf[dir]; ok { return ui } ui := dirlist.aercConf.GetUiConfig(map[config.ContextType]string{ config.UI_CONTEXT_ACCOUNT: dirlist.acctConf.Name, - config.UI_CONTEXT_FOLDER: dirlist.Selected(), + config.UI_CONTEXT_FOLDER: dir, }) - dirlist.uiConf[dirlist.Selected()] = ui + dirlist.uiConf[dir] = ui return ui } @@ -154,7 +157,7 @@ func (dirlist *DirectoryList) Select(name string) { defer logging.PanicHandler() select { - case <-time.After(dirlist.UiConfig().DirListDelay): + case <-time.After(dirlist.UiConfig(name).DirListDelay): newStore := true for _, s := range dirlist.store.List() { if s == dirlist.selecting { @@ -218,7 +221,7 @@ func (dirlist *DirectoryList) getDirString(name string, width int, recentUnseen formatted = runewidth.FillRight(formatted, width-len(s)) formatted = runewidth.Truncate(formatted, width-len(s), "…") } - for _, char := range dirlist.UiConfig().DirListFormat { + for _, char := range dirlist.UiConfig(name).DirListFormat { switch char { case '%': if percent { @@ -283,7 +286,7 @@ func (dirlist *DirectoryList) getRUEString(name string) string { func (dirlist *DirectoryList) Draw(ctx *ui.Context) { ctx.Fill(0, 0, ctx.Width(), ctx.Height(), ' ', - dirlist.UiConfig().GetStyle(config.STYLE_DIRLIST_DEFAULT)) + dirlist.UiConfig("").GetStyle(config.STYLE_DIRLIST_DEFAULT)) if dirlist.spinner.IsRunning() { dirlist.spinner.Draw(ctx) @@ -291,8 +294,8 @@ func (dirlist *DirectoryList) Draw(ctx *ui.Context) { } if len(dirlist.dirs) == 0 { - style := dirlist.UiConfig().GetStyle(config.STYLE_DIRLIST_DEFAULT) - ctx.Printf(0, 0, style, dirlist.UiConfig().EmptyDirlist) + style := dirlist.UiConfig("").GetStyle(config.STYLE_DIRLIST_DEFAULT) + ctx.Printf(0, 0, style, dirlist.UiConfig("").EmptyDirlist) return } @@ -324,10 +327,10 @@ func (dirlist *DirectoryList) Draw(ctx *ui.Context) { case 2: dirStyle = append(dirStyle, config.STYLE_DIRLIST_RECENT) } - style := dirlist.UiConfig().GetComposedStyle( + style := dirlist.UiConfig(name).GetComposedStyle( config.STYLE_DIRLIST_DEFAULT, dirStyle) if name == dirlist.selecting { - style = dirlist.UiConfig().GetComposedStyleSelected( + style = dirlist.UiConfig(name).GetComposedStyleSelected( config.STYLE_DIRLIST_DEFAULT, dirStyle) } ctx.Fill(0, row, textWidth, 1, ' ', style) diff --git a/widgets/dirtree.go b/widgets/dirtree.go index c3b8077..65fb311 100644 --- a/widgets/dirtree.go +++ b/widgets/dirtree.go @@ -51,7 +51,7 @@ func (dt *DirectoryTree) UpdateList(done func([]string)) { func (dt *DirectoryTree) Draw(ctx *ui.Context) { ctx.Fill(0, 0, ctx.Width(), ctx.Height(), ' ', - dt.UiConfig().GetStyle(config.STYLE_DIRLIST_DEFAULT)) + dt.UiConfig("").GetStyle(config.STYLE_DIRLIST_DEFAULT)) if dt.DirectoryList.spinner.IsRunning() { dt.DirectoryList.spinner.Draw(ctx) @@ -60,8 +60,8 @@ func (dt *DirectoryTree) Draw(ctx *ui.Context) { n := dt.countVisible(dt.list) if n == 0 { - style := dt.UiConfig().GetStyle(config.STYLE_DIRLIST_DEFAULT) - ctx.Printf(0, 0, style, dt.UiConfig().EmptyDirlist) + style := dt.UiConfig("").GetStyle(config.STYLE_DIRLIST_DEFAULT) + ctx.Printf(0, 0, style, dt.UiConfig("").EmptyDirlist) return } @@ -104,10 +104,10 @@ func (dt *DirectoryTree) Draw(ctx *ui.Context) { case 2: dirStyle = append(dirStyle, config.STYLE_DIRLIST_RECENT) } - style := dt.UiConfig().GetComposedStyle( + style := dt.UiConfig(path).GetComposedStyle( config.STYLE_DIRLIST_DEFAULT, dirStyle) if i == dt.listIdx { - style = dt.UiConfig().GetComposedStyleSelected( + style = dt.UiConfig(path).GetComposedStyleSelected( config.STYLE_DIRLIST_DEFAULT, dirStyle) } ctx.Fill(0, row, textWidth, 1, ' ', style) diff --git a/widgets/msglist.go b/widgets/msglist.go index e505608..935566f 100644 --- a/widgets/msglist.go +++ b/widgets/msglist.go @@ -201,7 +201,7 @@ func (ml *MessageList) drawRow(textWidth int, ctx *ui.Context, uid uint32, row i // should implement a better per-message styling method // Check if we have any applicable ContextualUIConfigs confs := ml.aerc.conf.GetContextualUIConfigs() - uiConfig := acct.Directories().UiConfig() + uiConfig := acct.Directories().UiConfig(store.DirInfo.Name) for _, c := range confs { if c.ContextType == config.UI_CONTEXT_SUBJECT && msg.Envelope != nil { if c.Regex.Match([]byte(msg.Envelope.Subject)) {