Mercurial > emacs
changeset 47199:e69385685151
(save-some-buffers-action-alist): New variable.
(save-some-buffers): Use that.
(diff-buffer-with-file): New function.
author | Richard M. Stallman <rms@gnu.org> |
---|---|
date | Mon, 02 Sep 2002 00:11:41 +0000 |
parents | 3189c7c8ef18 |
children | 617a371d38f2 |
files | lisp/files.el |
diffstat | 1 files changed, 43 insertions(+), 12 deletions(-) [+] |
line wrap: on
line diff
--- a/lisp/files.el Mon Sep 02 00:09:27 2002 +0000 +++ b/lisp/files.el Mon Sep 02 00:11:41 2002 +0000 @@ -2993,17 +2993,56 @@ (rename-file (cdr setmodes) buffer-file-name)))))) setmodes)) +(defun diff-buffer-with-file (&optional buffer) + "View the differences between BUFFER and its associated file. +This requires the external program \"diff\" to be in your `exec-path'." + (interactive "bBuffer: ") + (setq buffer (get-buffer (or buffer (current-buffer)))) + (let ((buf-filename (buffer-file-name buffer))) + (unless buf-filename + (error "Buffer %s has no associated file" buffer)) + (let ((tempfile (make-temp-file "buffer-content-"))) + (unwind-protect + (progn + (with-current-buffer buffer + (save-restriction + (widen) + (write-region (point-min) (point-max) tempfile nil 'nomessage))) + (diff buf-filename tempfile)) + (when (file-exists-p tempfile) + (delete-file tempfile))) + nil))) + +(defvar save-some-buffers-action-alist + '((?\C-r + (lambda (buf) + (view-buffer buf + (lambda (ignore) + (exit-recursive-edit))) + (recursive-edit) + ;; Return nil to ask about BUF again. + nil) + "display the current buffer") + (?d diff-buffer-with-file + "Show difference to last saved version")) + "ACTION-ALIST argument used in call to `map-y-or-n-p'.") +(put 'save-some-buffers-action-alist 'risky-local-variable t) + (defun save-some-buffers (&optional arg pred) "Save some modified file-visiting buffers. Asks user about each one. -You can answer `y' to save, `n' not to save, or `C-r' to look at the -buffer in question with `view-buffer' before deciding. +You can answer `y' to save, `n' not to save, `C-r' to look at the +buffer in question with `view-buffer' before deciding or `d' to +view the differences using `diff-buffer-to-file'. Optional argument (the prefix) non-nil means save all with no questions. Optional second argument PRED determines which buffers are considered: If PRED is nil, all the file-visiting buffers are considered. If PRED is t, then certain non-file buffers will also be considered. If PRED is a zero-argument function, it indicates for each buffer whether -to consider it or not when called with that buffer current." +to consider it or not when called with that buffer current. + +See `save-some-buffers-action-alist' if you want to +change the additional actions you can take on files." (interactive "P") (save-window-excursion (let* ((queried nil) @@ -3035,15 +3074,7 @@ (save-buffer))) (buffer-list) '("buffer" "buffers" "save") - (list (list ?\C-r (lambda (buf) - (view-buffer buf - (function - (lambda (ignore) - (exit-recursive-edit)))) - (recursive-edit) - ;; Return nil to ask about BUF again. - nil) - "display the current buffer")))) + save-some-buffers-action-alist)) (abbrevs-done (and save-abbrevs abbrevs-changed (progn