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.
This commit is contained in:
Reto Brunner 2019-09-29 12:08:59 +02:00 committed by Drew DeVault
parent 70c16fc346
commit f15811a737
1 changed files with 17 additions and 2 deletions

19
aerc.go
View File

@ -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