diff lisp/mail/pmail.el @ 100800:e680c5af27d3

(buffer-swapped-with): New var, moved from files.el. Add advice to basic-save-buffer to use it.
author Chong Yidong <cyd@stupidchicken.com>
date Wed, 31 Dec 2008 02:44:00 +0000
parents d9d23e4f6b00
children a9dc0e7c3f2b
line wrap: on
line diff
--- a/lisp/mail/pmail.el	Wed Dec 31 02:43:13 2008 +0000
+++ b/lisp/mail/pmail.el	Wed Dec 31 02:44:00 2008 +0000
@@ -41,6 +41,34 @@
 (require 'mail-utils)
 (eval-when-compile (require 'mule-util)) ; for detect-coding-with-priority
 
+
+;; The buffer-swapped-with feature has been moved here temporarily.
+;; When pmail is merged, this advice must be eliminated and the
+;; functionality somehow reimplemented.
+
+(defvar buffer-swapped-with nil
+  "Buffer that this buffer's contents are temporarily swapped with.
+You should only set this variable in file-visiting buffers,
+because it only affects how to save the buffer in its file.")
+
+(make-variable-buffer-local 'buffer-swapped-with)
+
+(defadvice basic-save-buffer
+  (around check-swap activate)
+  "If this buffer's real contents are swapped with some other buffer,
+temporarily unswap in order to save the real contents.  This
+advice is temporarily used by pmail until a satisfactory solution
+can be written."
+  (if (not buffer-swapped-with)
+      ad-do-it
+    (unwind-protect
+	(let ((modp (buffer-modified-p)))
+	  (buffer-swap-text buffer-swapped-with)
+	  (set-buffer-modified-p modp)
+	  ad-do-it)
+      (buffer-swap-text buffer-swapped-with)
+      (set-buffer-modified-p nil))))
+
 (defconst pmail-attribute-header "X-RMAIL-ATTRIBUTES"
   "The header that stores the Pmail attribute data.")