changeset 100639:752b6a20d191

(buffer-swapped-with): New variable. (basic-save-buffer-0): Most of basic-save-buffer moved here. (basic-save-buffer): Unswap the buffer temporarily if nec.
author Richard M. Stallman <rms@gnu.org>
date Mon, 22 Dec 2008 19:48:08 +0000
parents fcedbc3826f9
children 40652147be0c
files lisp/files.el
diffstat 1 files changed, 18 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/files.el	Mon Dec 22 19:28:44 2008 +0000
+++ b/lisp/files.el	Mon Dec 22 19:48:08 2008 +0000
@@ -4065,6 +4065,13 @@
 (make-variable-buffer-local 'save-buffer-coding-system)
 (put 'save-buffer-coding-system 'permanent-local t)
 
+(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)
+
 (defun basic-save-buffer ()
   "Save the current buffer in its visited file, if it has been modified.
 The hooks `write-contents-functions' and `write-file-functions' get a chance
@@ -4073,6 +4080,17 @@
 Before and after saving the buffer, this function runs
 `before-save-hook' and `after-save-hook', respectively."
   (interactive)
+  (if (not buffer-swapped-with)
+      (basic-save-buffer-0)
+    ;; If this buffer's real contents are "swapped" with some other buffer,
+    ;; temporarily unswap in order to save the real contents.
+    (unwind-protect
+	(progn
+	  (buffer-swap-text buffer-swapped-with)
+	  (basic-save-buffer-0))
+      (buffer-swap-text buffer-swapped-with))))
+
+(defun basic-save-buffer-0 ()
   (save-current-buffer
     ;; In an indirect buffer, save its base buffer instead.
     (if (buffer-base-buffer)