summaryrefslogtreecommitdiff
path: root/commands
diff options
context:
space:
mode:
authorRay Ganardi <ray@ganardi.xyz>2020-04-26 11:50:25 +0200
committerDrew DeVault <sir@cmpwn.com>2020-05-01 11:01:28 -0400
commitb650bb30a2d3ebd527c66dc7f7b229ca238fe297 (patch)
treeb5a358f488acedc41cdf4b1061b4bdc59427fe6b /commands
parent63fb2b20062a0fe72893fbe8a1a829f98d03fe12 (diff)
downloadaerc-b650bb30a2d3ebd527c66dc7f7b229ca238fe297.zip
Implement :header command
Usage: *header* [-f] <field> [value] Add a new email header. If the header already exists, -f must be specified to replace the given value.
Diffstat (limited to 'commands')
-rw-r--r--commands/compose/header.go74
1 files changed, 74 insertions, 0 deletions
diff --git a/commands/compose/header.go b/commands/compose/header.go
new file mode 100644
index 0000000..5188a8a
--- /dev/null
+++ b/commands/compose/header.go
@@ -0,0 +1,74 @@
+package compose
+
+import (
+ "fmt"
+ "strings"
+
+ "git.sr.ht/~sircmpwn/aerc/commands"
+ "git.sr.ht/~sircmpwn/aerc/widgets"
+ "git.sr.ht/~sircmpwn/getopt"
+)
+
+type Header struct{}
+
+var (
+ headers = []string{
+ "From",
+ "To",
+ "Cc",
+ "Bcc",
+ "Subject",
+ "Comments",
+ "Keywords",
+ }
+)
+
+func init() {
+ register(Header{})
+}
+
+func (Header) Aliases() []string {
+ return []string{"header"}
+}
+
+func (Header) Complete(aerc *widgets.Aerc, args []string) []string {
+ return commands.CompletionFromList(headers, args)
+}
+
+func (Header) Execute(aerc *widgets.Aerc, args []string) error {
+ if len(args) < 2 {
+ return fmt.Errorf("Usage: %s [-f] field [value]", args[0])
+ }
+
+ opts, optind, err := getopt.Getopts(args, "f")
+ if err != nil {
+ return err
+ }
+ var (
+ force bool = false
+ )
+ for _, opt := range opts {
+ switch opt.Option {
+ case 'f':
+ force = true
+ }
+ }
+
+ composer, _ := aerc.SelectedTab().(*widgets.Composer)
+
+ if !force {
+ headers, _, err := composer.PrepareHeader()
+ if err != nil {
+ return err
+ }
+
+ if headers.Has(strings.Title(args[optind])) {
+ return fmt.Errorf("Header %s already exists", args[optind])
+ }
+ }
+
+ composer.AddEditor(strings.Title(args[optind]),
+ strings.Join(args[optind+1:], " "), false)
+
+ return nil
+}