mirror of
https://git.savannah.gnu.org/git/emacs.git
synced 2025-02-07 20:54:32 +00:00
Allow `kill-buffer' query to save the buffer first
* lisp/loadup.el ("emacs-lisp/rmc"): Preload. * lisp/simple.el (kill-buffer--possibly-save): New function to offer to save the buffer before killing (bug#47075). * src/buffer.c (Fkill_buffer): Call the new function to query the user. (syms_of_buffer): Define symbol.
This commit is contained in:
parent
f2b7525e38
commit
e193ea3c34
@ -397,6 +397,9 @@
|
||||
(message "Warning: Change in load-path due to site-load will be \
|
||||
lost after dumping")))
|
||||
|
||||
;; Used by `kill-buffer', for instance.
|
||||
(load "emacs-lisp/rmc")
|
||||
|
||||
;; Make sure default-directory is unibyte when dumping. This is
|
||||
;; because we cannot decode and encode it correctly (since the locale
|
||||
;; environment is not, and should not be, set up). default-directory
|
||||
|
@ -10560,6 +10560,23 @@ If the buffer doesn't exist, create it first."
|
||||
(interactive)
|
||||
(pop-to-buffer-same-window (get-scratch-buffer-create)))
|
||||
|
||||
(defun kill-buffer--possibly-save (buffer)
|
||||
(let ((response
|
||||
(cadr
|
||||
(read-multiple-choice
|
||||
(format "Buffer %s modified; kill anyway?"
|
||||
(buffer-name))
|
||||
'((?y "yes" "kill buffer without saving")
|
||||
(?n "no" "exit without doing anything")
|
||||
(?s "save and then kill" "save the buffer and then kill it"))
|
||||
nil nil (not use-short-answers)))))
|
||||
(if (equal response "no")
|
||||
nil
|
||||
(unless (equal response "yes")
|
||||
(with-current-buffer buffer
|
||||
(save-buffer)))
|
||||
t)))
|
||||
|
||||
|
||||
|
||||
(provide 'simple)
|
||||
|
10
src/buffer.c
10
src/buffer.c
@ -1809,10 +1809,12 @@ cleaning up all windows currently displaying the buffer to be killed. */)
|
||||
/* Query if the buffer is still modified. */
|
||||
if (INTERACTIVE && modified)
|
||||
{
|
||||
AUTO_STRING (format, "Buffer %s modified; kill anyway? ");
|
||||
tem = do_yes_or_no_p (CALLN (Fformat, format, BVAR (b, name)));
|
||||
if (NILP (tem))
|
||||
/* Ask whether to kill the buffer, and exit if the user says
|
||||
"no". */
|
||||
if (NILP (call1 (Qkill_buffer__possibly_save, buffer)))
|
||||
return unbind_to (count, Qnil);
|
||||
/* Recheck modified. */
|
||||
modified = BUF_MODIFF (b) > BUF_SAVE_MODIFF (b);
|
||||
}
|
||||
|
||||
/* Delete the autosave file, if requested. */
|
||||
@ -6474,5 +6476,7 @@ will run for `clone-indirect-buffer' calls as well. */);
|
||||
|
||||
DEFSYM (Qautosaved, "autosaved");
|
||||
|
||||
DEFSYM (Qkill_buffer__possibly_save, "kill-buffer--possibly-save");
|
||||
|
||||
Fput (intern_c_string ("erase-buffer"), Qdisabled, Qt);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user