changeset 100801:da95fec1ae70

(tar-mode): Set write-contents-functions instead of write-region-annotate-functions. (tar-mode-write-contents): New function. (tar-write-region-annotate): Remove.
author Andreas Schwab <schwab@suse.de>
date Wed, 31 Dec 2008 09:58:49 +0000
parents e680c5af27d3
children ded357c75f85
files lisp/ChangeLog lisp/tar-mode.el
diffstat 2 files changed, 20 insertions(+), 10 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/ChangeLog	Wed Dec 31 02:44:00 2008 +0000
+++ b/lisp/ChangeLog	Wed Dec 31 09:58:49 2008 +0000
@@ -1,3 +1,10 @@
+2008-12-31  Andreas Schwab  <schwab@suse.de>
+
+	* tar-mode.el (tar-mode): Set write-contents-functions instead of
+	write-region-annotate-functions.
+	(tar-mode-write-contents): New function.
+	(tar-write-region-annotate): Remove.
+
 2008-12-31  Chong Yidong  <cyd@stupidchicken.com>
 
 	* files.el (basic-save-buffer): Revert 2008-12-22 change.
--- a/lisp/tar-mode.el	Wed Dec 31 02:44:00 2008 +0000
+++ b/lisp/tar-mode.el	Wed Dec 31 09:58:49 2008 +0000
@@ -637,7 +637,7 @@
   ;; buffer for the summary.
   (assert (not (tar-data-swapped-p)))
   (set (make-local-variable 'revert-buffer-function) 'tar-mode-revert)
-  (add-hook 'write-region-annotate-functions 'tar-write-region-annotate nil t)
+  (add-hook 'write-contents-functions 'tar-mode-write-contents nil t)
   (add-hook 'kill-buffer-hook 'tar-mode-kill-buffer-hook nil t)
   (add-hook 'change-major-mode-hook 'tar-change-major-mode-hook nil t)
   ;; Tar data is made of bytes, not chars.
@@ -1213,15 +1213,18 @@
             (insert (make-string (- goal-end (point-max)) ?\0))))))))
 
 
-;; Used in write-region-annotate-functions to write tar-files out correctly.
-(defun tar-write-region-annotate (start end)
-  ;; When called from write-file (and auto-save), `start' is nil.
-  ;; When called from M-x write-region, we assume the user wants to save
-  ;; (part of) the summary, not the tar data.
-  (unless (or start (not (tar-data-swapped-p)))
-    (tar-clear-modification-flags)
-    (set-buffer tar-data-buffer)
-    nil))
+;; Used in write-contents-functions to write tar-files out correctly.
+(defun tar-mode-write-contents ()
+  (save-excursion
+    (unwind-protect
+	(progn
+	  (when (tar-data-swapped-p) (tar-swap-data))
+	  (write-region nil nil buffer-file-name nil t))
+      (unless (tar-data-swapped-p) (tar-swap-data))))
+  (tar-clear-modification-flags)
+  (set-buffer-modified-p nil)
+  ;; Return t because we've written the file.
+  t)
 
 (provide 'tar-mode)