about summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--commands/msg/forward.go10
-rw-r--r--doc/aerc.1.scd2
-rw-r--r--widgets/compose.go7
3 files changed, 17 insertions, 2 deletions
diff --git a/commands/msg/forward.go b/commands/msg/forward.go
index d7ecf66..ca29096 100644
--- a/commands/msg/forward.go
+++ b/commands/msg/forward.go
@@ -8,6 +8,7 @@ import (
 	"github.com/emersion/go-message"
 	"github.com/emersion/go-message/mail"
 	"io"
+	"strings"
 )
 
 type forward struct{}
@@ -25,8 +26,9 @@ func (_ forward) Complete(aerc *widgets.Aerc, args []string) []string {
 }
 
 func (_ forward) Execute(aerc *widgets.Aerc, args []string) error {
+	to := ""
 	if len(args) != 1 {
-		return errors.New("Usage: forward")
+		to = strings.Join(args[1:], ", ")
 	}
 
 	widget := aerc.SelectedTab().(widgets.ProvidesMessage)
@@ -46,6 +48,7 @@ func (_ forward) Execute(aerc *widgets.Aerc, args []string) error {
 
 	subject := "Fwd: " + msg.Envelope.Subject
 	defaults := map[string]string{
+		"To": to,
 		"Subject": subject,
 	}
 	composer := widgets.NewComposer(aerc.Config(), acct.AccountConfig(),
@@ -53,6 +56,11 @@ func (_ forward) Execute(aerc *widgets.Aerc, args []string) error {
 
 	addTab := func() {
 		tab := aerc.NewTab(composer, subject)
+		if len(args) == 1 {
+			composer.FocusRecipient()
+		} else {
+			composer.FocusTerminal()
+		}
 		composer.OnHeaderChange("Subject", func(subject string) {
 			if subject == "" {
 				tab.Name = "New email"
diff --git a/doc/aerc.1.scd b/doc/aerc.1.scd
index 5f2f83b..e172f89 100644
--- a/doc/aerc.1.scd
+++ b/doc/aerc.1.scd
@@ -90,7 +90,7 @@ message list, the message in the message viewer, etc).
 *delete*
 	Deletes the selected message.
 
-*forward*
+*forward* [address...]
 	Opens the composer to forward the selected message to another recipient.
 
 *move* <target>
diff --git a/widgets/compose.go b/widgets/compose.go
index c7e38b8..b4ae078 100644
--- a/widgets/compose.go
+++ b/widgets/compose.go
@@ -153,6 +153,13 @@ func (c *Composer) FocusSubject() *Composer {
 	return c
 }
 
+func (c *Composer) FocusRecipient() *Composer {
+	c.focusable[c.focused].Focus(false)
+	c.focused = 1
+	c.focusable[c.focused].Focus(true)
+	return c
+}
+
 // OnHeaderChange registers an OnChange callback for the specified header.
 func (c *Composer) OnHeaderChange(header string, fn func(subject string)) {
 	if editor, ok := c.editors[header]; ok {