@code{confirm-kill-emacs} is the function @code{yes-or-no-p}. The
default value of @code{confirm-kill-emacs} is @code{nil}.
+@vindex confirm-kill-processes
+ If the value of the variable @code{confirm-kill-processes} is
+@code{nil}, @kbd{C-x C-c} does not ask for confirmation before killing
+subprocesses started by Emacs. The value is @code{t} by default.
+
To further customize what happens when Emacs is exiting, see
@ref{Killing Emacs,,, elisp, The GNU Emacs Lisp Reference Manual}.
@end smallexample
@end defun
+@defopt confirm-kill-processes
+If this user option is set to @code{t} (the default), then Emacs asks
+for confirmation before killing processes on exit. If it is
+@code{nil}, Emacs kills processes without confirmation, i.e., the
+query flag of all processes is ignored.
+@end defopt
+
@node System Processes
@section Accessing Other Processes
@cindex system processes
keeps point at the end of the region, setting it to non-nil moves
point to the beginning of the region.
++++
+** The new user option 'confirm-kill-processes' allows the user to
+skip a confirmation prompt for killing subprocesses when exiting
+Emacs. When set to t (the default), Emacs will prompt for
+confirmation before killing subprocesses on exit, which is the same
+behavior as before.
+
---
** 'find-library-name' will now fall back on looking at 'load-history'
to try to locate libraries that have been loaded with an explicit path
:group 'convenience
:version "21.1")
+(defcustom confirm-kill-processes t
+ "Non-nil if Emacs should confirm killing processes on exit.
+If this variable is nil, the value of
+`process-query-on-exit-flag' is ignored. Otherwise, if there are
+processes with a non-nil `process-query-on-exit-flag', Emacs will
+prompt the user before killing them."
+ :type 'boolean
+ :group 'convenience
+ :version "26.1")
+
(defun save-buffers-kill-emacs (&optional arg)
"Offer to save each buffer, then kill this Emacs process.
With prefix ARG, silently save all file-visiting buffers without asking.
If there are active processes where `process-query-on-exit-flag'
-returns non-nil, asks whether processes should be killed.
+returns non-nil and `confirm-kill-processes' is non-nil,
+asks whether processes should be killed.
Runs the members of `kill-emacs-query-functions' in turn and stops
if any returns nil. If `confirm-kill-emacs' is non-nil, calls it."
(interactive "P")
(yes-or-no-p "Modified buffers exist; exit anyway? ")))
(or (not (fboundp 'process-list))
;; process-list is not defined on MSDOS.
+ (not confirm-kill-processes)
(let ((processes (process-list))
active)
(while processes
(setenv "FOO" foo-env)
(setenv "BAR" bar-env))))
+(ert-deftest files-test--save-buffers-kill-emacs--confirm-kill-processes ()
+ "Test that `save-buffers-kill-emacs' honors
+`confirm-kill-processes'."
+ (cl-letf* ((yes-or-no-p-prompts nil)
+ ((symbol-function #'yes-or-no-p)
+ (lambda (prompt)
+ (push prompt yes-or-no-p-prompts)
+ nil))
+ (kill-emacs-args nil)
+ ((symbol-function #'kill-emacs)
+ (lambda (&optional arg) (push arg kill-emacs-args)))
+ (process
+ (make-process
+ :name "sleep"
+ :command (list
+ (expand-file-name invocation-name invocation-directory)
+ "-batch" "-Q" "-eval" "(sleep-for 1000)")))
+ (confirm-kill-processes nil))
+ (save-buffers-kill-emacs)
+ (kill-process process)
+ (should-not yes-or-no-p-prompts)
+ (should (equal kill-emacs-args '(nil)))))
+
(provide 'files-tests)
;;; files-tests.el ends here