diff options
author | Daniel Bridges <bridges2@gmail.com> | 2019-08-07 23:15:59 -0700 |
---|---|---|
committer | Drew DeVault <sir@cmpwn.com> | 2019-08-12 08:57:04 +0900 |
commit | 5b523880b4b4cd2abd9457b4b09c384af33be14b (patch) | |
tree | d7e939351465b461353d35d3d3ee0508cf6dcdee /commands/account/compose.go | |
parent | a1749411e61d20f701442c9c7e58464f4e0203b8 (diff) | |
download | aerc-5b523880b4b4cd2abd9457b4b09c384af33be14b.tar.gz |
Let user edit arbitrary headers in composer
Diffstat (limited to 'commands/account/compose.go')
-rw-r--r-- | commands/account/compose.go | 36 |
1 files changed, 32 insertions, 4 deletions
diff --git a/commands/account/compose.go b/commands/account/compose.go index f615c0b..fa673f0 100644 --- a/commands/account/compose.go +++ b/commands/account/compose.go @@ -1,9 +1,11 @@ package account import ( - "errors" + "regexp" + "strings" "git.sr.ht/~sircmpwn/aerc/widgets" + "git.sr.ht/~sircmpwn/getopt" ) type Compose struct{} @@ -20,10 +22,11 @@ func (_ Compose) Complete(aerc *widgets.Aerc, args []string) []string { 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 { - if len(args) != 1 { - return errors.New("Usage: compose") + body, err := buildBody(args) + if err != nil { + return err } acct := aerc.SelectedAccount() composer := widgets.NewComposer( @@ -37,5 +40,30 @@ func (_ Compose) Execute(aerc *widgets.Aerc, args []string) error { } tab.Content.Invalidate() }) + go composer.SetContents(strings.NewReader(body)) 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 +} |