]> git.eshelyaron.com Git - emacs.git/commitdiff
(rmail-generate-viewer-buffer): Be more careful about reusing existing
authorGlenn Morris <rgm@gnu.org>
Sat, 3 Oct 2009 02:07:28 +0000 (02:07 +0000)
committerGlenn Morris <rgm@gnu.org>
Sat, 3 Oct 2009 02:07:28 +0000 (02:07 +0000)
buffers, in case we happen to visit two files with the same basename.
(Bug#4593)

lisp/ChangeLog
lisp/mail/rmail.el

index e220b1c5f6e43df5be04cde33446924c785b210e..8e3319e7df4295a59b8bd5c4ef3a1d74701078a7 100644 (file)
@@ -1,3 +1,9 @@
+2009-10-03  Glenn Morris  <rgm@gnu.org>
+
+       * mail/rmail.el (rmail-generate-viewer-buffer): Be more careful about
+       reusing existing buffers, in case we happen to visit two files with the
+       same basename.  (Bug#4593)
+
 2009-10-02  Eli Zaretskii  <eliz@gnu.org>
 
        * makefile.w32-in (update-subdirs-CMD): Add cedet to
index b690a00dac5e7e8154faffac6c18a66f89c29eaf..1b11f21cdaa75bff8c6030631e0aa50bbec7645b 100644 (file)
@@ -1294,11 +1294,15 @@ Instead, these commands are available:
 (defun rmail-generate-viewer-buffer ()
   "Return a reusable buffer suitable for viewing messages.
 Create the buffer if necessary."
-  (let* ((suffix (file-name-nondirectory (or buffer-file-name (buffer-name))))
-        (name (format " *message-viewer %s*" suffix))
-        (buf (get-buffer name)))
-    (or buf
-       (generate-new-buffer name))))
+  ;; We want to reuse any existing view buffer, so as not to create an
+  ;; endless number of them.  But we must avoid clashes if we visit
+  ;; two different rmail files with the same basename (Bug#4593).
+  (if (and (local-variable-p 'rmail-view-buffer)
+          (buffer-live-p rmail-view-buffer))
+      rmail-view-buffer
+    (generate-new-buffer
+     (format " *message-viewer %s*"
+            (file-name-nondirectory (or buffer-file-name (buffer-name)))))))
 
 (defun rmail-swap-buffers ()
   "Swap text between current buffer and `rmail-view-buffer'.
@@ -1367,6 +1371,9 @@ If so restore the actual mbox message collection."
   (set-buffer-multibyte nil)
   (with-current-buffer (setq rmail-view-buffer (rmail-generate-viewer-buffer))
     (setq buffer-undo-list t)
+    ;; Note that this does not erase the buffer.  Should it?
+    ;; It depends on how this is called.  If somehow called with the
+    ;; rmail buffers swapped, it would erase the message collection.
     (set (make-local-variable 'rmail-overlay-list) nil)
     (set-buffer-multibyte t)
     ;; Force C-x C-s write Unix EOLs.