]> git.eshelyaron.com Git - emacs.git/commitdiff
(buffer-swapped-with): New variable.
authorRichard M. Stallman <rms@gnu.org>
Mon, 22 Dec 2008 19:48:08 +0000 (19:48 +0000)
committerRichard M. Stallman <rms@gnu.org>
Mon, 22 Dec 2008 19:48:08 +0000 (19:48 +0000)
(basic-save-buffer-0): Most of basic-save-buffer moved here.
(basic-save-buffer): Unswap the buffer temporarily if nec.

lisp/files.el

index 0e303805d0ca9e0c891a02fb74d279e97231fd3f..a7c7902629da7b42f274456e9352000aedf4fbe2 100644 (file)
@@ -4065,6 +4065,13 @@ in such cases.")
 (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 @@ the visited file in the usual way.
 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)