aboutsummaryrefslogtreecommitdiffstats
path: root/config/ui.go
diff options
context:
space:
mode:
authorRobin Jarry <robin@jarry.cc>2023-02-01 23:35:42 +0100
committerRobin Jarry <robin@jarry.cc>2023-02-20 14:48:42 +0100
commitaaaa0c184fb43879cc84551983309cad06d665ee (patch)
tree93bb83d32495f679a70dbe5d3913549c29edf675 /config/ui.go
parent420a82a356d53e4b600ba54768f7ed21a43cf85e (diff)
downloadaerc-aaaa0c184fb43879cc84551983309cad06d665ee.tar.gz
triggers: use templates instead of % mini language
Since previous commit, all commands now support expanding text/template markup. Reuse that for the new-email trigger command. Update commands.ExecuteCommand to take optional *AccountConfig and *MessageInfo arguments. If these are nil, fallback to using the currently selected account and message (if any). Pass the proper *AccountConfig and *MessageInfo objects when firing the trigger command so that these are used instead of the currently selected ones. If new-email contains % placeholders, try to convert them to template markup reusing the same conversion added in commit 535300cfdbfc ("config: add columns based index format"). Warn the user that they need to update their configuration file. Signed-off-by: Robin Jarry <robin@jarry.cc> Reviewed-by: Moritz Poldrack <moritz@poldrack.dev>
Diffstat (limited to 'config/ui.go')
-rw-r--r--config/ui.go134
1 files changed, 69 insertions, 65 deletions
diff --git a/config/ui.go b/config/ui.go
index db596d97..b59c9b09 100644
--- a/config/ui.go
+++ b/config/ui.go
@@ -391,75 +391,12 @@ func convertIndexFormat(indexFormat string) ([]*ColumnDef, error) {
alignWidth := m[1]
verb := m[3]
- var f string
var width float64 = 0
var flags ColumnFlags = ALIGN_LEFT
- name := ""
-
- switch verb {
- case "%":
- f = verb
- case "a":
- f = `{{(index .From 0).Address}}`
- name = "sender"
- case "A":
- f = `{{if eq (len .ReplyTo) 0}}{{(index .From 0).Address}}{{else}}{{(index .ReplyTo 0).Address}}{{end}}`
- name = "reply-to"
- case "C":
- f = "{{.Number}}"
- name = "num"
- case "d", "D":
- f = "{{.DateAutoFormat .Date.Local}}"
- name = "date"
- case "f":
- f = `{{index (.From | persons) 0}}`
- name = "from"
- case "F":
- f = `{{.Peer | names | join ", "}}`
- name = "peers"
- case "g":
- f = `{{.Labels | join ", "}}`
- name = "labels"
- case "i":
- f = "{{.MessageId}}"
- name = "msg-id"
- case "n":
- f = `{{index (.From | names) 0}}`
- name = "name"
- case "r":
- f = `{{.To | persons | join ", "}}`
- name = "to"
- case "R":
- f = `{{.Cc | persons | join ", "}}`
- name = "cc"
- case "s":
- f = "{{.Subject}}"
- name = "subject"
- case "t":
- f = "{{(index .To 0).Address}}"
- name = "to0"
- case "T":
- f = "{{.Account}}"
- name = "account"
- case "u":
- f = "{{index (.From | mboxes) 0}}"
- name = "mboxes"
- case "v":
- f = "{{index (.From | names) 0}}"
- name = "name"
- case "Z":
- f = `{{.Flags | join ""}}`
- name = "flags"
+ f, name := indexVerbToTemplate([]rune(verb)[0])
+ if verb == "Z" {
width = 4
flags = ALIGN_RIGHT
- case "l":
- f = "{{.Size}}"
- name = "size"
- default:
- f = "%" + verb
- }
- if name == "" {
- name = "wtf"
}
t, err := templates.ParseTemplate(fmt.Sprintf("column-%s", name), f)
@@ -495,6 +432,73 @@ func convertIndexFormat(indexFormat string) ([]*ColumnDef, error) {
return columns, nil
}
+func indexVerbToTemplate(verb rune) (f, name string) {
+ switch verb {
+ case '%':
+ f = string(verb)
+ case 'a':
+ f = `{{(index .From 0).Address}}`
+ name = "sender"
+ case 'A':
+ f = `{{if eq (len .ReplyTo) 0}}{{(index .From 0).Address}}{{else}}{{(index .ReplyTo 0).Address}}{{end}}`
+ name = "reply-to"
+ case 'C':
+ f = "{{.Number}}"
+ name = "num"
+ case 'd', 'D':
+ f = "{{.DateAutoFormat .Date.Local}}"
+ name = "date"
+ case 'f':
+ f = `{{index (.From | persons) 0}}`
+ name = "from"
+ case 'F':
+ f = `{{.Peer | names | join ", "}}`
+ name = "peers"
+ case 'g':
+ f = `{{.Labels | join ", "}}`
+ name = "labels"
+ case 'i':
+ f = "{{.MessageId}}"
+ name = "msg-id"
+ case 'n':
+ f = `{{index (.From | names) 0}}`
+ name = "name"
+ case 'r':
+ f = `{{.To | persons | join ", "}}`
+ name = "to"
+ case 'R':
+ f = `{{.Cc | persons | join ", "}}`
+ name = "cc"
+ case 's':
+ f = "{{.Subject}}"
+ name = "subject"
+ case 't':
+ f = "{{(index .To 0).Address}}"
+ name = "to0"
+ case 'T':
+ f = "{{.Account}}"
+ name = "account"
+ case 'u':
+ f = "{{index (.From | mboxes) 0}}"
+ name = "mboxes"
+ case 'v':
+ f = "{{index (.From | names) 0}}"
+ name = "name"
+ case 'Z':
+ f = `{{.Flags | join ""}}`
+ name = "flags"
+ case 'l':
+ f = "{{.Size}}"
+ name = "size"
+ default:
+ f = "%" + string(verb)
+ }
+ if name == "" {
+ name = "wtf"
+ }
+ return
+}
+
func (ui *UIConfig) loadStyleSet(styleSetDirs []string) error {
ui.style = NewStyleSet()
err := ui.style.LoadStyleSet(ui.StyleSetName, styleSetDirs)