Function: server-save-buffers-kill-terminal
server-save-buffers-kill-terminal is an autoloaded and byte-compiled
function defined in server.el.gz.
Signature
(server-save-buffers-kill-terminal ARG)
Documentation
Offer to save each buffer, then kill the current client.
With ARG non-nil, 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.
Source Code
;; Defined in /usr/src/emacs/lisp/server.el.gz
;;;###autoload
(defun server-save-buffers-kill-terminal (arg)
;; Called from save-buffers-kill-terminal in files.el.
"Offer to save each buffer, then kill the current client.
With ARG non-nil, 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."
(let ((proc (frame-parameter nil 'client)))
(cond ((eq proc 'nowait)
;; Nowait frames have no client buffer list.
(if (length> (frame-list) (if server-stop-automatically 2 1))
;; If there are any other frames, only delete this one.
;; When `server-stop-automatically' is set, don't count
;; the daemon frame.
(progn (save-some-buffers arg)
(delete-frame))
;; If we're the last frame standing, kill Emacs.
(save-buffers-kill-emacs arg)))
((processp proc)
(if (or (not server-stop-automatically)
(length> server-clients 1)
(seq-some
(lambda (frame)
(when-let ((p (frame-parameter frame 'client)))
(not (eq proc p))))
(frame-list)))
;; If `server-stop-automatically' is not enabled, there
;; are any other clients, or there are frames not owned
;; by the current client (e.g. `nowait' frames), then
;; we just want to delete this client.
(let ((buffers (process-get proc 'buffers)))
(save-some-buffers
arg (if buffers
;; Only files from emacsclient file list.
(lambda () (memq (current-buffer) buffers))
;; No emacsclient file list: don't override
;; `save-some-buffers-default-predicate' (unless
;; ARG is non-nil), since we're not killing
;; Emacs (unlike `save-buffers-kill-emacs').
(and arg t)))
(server-delete-client proc))
;; Otherwise, we want to kill Emacs.
(save-buffers-kill-emacs arg)))
(t (error "Invalid client frame")))))