diff options
author | Glenn Morris <rgm@gnu.org> | 2009-10-03 02:07:28 +0000 |
---|---|---|
committer | Glenn Morris <rgm@gnu.org> | 2009-10-03 02:07:28 +0000 |
commit | ac3c593c978f603f408ef1ea1bae26c92a0df9f0 (patch) | |
tree | 989b167a74aa36c40266034e007f2c2cb4a87144 /lisp/mail | |
parent | de87fb719dfb7403649715b4193038e0f352b64f (diff) | |
download | emacs-ac3c593c978f603f408ef1ea1bae26c92a0df9f0.tar.gz emacs-ac3c593c978f603f408ef1ea1bae26c92a0df9f0.tar.bz2 emacs-ac3c593c978f603f408ef1ea1bae26c92a0df9f0.zip |
(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)
Diffstat (limited to 'lisp/mail')
-rw-r--r-- | lisp/mail/rmail.el | 17 |
1 files changed, 12 insertions, 5 deletions
diff --git a/lisp/mail/rmail.el b/lisp/mail/rmail.el index b690a00dac5..1b11f21cdaa 100644 --- a/lisp/mail/rmail.el +++ b/lisp/mail/rmail.el @@ -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. |