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."

Reply via email to