Don't allow killing Rmail view buffer by itself.
authorRichard M. Stallman <rms@gnu.org>
Fri, 23 Sep 2011 23:44:32 +0000 (19:44 -0400)
committerRichard M. Stallman <rms@gnu.org>
Fri, 23 Sep 2011 23:44:32 +0000 (19:44 -0400)
It gets killed only when its Rmail buffer gets killed.

lisp/ChangeLog
lisp/mail/rmail.el

index 0b4a7aa..b5f458e 100644 (file)
@@ -1,3 +1,9 @@
+2011-09-23  Richard Stallman  <rms@gnu.org>
+
+       * mail/rmail.el (rmail-view-buffer-kill-buffer-hook): New function.
+       (rmail-generate-viewer-buffer): Put that hook on view buffer.
+       (rmail-mode-kill-buffer-hook): Override that hook, to kill view buffer.
+
 2011-09-23  Andreas Schwab  <schwab@linux-m68k.org>
 
        * international/mule-diag.el (mule-diag): Insert a newline after
index db06de9..54de631 100644 (file)
@@ -1310,9 +1310,14 @@ Create the buffer if necessary."
   (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)))))))
+    (let ((newbuf
+          (generate-new-buffer
+           (format " *message-viewer %s*"
+                   (file-name-nondirectory
+                    (or buffer-file-name (buffer-name)))))))
+      (with-current-buffer newbuf
+       (add-hook 'kill-buffer-hook 'rmail-view-buffer-kill-buffer-hook nil t))
+      newbuf)))
 
 (defun rmail-swap-buffers ()
   "Swap text between current buffer and `rmail-view-buffer'.
@@ -1372,7 +1377,14 @@ If so restore the actual mbox message collection."
     (message "Marking buffer unmodified to avoid rewriting Babyl file as mbox file")))
 
 (defun rmail-mode-kill-buffer-hook ()
-  (if (buffer-live-p rmail-view-buffer) (kill-buffer rmail-view-buffer)))
+  ;; Turn off the hook on the view buffer, so we can kill it, then kill it.
+  (if (buffer-live-p rmail-view-buffer)
+      (with-current-buffer rmail-view-buffer
+       (setq kill-buffer-hook nil)
+       (kill-buffer rmail-view-buffer))))
+
+(defun rmail-view-buffer-kill-buffer-hook ()
+  (error "Can't kill message view buffer by itself"))
 
 ;; Set up the permanent locals associated with an Rmail file.
 (defun rmail-perm-variables ()