From db0cffb849c0a0be50db7ad4a3a0d48ff343854b Mon Sep 17 00:00:00 2001 From: Jim Porter Date: Thu, 1 Dec 2022 11:42:48 -0800 Subject: [PATCH 3/7] Restructure 'server-stop-automatically--handle-kill-terminal' This changes the function to have the same structure as 'server-save-buffers-kill-terminal', but otherwise works exactly the same as before. This just takes the nested 'if' statement and brings it to the top level as 'cond' (note that the 'client' frame parameter can only be a process or the symbol 'nowait' here, since otherwise 'server-save-buffers-kill-terminal' wouldn't have been called). * lisp/server.el (server-stop-automatically--handle-kill-terminal): Restructure. --- lisp/server.el | 41 +++++++++++++++++++++++------------------ 1 file changed, 23 insertions(+), 18 deletions(-) diff --git a/lisp/server.el b/lisp/server.el index 64332442d3..7191387959 100644 --- a/lisp/server.el +++ b/lisp/server.el @@ -1815,24 +1815,29 @@ server-stop-automatically--handle-delete-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 (processp (frame-parameter frame 'client)) - (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))))) + (let ((proc (frame-parameter frame 'client))) + (cond ((eq proc 'nowait) + (if (null (cddr (frame-list))) + (let ((server-stop-automatically nil)) + (save-buffers-kill-emacs) + (delete-frame frame)))) + ((processp proc) + (if (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)) + (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." -- 2.25.1