Let user edit arbitrary headers in composer

This commit is contained in:
Daniel Bridges 2019-08-07 23:15:59 -07:00 committed by Drew DeVault
parent a1749411e6
commit 5b523880b4
2 changed files with 37 additions and 5 deletions

View File

@ -1,9 +1,11 @@
package account package account
import ( import (
"errors" "regexp"
"strings"
"git.sr.ht/~sircmpwn/aerc/widgets" "git.sr.ht/~sircmpwn/aerc/widgets"
"git.sr.ht/~sircmpwn/getopt"
) )
type Compose struct{} type Compose struct{}
@ -20,10 +22,11 @@ func (_ Compose) Complete(aerc *widgets.Aerc, args []string) []string {
return nil return nil
} }
// TODO: Accept arguments for default headers, message body // TODO: Accept arguments for message body
func (_ Compose) Execute(aerc *widgets.Aerc, args []string) error { func (_ Compose) Execute(aerc *widgets.Aerc, args []string) error {
if len(args) != 1 { body, err := buildBody(args)
return errors.New("Usage: compose") if err != nil {
return err
} }
acct := aerc.SelectedAccount() acct := aerc.SelectedAccount()
composer := widgets.NewComposer( composer := widgets.NewComposer(
@ -37,5 +40,30 @@ func (_ Compose) Execute(aerc *widgets.Aerc, args []string) error {
} }
tab.Content.Invalidate() tab.Content.Invalidate()
}) })
go composer.SetContents(strings.NewReader(body))
return nil return nil
} }
func buildBody(args []string) (string, error) {
var body, headers string
opts, _, err := getopt.Getopts(args, "H:")
if err != nil {
return "", err
}
for _, opt := range opts {
switch opt.Option {
case 'H':
if strings.Index(opt.Value, ":") != -1 {
// ensure first colon is followed by a single space
re := regexp.MustCompile(`^(.*?):\s*(.*)`)
headers += re.ReplaceAllString(opt.Value, "$1: $2") + "\n"
} else {
headers += opt.Value + ":\n"
}
}
}
if headers != "" {
body = headers + "\n\n"
}
return body, nil
}

View File

@ -139,11 +139,15 @@ message list, the message in the message viewer, etc).
*cf* <folder> *cf* <folder>
Change the folder shown in the message list. Change the folder shown in the message list.
*compose* *compose* [-H]
Open the compose window to send a new email. The new email will be sent with Open the compose window to send a new email. The new email will be sent with
the current account's outgoing transport configuration. For details on the current account's outgoing transport configuration. For details on
configuring outgoing mail delivery consult *aerc-config*(5). configuring outgoing mail delivery consult *aerc-config*(5).
*-H* <header>
Add the specified header to the message, e.g. 'compose -H "X-Custom: custom
value"'
*filter* [options] <terms...> *filter* [options] <terms...>
Similar to *search*, but filters the displayed messages to only the search Similar to *search*, but filters the displayed messages to only the search
results. See the documentation for *search* for more details. results. See the documentation for *search* for more details.