diff --git a/commands/msg/unsubscribe.go b/commands/msg/unsubscribe.go index 1a2dd37..dec90d5 100644 --- a/commands/msg/unsubscribe.go +++ b/commands/msg/unsubscribe.go @@ -115,6 +115,6 @@ func unsubscribeMailto(aerc *widgets.Aerc, u *url.URL) error { } func unsubscribeHTTP(u *url.URL) error { - go lib.OpenFile(u.String()) + lib.OpenFile(u.String(), nil) return nil } diff --git a/commands/msgview/open.go b/commands/msgview/open.go index f708b2d..4aa6133 100644 --- a/commands/msgview/open.go +++ b/commands/msgview/open.go @@ -60,10 +60,9 @@ func (Open) Execute(aerc *widgets.Aerc, args []string) error { return } - err = lib.OpenFile(tmpFile.Name()) - if err != nil { + lib.OpenFile(tmpFile.Name(), func(err error) { aerc.PushError(" " + err.Error()) - } + }) aerc.PushStatus("Opened", 10*time.Second) }) diff --git a/lib/open.go b/lib/open.go index ad6533e..ebcf878 100644 --- a/lib/open.go +++ b/lib/open.go @@ -6,7 +6,18 @@ import ( "os/exec" ) -func OpenFile(filename string) error { +func OpenFile(filename string, onErr func(error)) { cmd := exec.Command("xdg-open", filename) - return cmd.Run() + err := cmd.Start() + if err != nil && onErr != nil { + onErr(err) + return + } + + go func() { + err := cmd.Wait() + if err != nil && onErr != nil { + onErr(err) + } + }() } diff --git a/lib/open_darwin.go b/lib/open_darwin.go index 0ffd9a1..d98c898 100644 --- a/lib/open_darwin.go +++ b/lib/open_darwin.go @@ -4,7 +4,18 @@ import ( "os/exec" ) -func OpenFile(filename string) error { +func OpenFile(filename string, onErr func(error)) { cmd := exec.Command("open", filename) - return cmd.Run() + err := cmd.Start() + if err != nil && onErr != nil { + onErr(err) + return + } + + go func() { + err := cmd.Wait() + if err != nil && onErr != nil { + onErr(err) + } + }() }