branch: externals/exwm commit d7a5ead82d3d473c582645f2a496cbdae6f60a97 Author: Daniel Mendler <m...@daniel-mendler.de> Commit: Daniel Mendler <m...@daniel-mendler.de>
exwm-wm-mode: Initialize or exit EXWM depending on exwm--connection. * exwm.el (exwm--find-x-frame): New function. (exwm-wm-mode): Use it. Check exwm--connection and call exwm--init or exwm--exit if needed. Based on https://github.com/ch11ng/exwm/pull/868 by Adrián. --- exwm.el | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/exwm.el b/exwm.el index e68bed23d1..a963c89c1c 100644 --- a/exwm.el +++ b/exwm.el @@ -1008,11 +1008,21 @@ FRAME, if given, indicates the X display EXWM should manage." "EXWM window manager mode." :global t :group 'exwm - (cond - (exwm-wm-mode - (exwm--enable)) - (t - (exwm--disable)))) + (if exwm-wm-mode + (unless exwm--connection + (exwm--enable) + (when-let* ((frame (exwm--find-x-frame))) + (exwm--init frame))) + (when exwm--connection + (exwm--exit)) + (exwm--disable))) + +(defun exwm--find-x-frame () + "Find a frame whose terminal is an X display. +Selected frame is checked first." + (cl-loop for term in (cons (frame-terminal (selected-frame)) (terminal-list)) + if (eq 'x (terminal-live-p term)) + return (car (frames-on-display-list term)))) (defun exwm--disable () "Unregister functions for EXWM to be initialized."