diff options
author | Leszek CimaĆa <ernierasta@zori.cz> | 2020-01-08 21:44:18 +0100 |
---|---|---|
committer | Drew DeVault <sir@cmpwn.com> | 2020-01-09 14:31:19 -0500 |
commit | bf0f72a533d5c1868b9819f769836ea22d5fa583 (patch) | |
tree | d120574b57481fd5700c1ce3c12ad4a08bbeef4d | |
parent | fe9ec67eca201c75c09f1ef7ff51ac189de3a4d4 (diff) | |
download | aerc-bf0f72a533d5c1868b9819f769836ea22d5fa583.tar.gz |
template: add exec and wrap
-rw-r--r-- | doc/aerc-templates.7.scd | 21 | ||||
-rw-r--r-- | lib/templates/template.go | 23 |
2 files changed, 40 insertions, 4 deletions
diff --git a/doc/aerc-templates.7.scd b/doc/aerc-templates.7.scd index 9382f2e1..adcc85ce 100644 --- a/doc/aerc-templates.7.scd +++ b/doc/aerc-templates.7.scd @@ -72,20 +72,33 @@ available always. Example: - _wrapText_ function can be used to wrap the original text to a number + _wrap_ function can be used to wrap the original text to a number of characters per line. ``` - {{wrapText .OriginalText 72}} + {{wrap 72 .OriginalText}} ``` _quote_ function prepends each line with "> ". ``` {{quote .OriginalText}} ``` + _exec_ function execute external command to process message. + ``` + {{exec `/usr/local/share/aerc/filters/html`}} + ``` + + All of the above can be chained together if needed, for example. + ``` + {{exec `/usr/local/share/aerc/filters/html` .OriginalText | wrap 72 | quote}} + ``` - All of the above can be chained together if needed, for example + Automatic HTML parsing can be achieved. ``` - {{wrapText .OriginalText 72 | quote}} + {{if eq .OriginalMIMEType "text/html"}} + {{exec `/usr/local/share/aerc/filters/html` .OriginalText | wrap 72 | quote}} + {{else}} + {{wrap 72 .OriginalText | quote}} + {{end}} ``` # SEE ALSO diff --git a/lib/templates/template.go b/lib/templates/template.go index 54024720..f2765e87 100644 --- a/lib/templates/template.go +++ b/lib/templates/template.go @@ -5,6 +5,7 @@ import ( "errors" "net/mail" "os" + "os/exec" "path" "strings" "text/template" @@ -72,6 +73,11 @@ func parseAddressList(list string) []*mail.Address { return addrs } +// wrap allows to chain wrapText +func wrap(lineWidth int, text string) string { + return wrapText(text, lineWidth) +} + func wrapLine(text string, lineWidth int) string { words := strings.Fields(text) if len(words) == 0 { @@ -135,10 +141,27 @@ func quote(text string) string { return quoted.String() } +// cmd allow to parse reply by shell command +// text have to be passed by cmd param +// if there is error, original string is returned +func cmd(cmd, text string) string { + var out bytes.Buffer + c := exec.Command("sh", "-c", cmd) + c.Stdin = strings.NewReader(text) + c.Stdout = &out + err := c.Run() + if err != nil { + return text + } + return out.String() +} + var templateFuncs = template.FuncMap{ "quote": quote, "wrapText": wrapText, + "wrap": wrap, "dateFormat": time.Time.Format, + "exec": cmd, } func findTemplate(templateName string, templateDirs []string) (string, error) { |