Let user edit arbitrary headers in composer
This commit is contained in:
parent
a1749411e6
commit
5b523880b4
|
@ -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
|
||||||
|
}
|
||||||
|
|
|
@ -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.
|
||||||
|
|
Loading…
Reference in New Issue