~sircmpwn/aerc

f15811a737ee8d93f22ceff620df145c2d252b15 — Reto Brunner 2 years ago 70c16fc
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.
1 files changed, 17 insertions(+), 2 deletions(-)

M aerc.go
M aerc.go => aerc.go +17 -2
@@ 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