From 74c724a46b16782d6827357dd64efbafe8aeb92f Mon Sep 17 00:00:00 2001 From: Jim Porter Date: Thu, 1 Dec 2022 11:33:18 -0800 Subject: [PATCH 1/7] Duplicate 'server-stop-automatically--handle-delete-frame' * lisp/server.el (server-stop-automatically--handle-delete-frame): Copy this... (server-stop-automatically--handle-kill-terminal) ... to this. (server-save-buffers-kill-terminal): Use it. --- lisp/server.el | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/lisp/server.el b/lisp/server.el index 1b027f88ce..0a59c8496a 100644 --- a/lisp/server.el +++ b/lisp/server.el @@ -1781,7 +1781,7 @@ server-save-buffers-kill-terminal If emacsclient was started with a list of filenames to edit, then only these files will be asked to be saved." (if server-stop-automatically - (server-stop-automatically--handle-delete-frame (selected-frame)) + (server-stop-automatically--handle-kill-terminal (selected-frame)) (let ((proc (frame-parameter nil 'client))) (cond ((eq proc 'nowait) ;; Nowait frames have no client buffer list. @@ -1827,6 +1827,29 @@ server-stop-automatically--handle-delete-frame (save-buffers-kill-emacs) (delete-frame frame))))) +(defun server-stop-automatically--handle-kill-terminal (frame) + "Handle deletion of FRAME when `server-stop-automatically' is used." + (when server-stop-automatically + (if (if (and (processp (frame-parameter frame 'client)) + (eq this-command 'save-buffers-kill-terminal)) + (progn + (dolist (f (frame-list)) + (when (and (eq (frame-parameter frame 'client) + (frame-parameter f 'client)) + (not (eq frame f))) + (set-frame-parameter f 'client nil) + (let ((server-stop-automatically nil)) + (delete-frame f)))) + (if (cddr (frame-list)) + (let ((server-stop-automatically nil)) + (delete-frame frame) + nil) + t)) + (null (cddr (frame-list)))) + (let ((server-stop-automatically nil)) + (save-buffers-kill-emacs) + (delete-frame frame))))) + (defun server-stop-automatically--maybe-kill-emacs () "Handle closing of Emacs daemon when `server-stop-automatically' is used." (unless (cdr (frame-list)) -- 2.25.1