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* 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 {