template: add exec and wrap
This commit is contained in:
parent
fe9ec67eca
commit
bf0f72a533
2 changed files with 41 additions and 5 deletions
|
@ -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}}
|
||||
```
|
||||
|
||||
All of the above can be chained together if needed, for example
|
||||
_exec_ function execute external command to process message.
|
||||
```
|
||||
{{wrapText .OriginalText 72 | quote}}
|
||||
{{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}}
|
||||
```
|
||||
|
||||
Automatic HTML parsing can be achieved.
|
||||
```
|
||||
{{if eq .OriginalMIMEType "text/html"}}
|
||||
{{exec `/usr/local/share/aerc/filters/html` .OriginalText | wrap 72 | quote}}
|
||||
{{else}}
|
||||
{{wrap 72 .OriginalText | quote}}
|
||||
{{end}}
|
||||
```
|
||||
|
||||
# SEE ALSO
|
||||
|
|
|
@ -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) {
|
||||
|
|
Loading…
Reference in a new issue