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

19
aerc.go
View file

@ -105,13 +105,26 @@ func main() {
return return
} }
} }
initDone := make(chan struct{})
args := os.Args[optind:] args := os.Args[optind:]
if len(args) > 1 { if len(args) > 1 {
usage() usage()
return return
} else if len(args) == 1 { } else if len(args) == 1 {
lib.ConnectAndExec(args[0]) arg := args[0]
return 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 ( var (
@ -163,6 +176,8 @@ func main() {
as.OnMailto = aerc.Mailto as.OnMailto = aerc.Mailto
} }
close(initDone)
for !ui.ShouldExit() { for !ui.ShouldExit() {
for aerc.Tick() { for aerc.Tick() {
// Continue updating our internal state // Continue updating our internal state