changeset 78408:0f698dc9799c

(auto-revert-tail-mode): auto-revert-tail-pos is zero, not nil, when the library is first loaded. Check for a file that has been modified on disk.
author Glenn Morris <rgm@gnu.org>
date Sat, 04 Aug 2007 02:34:46 +0000
parents 377800d78812
children a353ba061f01
files lisp/autorevert.el
diffstat 1 files changed, 16 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/autorevert.el	Sat Aug 04 02:32:43 2007 +0000
+++ b/lisp/autorevert.el	Sat Aug 04 02:34:46 2007 +0000
@@ -337,6 +337,22 @@
 	     (not auto-revert-tail-pos) ; library was loaded only after finding file
 	     (not (y-or-n-p "Buffer is modified, so tail offset may be wrong.  Proceed? ")))
 	(auto-revert-tail-mode 0)
+      ;; a-r-tail-pos stores the size of the file at the time of the
+      ;; last revert. After this package loads, it adds a
+      ;; find-file-hook to set this variable every time a file is
+      ;; loaded.  If the package is loaded only _after_ visiting the
+      ;; file to be reverted, then we have no idea what the value of
+      ;; a-r-tail-pos should have been when the file was visited.  If
+      ;; the file has changed on disk in the meantime, all we can do
+      ;; is offer to revert the whole thing. If you choose not to
+      ;; revert, then you might miss some output then happened
+      ;; between visiting the file and activating a-r-t-mode.
+      (and (zerop auto-revert-tail-pos)
+	   (not (verify-visited-file-modtime (current-buffer)))
+	   (y-or-n-p "File changed on disk, content may be missing.  \
+Perform a full revert? ")
+	   ;; Use this (not just revert-buffer) for point-preservation.
+	   (auto-revert-handler))
       ;; else we might reappend our own end when we save
       (add-hook 'before-save-hook (lambda () (auto-revert-tail-mode 0)) nil t)
       (or (local-variable-p 'auto-revert-tail-pos) ; don't lose prior position