[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
bug#51377: Automatically exit server when it has no remaining clients
From: |
Jim Porter |
Subject: |
bug#51377: Automatically exit server when it has no remaining clients |
Date: |
Sun, 24 Oct 2021 09:03:13 -0700 |
On 10/24/2021 8:15 AM, Gregory Heytings wrote:
As discussed in
https://lists.gnu.org/archive/html/emacs-devel/2021-10/msg01465.html ,
an option to stop the Emacs server when it has no clients anymore (which
is similar to what some other apps do, for example browsers) would be
useful.
Patch attached.
I'm not sure I understand the patch; `save-buffers-kill-emacs' prompts
the user to save buffers before killing Emacs, but how would that work
in a daemon when there are no frames remaining?
I use a slightly-modified form of the following in my configuration,
which I'm working on hooking up to a flag to remember if the daemon was
started lazily:
--------------------------------------------------
(defun save-buffers-kill-terminal (&optional arg)
"Offer to save each buffer, then kill the current connection.
If the current frame has no client or is the last client of a daemon,
kill Emacs itself using `save-buffers-kill-emacs'.
With prefix ARG, silently save all file-visiting buffers, then kill.
If emacsclient was started with a list of filenames to edit, then
only these files will be asked to be saved."
(interactive "P")
;; Only kill the terminal if the current frame is a client. However, if
;; Emacs was started as a daemon and this is the last client, kill Emacs
;; entirely.
(if-let ((this-client (frame-parameter nil 'client))
((not (and (daemonp)
(equal server-clients (list this-client))))))
(server-save-buffers-kill-terminal arg)
(save-buffers-kill-emacs arg)))
(defun server-kill-emacs-query-function ()
"Ask before exiting Emacs if it has live clients.
If Emacs was started as a daemon and the only live client is the
current frame's client, don't bother asking."
(let ((ignored-client (and (daemonp) (frame-parameter nil 'client))))
(or (not (seq-some (lambda (client)
(unless (eq ignored-client client)
(seq-some #'buffer-live-p
(process-get client 'buffers))))
server-clients))
(yes-or-no-p "This Emacs session has clients; exit anyway? "))))
--------------------------------------------------
- bug#51377: Automatically exit server when it has no remaining clients, Gregory Heytings, 2021/10/24
- bug#51377: Automatically exit server when it has no remaining clients,
Jim Porter <=
- bug#51377: Automatically exit server when it has no remaining clients, Jim Porter, 2021/10/24
- bug#51377: Automatically exit server when it has no remaining clients, Gregory Heytings, 2021/10/24
- bug#51377: Automatically exit server when it has no remaining clients, Jim Porter, 2021/10/24
- bug#51377: Automatically exit server when it has no remaining clients, Gregory Heytings, 2021/10/24
- bug#51377: Automatically exit server when it has no remaining clients, Jim Porter, 2021/10/24
- bug#51377: Automatically exit server when it has no remaining clients, Gregory Heytings, 2021/10/24
- bug#51377: Automatically exit server when it has no remaining clients, Jim Porter, 2021/10/24
- bug#51377: Automatically exit server when it has no remaining clients, Gregory Heytings, 2021/10/24
- bug#51377: Automatically exit server when it has no remaining clients, Jim Porter, 2021/10/25
- bug#51377: Automatically exit server when it has no remaining clients, Gregory Heytings, 2021/10/26