diff options
author | Vitaly Ovchinnikov <v@postbox.nz> | 2023-07-07 10:19:00 +0300 |
---|---|---|
committer | Robin Jarry <robin@jarry.cc> | 2023-07-07 22:55:08 +0200 |
commit | 300021cc93c32956342107b754b5406d5a030413 (patch) | |
tree | 947728b46d7583620710aeac7c1595e1fde7b625 /commands | |
parent | 52203aba5876c0b98172d890dbe448894b8f1dd9 (diff) | |
download | aerc-300021cc93c32956342107b754b5406d5a030413.tar.gz |
open: add option -d to automatically delete temporary files
By default `:open` leaves its temporary files in the temp directory. The
patch adds an option `-d` that defers the deletion of the temporary file
when the opener is started.
This works well with "sync" openers that don't exit until the user is
done with the preview, but may not work with "async" openers that pass
the file to their parent process and exit. That's why the automatic
deletion needs to be intentionally enabled by using the option.
Suggested-by: Robin Jarry <robin@jarry.cc>
Signed-off-by: Vitaly Ovchinnikov <v@postbox.nz>
Reviewed-by: Moritz Poldrack <moritz@poldrack.dev>
Diffstat (limited to 'commands')
-rw-r--r-- | commands/msgview/open.go | 26 |
1 files changed, 24 insertions, 2 deletions
diff --git a/commands/msgview/open.go b/commands/msgview/open.go index 9ceccb5a..b66456cc 100644 --- a/commands/msgview/open.go +++ b/commands/msgview/open.go @@ -7,6 +7,8 @@ import ( "os" "path/filepath" + "git.sr.ht/~sircmpwn/getopt" + "git.sr.ht/~rjarry/aerc/lib" "git.sr.ht/~rjarry/aerc/log" "git.sr.ht/~rjarry/aerc/widgets" @@ -18,6 +20,10 @@ func init() { register(Open{}) } +func (Open) Options() string { + return "d" +} + func (Open) Aliases() []string { return []string{"open"} } @@ -26,7 +32,20 @@ func (Open) Complete(aerc *widgets.Aerc, args []string) []string { return nil } -func (Open) Execute(aerc *widgets.Aerc, args []string) error { +func (o Open) Execute(aerc *widgets.Aerc, args []string) error { + opts, optind, err := getopt.Getopts(args, o.Options()) + if err != nil { + return err + } + + del := false + + for _, opt := range opts { + if opt.Option == 'd' { + del = true + } + } + mv := aerc.SelectedTabContent().(*widgets.MessageViewer) if mv == nil { return errors.New("open only supported selected message parts") @@ -65,7 +84,10 @@ func (Open) Execute(aerc *widgets.Aerc, args []string) error { go func() { defer log.PanicHandler() - err = lib.XDGOpenMime(tmpFile.Name(), mimeType, args[1:]) + if del { + defer os.Remove(tmpFile.Name()) + } + err = lib.XDGOpenMime(tmpFile.Name(), mimeType, args[optind:]) if err != nil { aerc.PushError("open: " + err.Error()) } |