Subject: bug#65719: [PATCH] Pass restart argument to 'kill-emacs-query-functions'

From: [email-masked]
Date: Mon, 04 Sep 2023 06:26:28 +0100

> One idea would be to simply introduce a new variable that takes the
> argument, while making the old one obsolete.  That would allow people 
> to
> slowly migrate over to the new one, without everything suddenly 
> breaking
> under their feet.

How does this patch sound? I think it's the best of both worlds :)

From 7d6f5c259cefe65b5e021dacee18966acc6bc120 Mon Sep 17 00:00:00 2001
From: Ellis Kenyo <[email-masked]>
Date: Mon, 4 Sep 2023 06:20:33 +0100
Subject: [PATCH] Introduce 'restart-emacs-query-functions'

* etc/NEWS: Update NEWS file.

* lisp/files.el (save-buffers-kill-emacs): Add new option
'restart-emacs-query-functions' for functions that should be called
when 'restart' is passed.
---
 etc/NEWS      |  7 +++++++
 lisp/files.el | 13 +++++++++++++
 2 files changed, 20 insertions(+)

diff --git a/etc/NEWS b/etc/NEWS
index bbf4b67fe34..95e6248c08a 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -776,6 +776,13 @@ the current project.
 The look of the key prompt in the project switcher has been changed
 slightly.  To get the previous one, set this option to 'brackets'.
 
+** Files
+
+*** New user option 'restart-emacs-query-functions'.
+Equivalent to 'kill-emacs-query-functions', this hook is called when
+'save-buffers-kill-emacs' is called with the 'restart' flag; if
+invoked from say 'M-x restart-emacs'.
+
 
 * Incompatible Lisp Changes in Emacs 30.1
 
diff --git a/lisp/files.el b/lisp/files.el
index 4188615e490..7849d6b7c81 100644
--- a/lisp/files.el
+++ b/lisp/files.el
@@ -8142,6 +8142,15 @@ defcustom kill-emacs-query-functions
   :version "26.1"
   :group 'convenience)
 
+(defcustom restart-emacs-query-functions nil
+  "Functions to call with no arguments to query about restarting
+Emacs. If any of these functions returns nil, restarting Emacs is
+canceled. `save-buffers-kill-emacs' calls these functions when passed
+`restart'.  See also `kill-emacs-hook'."
+  :type 'hook
+  :version "30.1"
+  :group 'convenience)
+
 (defcustom confirm-kill-emacs nil
   "How to ask for confirmation when leaving Emacs.
 If nil, the default, don't ask at all.  If the value is non-nil, it should
@@ -8227,6 +8236,10 @@ defun save-buffers-kill-emacs
                             (yes-or-no-p "Active processes exist; kill them and exit anyway? "))
                         (when (window-live-p window)
                           (quit-restore-window window 'kill)))))))))
+     ;; Only call these when restarting
+     (when restart
+       (run-hook-with-args-until-failure 'restart-emacs-query-functions))
+
      ;; Query the user for other things, perhaps.
      (run-hook-with-args-until-failure 'kill-emacs-query-functions)
      (or (null confirm)
-- 
2.41.0