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:
parent
70c16fc346
commit
f15811a737
1 changed files with 17 additions and 2 deletions
19
aerc.go
19
aerc.go
|
@ -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
|
||||||
|
|
Loading…
Reference in a new issue