(buffer-swapped-with): New var, moved from files.el. Add advice to
authorChong Yidong <cyd@stupidchicken.com>
Wed, 31 Dec 2008 02:44:00 +0000 (02:44 +0000)
committerChong Yidong <cyd@stupidchicken.com>
Wed, 31 Dec 2008 02:44:00 +0000 (02:44 +0000)
basic-save-buffer to use it.

lisp/mail/pmail.el

index 3a43cc0..428102b 100644 (file)
 (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.")