aboutsummaryrefslogtreecommitdiffstats
path: root/commands/msgview/open.go
diff options
context:
space:
mode:
authorVitaly Ovchinnikov <v@postbox.nz>2023-07-07 10:19:00 +0300
committerRobin Jarry <robin@jarry.cc>2023-07-07 22:55:08 +0200
commit300021cc93c32956342107b754b5406d5a030413 (patch)
tree947728b46d7583620710aeac7c1595e1fde7b625 /commands/msgview/open.go
parent52203aba5876c0b98172d890dbe448894b8f1dd9 (diff)
downloadaerc-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/msgview/open.go')
-rw-r--r--commands/msgview/open.go26
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())
}