about summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--commands/msg/recall.go26
-rw-r--r--doc/aerc.1.scd8
2 files changed, 27 insertions, 7 deletions
diff --git a/commands/msg/recall.go b/commands/msg/recall.go
index 61c4c39..b6b850c 100644
--- a/commands/msg/recall.go
+++ b/commands/msg/recall.go
@@ -12,6 +12,7 @@ import (
 	"git.sr.ht/~rjarry/aerc/models"
 	"git.sr.ht/~rjarry/aerc/widgets"
 	"git.sr.ht/~rjarry/aerc/worker/types"
+	"git.sr.ht/~sircmpwn/getopt"
 )
 
 type Recall struct{}
@@ -29,8 +30,21 @@ func (Recall) Complete(aerc *widgets.Aerc, args []string) []string {
 }
 
 func (Recall) Execute(aerc *widgets.Aerc, args []string) error {
-	if len(args) != 1 {
-		return errors.New("Usage: recall")
+	force := false
+
+	opts, optind, err := getopt.Getopts(args, "f")
+	if err != nil {
+		return err
+	}
+	for _, opt := range opts {
+		switch opt.Option {
+		case 'f':
+			force = true
+		}
+	}
+
+	if len(args) != optind {
+		return errors.New("Usage: recall [-f]")
 	}
 
 	widget := aerc.SelectedTab().(widgets.ProvidesMessage)
@@ -38,7 +52,7 @@ func (Recall) Execute(aerc *widgets.Aerc, args []string) error {
 	if acct == nil {
 		return errors.New("No account selected")
 	}
-	if acct.SelectedDirectory() != acct.AccountConfig().Postpone {
+	if acct.SelectedDirectory() != acct.AccountConfig().Postpone && !force {
 		return errors.New("Can only recall from the postpone directory: " +
 			acct.AccountConfig().Postpone)
 	}
@@ -81,6 +95,10 @@ func (Recall) Execute(aerc *widgets.Aerc, args []string) error {
 			worker := composer.Worker()
 			uids := []uint32{msgInfo.Uid}
 
+			if acct.SelectedDirectory() != acct.AccountConfig().Postpone {
+				return
+			}
+
 			worker.PostAction(&types.DeleteMessages{
 				Uids: uids,
 			}, func(msg types.WorkerMessage) {
@@ -90,8 +108,6 @@ func (Recall) Execute(aerc *widgets.Aerc, args []string) error {
 					composer.Close()
 				}
 			})
-
-			return
 		})
 	}
 
diff --git a/doc/aerc.1.scd b/doc/aerc.1.scd
index dbb3cf9..aa96637 100644
--- a/doc/aerc.1.scd
+++ b/doc/aerc.1.scd
@@ -118,9 +118,13 @@ message list, the message in the message viewer, etc).
 *delete*
 	Deletes the selected message.
 
-*recall*
+*recall* [-f]
 	Opens the selected message for re-editing. Messages can only be
-	recalled from the postpone directory.
+	recalled from the postpone directory. The original message is deleted.
+
+	*-f*: Open the message for re-editing even if it is not in the postpone
+	directory. The original message will be deleted only if it is in the
+	postpone directory.
 
 *forward* [-A] [address...]
 	Opens the composer to forward the selected message to another recipient.