aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--CHANGELOG.md1
-rw-r--r--config/ui.go104
-rw-r--r--doc/aerc-config.5.scd10
-rw-r--r--widgets/msglist.go5
4 files changed, 57 insertions, 63 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index f126d485..cf3c7067 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -42,6 +42,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
of the (now deprecated) `index-format` placeholders.
- `[statusline].render-format` has been replaced by `status-columns`.
- Removed support for go < 1.17.
+- Removed support for `[ui:subject...]` contextual sections in `aerc.conf`.
## [0.14.0](https://git.sr.ht/~rjarry/aerc/refs/0.14.0) - 2023-01-04
diff --git a/config/ui.go b/config/ui.go
index 56a59e74..dfd66224 100644
--- a/config/ui.go
+++ b/config/ui.go
@@ -1,6 +1,7 @@
package config
import (
+ "bytes"
"fmt"
"path"
"regexp"
@@ -87,7 +88,6 @@ type uiContextType int
const (
uiContextFolder uiContextType = iota
uiContextAccount
- uiContextSubject
)
type UiConfigContext struct {
@@ -108,62 +108,80 @@ var Ui = &UIConfig{
contextualCache: make(map[uiContextKey]*UIConfig),
}
+var uiContextualSectionRe = regexp.MustCompile(`^ui:(account|folder|subject)([~=])(.+)$`)
+
func parseUi(file *ini.File) error {
if err := Ui.parse(file.Section("ui")); err != nil {
return err
}
- for _, sectionName := range file.SectionStrings() {
- if !strings.Contains(sectionName, "ui:") {
+ var ctxSubjectSections []*ini.Section
+
+ for _, section := range file.Sections() {
+ var err error
+ groups := uiContextualSectionRe.FindStringSubmatch(section.Name())
+ if groups == nil {
continue
}
-
- uiSection, err := file.GetSection(sectionName)
- if err != nil {
- return err
+ ctx, separator, value := groups[1], groups[2], groups[3]
+ if ctx == "subject" {
+ log.Warnf(
+ "%s contextual subject config has been replaced by dynamic msglist_* styles.",
+ section.Name())
+ ctxSubjectSections = append(ctxSubjectSections, section)
+ continue
}
+
uiSubConfig := UIConfig{}
- if err := uiSubConfig.parse(uiSection); err != nil {
+ if err = uiSubConfig.parse(section); err != nil {
return err
}
contextualUi := UiConfigContext{
UiConfig: &uiSubConfig,
}
- var index int
- switch {
- case strings.Contains(sectionName, "~"):
- index = strings.Index(sectionName, "~")
- regex := string(sectionName[index+1:])
- contextualUi.Regex, err = regexp.Compile(regex)
- if err != nil {
- return err
- }
- case strings.Contains(sectionName, "="):
- index = strings.Index(sectionName, "=")
- value := string(sectionName[index+1:])
- contextualUi.Regex, err = regexp.Compile(regexp.QuoteMeta(value))
- if err != nil {
- return err
- }
- default:
- return fmt.Errorf("Invalid Ui Context regex in %s", sectionName)
- }
-
- switch sectionName[3:index] {
+ switch ctx {
case "account":
contextualUi.ContextType = uiContextAccount
case "folder":
contextualUi.ContextType = uiContextFolder
- case "subject":
- contextualUi.ContextType = uiContextSubject
- default:
- return fmt.Errorf("Unknown Contextual Ui Section: %s", sectionName)
}
+ if separator == "=" {
+ value = "^" + regexp.QuoteMeta(value) + "$"
+ }
+ contextualUi.Regex, err = regexp.Compile(value)
+ if err != nil {
+ return err
+ }
+
Ui.contextualUis = append(Ui.contextualUis, &contextualUi)
Ui.contextualCounts[contextualUi.ContextType]++
}
+ if len(ctxSubjectSections) > 0 {
+ f := ini.Empty()
+ for _, sec := range ctxSubjectSections {
+ s, _ := f.NewSection(sec.Name())
+ for k, v := range sec.KeysHash() {
+ s.NewKey(k, v) //nolint:errcheck // who cares?
+ }
+ }
+ var buf bytes.Buffer
+ f.WriteTo(&buf) //nolint:errcheck // who cares?
+ w := Warning{
+ Title: "DEPRECATION WARNING: SUBJECT UI SECTIONS",
+ Body: fmt.Sprintf(`
+Contextual UI configuration based on subject value has been deprecated and
+replaced by dynamic msglist_* styles in stylesets.
+
+The following configuration sections from aerc.conf have been ignored:
+
+%sYou should remove them to get rid of that warning and update your styleset(s)
+accordingly. See aerc-stylesets(7) for more details.`, buf.String()),
+ }
+ Warnings = append(Warnings, w)
+ }
+
// append default paths to styleset-dirs
for _, dir := range SearchDirs {
Ui.StyleSetDirs = append(
@@ -521,16 +539,11 @@ func (uiConfig *UIConfig) StyleSetPath() string {
return uiConfig.style.path
}
-func (base *UIConfig) contextual(
- ctxType uiContextType, value string, useCache bool,
-) *UIConfig {
+func (base *UIConfig) contextual(ctxType uiContextType, value string) *UIConfig {
if base.contextualCounts[ctxType] == 0 {
// shortcut if no contextual ui for that type
return base
}
- if !useCache {
- return base.mergeContextual(ctxType, value)
- }
key := uiContextKey{ctxType: ctxType, value: value}
c, found := base.contextualCache[key]
if !found {
@@ -541,18 +554,9 @@ func (base *UIConfig) contextual(
}
func (base *UIConfig) ForAccount(account string) *UIConfig {
- return base.contextual(uiContextAccount, account, true)
+ return base.contextual(uiContextAccount, account)
}
func (base *UIConfig) ForFolder(folder string) *UIConfig {
- return base.contextual(uiContextFolder, folder, true)
-}
-
-func (base *UIConfig) ForSubject(subject string) *UIConfig {
- // TODO: this [ui:subject] contextual config should be dropped and
- // replaced by another solution. Possibly something in the stylesets.
- // Do not use a cache for contextual subject config as this
- // could consume all available memory given enough time and
- // enough messages.
- return base.contextual(uiContextSubject, subject, false)
+ return base.contextual(uiContextFolder, folder)
}
diff --git a/doc/aerc-config.5.scd b/doc/aerc-config.5.scd
index faa79cad..54c7df7f 100644
--- a/doc/aerc-config.5.scd
+++ b/doc/aerc-config.5.scd
@@ -385,8 +385,7 @@ directories and message subjects. The specializations are added using
contextual config sections based on the context.
The contextual UI configuration is merged to the base UiConfig in the
-following order:
-*Base UIConfig > Account Context > Folder Context > Subject Context.*
+following order: *Base UIConfig > Account Context > Folder Context*.
*[ui:account=*_AccountName_*]*
Adds account specific configuration with the account name.
@@ -398,10 +397,6 @@ following order:
Add folder specific configuration for folders whose names match the regular
expression.
-*[ui:subject~*_Regex_*]*
- Add specialized ui configuration for messages that match a given regular
- expression.
-
Example:
```
[ui:account=Work]
@@ -412,9 +407,6 @@ index-format=...
[ui:folder~Archive/\d+/.*]
index-format=...
-
-[ui:subject~^\[PATCH]
-index-format=...
```
# STATUSLINE
diff --git a/widgets/msglist.go b/widgets/msglist.go
index 0937b786..161dcadc 100644
--- a/widgets/msglist.go
+++ b/widgets/msglist.go
@@ -222,7 +222,7 @@ func addMessage(
msg := store.Messages[uid]
cells := make([]string, len(table.Columns))
- params := messageRowParams{uid: uid}
+ params := messageRowParams{uid: uid, uiConfig: uiConfig}
if msg == nil || msg.Envelope == nil {
params.needsHeaders = true
@@ -267,9 +267,6 @@ func addMessage(
}
}
- // TODO deprecate subject contextual UIs? Only related setting is
- // styleset, should implement a better per-message styling method
- params.uiConfig = uiConfig.ForSubject(msg.Envelope.Subject)
params.headers = msg.RFC822Headers
return table.AddRow(cells, params)