diff lisp/files.el @ 95806:2e2ae1dd33cc

* emacs-lisp/map-ynp.el (map-y-or-n-p): Add support for other-window-scroll. * files.el (save-some-buffers-action-alist): Only use recursive-edit if the user enabled recursive-minibuffers.
author Stefan Monnier <monnier@iro.umontreal.ca>
date Wed, 11 Jun 2008 01:47:48 +0000
parents ffc05d56ac32
children b76b9628d74f
line wrap: on
line diff
--- a/lisp/files.el	Wed Jun 11 01:13:48 2008 +0000
+++ b/lisp/files.el	Wed Jun 11 01:47:48 2008 +0000
@@ -4163,22 +4163,28 @@
   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)
+  `((?\C-r
+     ,(lambda (buf)
+        (if (not enable-recursive-minibuffers)
+            (progn (display-buffer buf)
+                   (setq other-window-scroll-buffer buf))
+          (view-buffer buf (lambda (_) (exit-recursive-edit)))
+          (recursive-edit))
+        ;; Return nil to ask about BUF again.
+        nil)
      "view this buffer")
-    (?d (lambda (buf)
-	  (save-window-excursion
-	    (diff-buffer-with-file buf))
-	  (view-buffer (get-buffer-create "*Diff*")
-		       (lambda (ignore) (exit-recursive-edit)))
-	  (recursive-edit)
-	  nil)
+    (?d ,(lambda (buf)
+           (if (null buffer-file-name)
+               (message "Not applicable: no file")
+             (save-window-excursion (diff-buffer-with-file buf))
+             (if (not enable-recursive-minibuffers)
+                 (progn (display-buffer (get-buffer-create "*Diff*"))
+                        (setq other-window-scroll-buffer "*Diff*"))
+               (view-buffer (get-buffer-create "*Diff*")
+                            (lambda (_) (exit-recursive-edit)))
+               (recursive-edit)))
+           ;; Return nil to ask about BUF again.
+           nil)
 	"view changes in this buffer"))
   "ACTION-ALIST argument used in call to `map-y-or-n-p'.")
 
@@ -4216,31 +4222,29 @@
       ;; and record the number thus saved.
       (setq files-done
 	    (map-y-or-n-p
-	     (function
-	      (lambda (buffer)
-		(and (buffer-modified-p buffer)
-		     (not (buffer-base-buffer buffer))
-		     (or
-		      (buffer-file-name buffer)
-		      (and pred
-			   (progn
-			     (set-buffer buffer)
-			     (and buffer-offer-save (> (buffer-size) 0)))))
-		     (or (not (functionp pred))
-			 (with-current-buffer buffer (funcall pred)))
-		     (if arg
-			 t
-		       (setq queried t)
-		       (if (buffer-file-name buffer)
-			   (format "Save file %s? "
-				   (buffer-file-name buffer))
-			 (format "Save buffer %s? "
-				 (buffer-name buffer)))))))
-	     (function
-	      (lambda (buffer)
-		(set-buffer buffer)
-		(save-buffer)))
-	     (buffer-list)
+             (lambda (buffer)
+               (and (buffer-modified-p buffer)
+                    (not (buffer-base-buffer buffer))
+                    (or
+                     (buffer-file-name buffer)
+                     (and pred
+                          (progn
+                            (set-buffer buffer)
+                            (and buffer-offer-save (> (buffer-size) 0)))))
+                    (or (not (functionp pred))
+                        (with-current-buffer buffer (funcall pred)))
+                    (if arg
+                        t
+                      (setq queried t)
+                      (if (buffer-file-name buffer)
+                          (format "Save file %s? "
+                                  (buffer-file-name buffer))
+                        (format "Save buffer %s? "
+                                (buffer-name buffer))))))
+             (lambda (buffer)
+               (with-current-buffer buffer
+                 (save-buffer)))
+             (buffer-list)
 	     '("buffer" "buffers" "save")
 	     save-some-buffers-action-alist))
       ;; Maybe to save abbrevs, and record whether