diff options
author | Robin Jarry <robin@jarry.cc> | 2023-02-01 23:35:42 +0100 |
---|---|---|
committer | Robin Jarry <robin@jarry.cc> | 2023-02-20 14:48:42 +0100 |
commit | aaaa0c184fb43879cc84551983309cad06d665ee (patch) | |
tree | 93bb83d32495f679a70dbe5d3913549c29edf675 /config/ui.go | |
parent | 420a82a356d53e4b600ba54768f7ed21a43cf85e (diff) | |
download | aerc-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.go | 134 |
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) |