]> git.eshelyaron.com Git - emacs.git/commitdiff
Be more efficient when checking for a matching client in server.el
authorJim Porter <jporterbugs@gmail.com>
Wed, 27 Oct 2021 13:54:42 +0000 (15:54 +0200)
committerLars Ingebrigtsen <larsi@gnus.org>
Wed, 27 Oct 2021 13:54:42 +0000 (15:54 +0200)
lisp/server.el (server-handle-delete-frame): Use 'seq-some' to
determine if another frame for the current client exists.
(server-kill-emacs-query-function): Use 'seq-some' to determine if
another live client exists (bug#51420).

lisp/server.el

index 5306a5477672bd16c650a9d65900e392bb351404..d99865623774ffe8e6d9c773f11a7de90b549ba2 100644 (file)
@@ -485,11 +485,11 @@ If CLIENT is non-nil, add a description of it to the logged message."
     (when (and (frame-live-p frame)
               proc
               ;; See if this is the last frame for this client.
-              (>= 1 (let ((frame-num 0))
-                      (dolist (f (frame-list))
-                        (when (eq proc (frame-parameter f 'client))
-                          (setq frame-num (1+ frame-num))))
-                      frame-num)))
+               (not (seq-some
+                     (lambda (f)
+                       (and (not (eq frame f))
+                            (eq proc (frame-parameter f 'client))))
+                     (frame-list))))
       (server-log (format "server-handle-delete-frame, frame %s" frame) proc)
       (server-delete-client proc 'noframe)))) ; Let delete-frame delete the frame later.
 
@@ -1580,13 +1580,13 @@ specifically for the clients and did not exist before their request for it."
     (server-buffer-done (current-buffer))))
 
 (defun server-kill-emacs-query-function ()
-  "Ask before exiting Emacs if it has live clients."
-  (or (not (let (live-client)
-             (dolist (proc server-clients)
-               (when (memq t (mapcar #'buffer-live-p
-                                     (process-get proc 'buffers)))
-                 (setq live-client t)))
-             live-client))
+  "Ask before exiting Emacs if it has live clients.
+A \"live client\" is a client with at least one live buffer
+associated with it."
+  (or (not (seq-some (lambda (proc)
+                       (seq-some #'buffer-live-p
+                                 (process-get proc 'buffers)))
+                     server-clients))
       (yes-or-no-p "This Emacs session has clients; exit anyway? ")))
 
 (defun server-kill-buffer ()