diff options
author | Drew DeVault <sir@cmpwn.com> | 2019-03-31 15:21:04 -0400 |
---|---|---|
committer | Drew DeVault <sir@cmpwn.com> | 2019-03-31 15:21:04 -0400 |
commit | 36419d85aa849007998a4b69ac779de015a4e5ce (patch) | |
tree | eb4b296cf38f2c3b0cdb889bfb988ec036b54617 | |
parent | 1a4cc31d67cf7679966d6cf2928b7ad3e152c061 (diff) | |
download | aerc-36419d85aa849007998a4b69ac779de015a4e5ce.tar.gz |
Use shell to execute filters, fix non-determinism
-rw-r--r-- | config/config.go | 3 | ||||
-rw-r--r-- | widgets/msgviewer.go | 9 |
2 files changed, 5 insertions, 7 deletions
diff --git a/config/config.go b/config/config.go index 7c80d20..a63b7e8 100644 --- a/config/config.go +++ b/config/config.go @@ -158,7 +158,8 @@ func LoadConfig(root *string) (*AercConfig, error) { } if filters, err := file.GetSection("filters"); err == nil { // TODO: Parse the filter more finely, e.g. parse the regex - for match, cmd := range filters.KeysHash() { + for _, match := range filters.KeyStrings() { + cmd := filters.KeysHash()[match] filter := FilterConfig{ Command: cmd, Filter: match, diff --git a/widgets/msgviewer.go b/widgets/msgviewer.go index 56c3897..7d929e6 100644 --- a/widgets/msgviewer.go +++ b/widgets/msgviewer.go @@ -107,16 +107,13 @@ func NewMessageViewer(conf *config.AercConfig, store *lib.MessageStore, } pager = exec.Command(cmd[0], cmd[1:]...) + fmt.Printf("%v\n", conf.Filters) for _, f := range conf.Filters { - cmd, err = shlex.Split(f.Command) - if err != nil { - goto handle_error - } mime := msg.BodyStructure.MIMEType + "/" + msg.BodyStructure.MIMESubType switch f.FilterType { case config.FILTER_MIMETYPE: if fnmatch.Match(f.Filter, mime, 0) { - filter = exec.Command(cmd[0], cmd[1:]...) + filter = exec.Command("sh", "-c", f.Command) } case config.FILTER_HEADER: var header string @@ -131,7 +128,7 @@ func NewMessageViewer(conf *config.AercConfig, store *lib.MessageStore, header = formatAddresses(msg.Envelope.Cc) } if f.Regex.Match([]byte(header)) { - filter = exec.Command(cmd[0], cmd[1:]...) + filter = exec.Command("sh", "-c", f.Command) } } if filter != nil { |