aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorReto Brunner <reto@labrat.space>2019-09-29 12:08:59 +0200
committerDrew DeVault <sir@cmpwn.com>2019-09-29 12:36:35 -0400
commitf15811a737ee8d93f22ceff620df145c2d252b15 (patch)
tree7f5329e27cd73236c6688bfd2dd3cebe403c67b0
parent70c16fc34609893eadabd9a31adb4396931552a5 (diff)
downloadaerc-f15811a737ee8d93f22ceff620df145c2d252b15.tar.gz
Open mailto links in a new aerc instance if needed.
Aerc tries to open mailto:// links via the socket of the already running aerc instance. If no socket exists this silently errored out. This commit starts up a new aerc instance if it can't connect to the socket (which I think is the most common error) and if not sets up a new aerc instance and retries to open the compositor. This fixes https://todo.sr.ht/~sircmpwn/aerc2/295 by implementing the desired behaviour.
-rw-r--r--aerc.go19
1 files changed, 17 insertions, 2 deletions
diff --git a/aerc.go b/aerc.go
index 1a321263..e8944d74 100644
--- a/aerc.go
+++ b/aerc.go
@@ -105,13 +105,26 @@ func main() {
return
}
}
+ initDone := make(chan struct{})
args := os.Args[optind:]
if len(args) > 1 {
usage()
return
} else if len(args) == 1 {
- lib.ConnectAndExec(args[0])
- return
+ arg := args[0]
+ err := lib.ConnectAndExec(arg)
+ if err == nil {
+ return // other aerc instance takes over
+ }
+ fmt.Fprintf(os.Stderr, "Failed to communicate to aerc: %v", err)
+ // continue with setting up a new aerc instance and retry after init
+ go func(msg string) {
+ <-initDone
+ err := lib.ConnectAndExec(msg)
+ if err != nil {
+ fmt.Fprintf(os.Stderr, "Failed to communicate to aerc: %v", err)
+ }
+ }(arg)
}
var (
@@ -163,6 +176,8 @@ func main() {
as.OnMailto = aerc.Mailto
}
+ close(initDone)
+
for !ui.ShouldExit() {
for aerc.Tick() {
// Continue updating our internal state