summary refs log tree commit diff stats
path: root/commands/msgview
diff options
context:
space:
mode:
authorReto Brunner <reto@labrat.space>2021-01-30 11:33:31 +0100
committerReto Brunner <reto@labrat.space>2021-01-30 14:04:23 +0100
commit949781fa0a5f0654112b4f78558347ca991a89d3 (patch)
tree1d8d58e66b567709ed746654ceb92d75667557b4 /commands/msgview
parent9385827cae7bab6534933718d21eeb489448c476 (diff)
downloadaerc-949781fa0a5f0654112b4f78558347ca991a89d3.tar.gz
Refactor lib/open to accept user provided arguments
* Get rid of open_darwin
	It just lead to code duplication for a simple one string change.
	Instead we query it during initialization
* Accept user provided arguments
	"open" on MacOS accepts things like -A to use a specific application
	Pass trough arguments the user provided in order to facilitate this
* Refactor the function to a struct
	This makes it more convenient for the caller and avoids signatures like
	lib.OpenFile(nil, u.String(), nil) which are fairly unreadable
Diffstat (limited to 'commands/msgview')
-rw-r--r--commands/msgview/open.go24
1 files changed, 16 insertions, 8 deletions
diff --git a/commands/msgview/open.go b/commands/msgview/open.go
index 4aa6133..47b4369 100644
--- a/commands/msgview/open.go
+++ b/commands/msgview/open.go
@@ -1,7 +1,6 @@
 package msgview
 
 import (
-	"errors"
 	"fmt"
 	"io"
 	"io/ioutil"
@@ -28,10 +27,6 @@ func (Open) Complete(aerc *widgets.Aerc, args []string) []string {
 }
 
 func (Open) Execute(aerc *widgets.Aerc, args []string) error {
-	if len(args) != 1 {
-		return errors.New("Usage: open")
-	}
-
 	mv := aerc.SelectedTab().(*widgets.MessageViewer)
 	p := mv.SelectedMessagePart()
 
@@ -60,9 +55,22 @@ func (Open) Execute(aerc *widgets.Aerc, args []string) error {
 			return
 		}
 
-		lib.OpenFile(tmpFile.Name(), func(err error) {
-			aerc.PushError(" " + err.Error())
-		})
+		xdg := lib.NewXDGOpen(tmpFile.Name())
+		// pass through any arguments the user provided to the underlying handler
+		if len(args) > 1 {
+			xdg.SetArgs(args[1:])
+		}
+		err = xdg.Start()
+		if err != nil {
+			aerc.PushError(err.Error())
+			return
+		}
+		go func() {
+			err := xdg.Wait()
+			if err != nil {
+				aerc.PushError(" " + err.Error())
+			}
+		}()
 
 		aerc.PushStatus("Opened", 10*time.Second)
 	})