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.