diff options
author | Steven Allen <steven@stebalien.com> | 2023-12-30T00·55-0800 |
---|---|---|
committer | Steven Allen <steven@stebalien.com> | 2023-12-31T16·47-0800 |
commit | 6eaa0301f17898449827c778d52456800f776e65 (patch) | |
tree | 37949870cf119bcc6a6beb8c30c1906b8f4bcce5 | |
parent | 56db521a3ed6a2ccc1193110a56545a1992e9654 (diff) |
Correctly stop the subordinate Emacs daemon
This patch starts Emacs as a foreground daemon (so it can accurately be killed) and terminates it by sending a signal (because 'server-force-delete' stops the local server, not the named server). * exwm.el (exwm--server-timeout): The time to politely wait for the subordinate server to exit before killing it. (exwm--server-stop): Send SIGTERM to the subordinate process instead of using 'server-force-delete'. (exwm--server-eval-at): Prevent Emacs from forking so we can manage it as a subprocess.
-rw-r--r-- | exwm.el | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/exwm.el b/exwm.el index 57455337202b..5e8489fee612 100644 --- a/exwm.el +++ b/exwm.el @@ -5,7 +5,7 @@ ;; Author: Chris Feng <chris.w.feng@gmail.com> ;; Maintainer: Adrián Medraño Calvo <adrian@medranocalvo.com> ;; Version: 0.28 -;; Package-Requires: ((xelb "0.18")) +;; Package-Requires: ((emacs "26.1") (xelb "0.18")) ;; Keywords: unix ;; URL: https://github.com/ch11ng/exwm @@ -110,6 +110,9 @@ (defconst exwm--server-name "server-exwm" "Name of the subordinate Emacs server.") +(defvar exwm--server-timeout 1 + "Number of seconds to wait for the subordinate Emacs server to exit before killing it.") + (defvar exwm--server-process nil "Process of the subordinate Emacs server.") (defun exwm-reset () @@ -999,8 +1002,13 @@ FRAME, if given, indicates the X display EXWM should manage." (defun exwm--server-stop () "Stop the subordinate Emacs server." (exwm--log) - (server-force-delete exwm--server-name) (when exwm--server-process + (when (process-live-p exwm--server-process) + (cl-loop + initially (signal-process exwm--server-process 'TERM) + while (process-live-p exwm--server-process) + repeat (* 10 exwm--server-timeout) + do (sit-for 0.1))) (delete-process exwm--server-process) (setq exwm--server-process nil))) @@ -1017,7 +1025,7 @@ FUNCTION is the function to be evaluated, ARGS are the arguments." (car command-line-args) ;The executable file "-d" (frame-parameter nil 'display) "-Q" - (concat "--daemon=" exwm--server-name) + (concat "--fg-daemon=" exwm--server-name) "--eval" ;; Create an invisible frame "(make-frame '((window-system . x) (visibility)))")) |