]> git.eshelyaron.com Git - emacs.git/commitdiff
(auto-revert-handler): In `auto-revert-tail-mode',
authorDavid Kastrup <dak@gnu.org>
Sun, 30 Sep 2007 20:26:55 +0000 (20:26 +0000)
committerDavid Kastrup <dak@gnu.org>
Sun, 30 Sep 2007 20:26:55 +0000 (20:26 +0000)
check only for changed size.
(auto-revert-tail-handler): Get size from caller.  If the file has
shrunk, tail the whole file again (the file presumably has been
rewritten).

lisp/ChangeLog
lisp/autorevert.el

index 61a2109bc04278b32ddf735ce16d1283ae9bd852..12eabe46e5a886fede3cbbaaac35ba9720a55555 100644 (file)
@@ -1,5 +1,11 @@
 2007-09-30  David Kastrup  <dak@gnu.org>
 
+       * autorevert.el (auto-revert-handler): In `auto-revert-tail-mode',
+       check only for changed size.
+       (auto-revert-tail-handler): Get size from caller.  If the file has
+       shrunk, tail the whole file again (the file presumably has been
+       rewritten).
+
        * woman.el (woman-topic-all-completions, woman-mini-help): Fix
        fallout from 2007-09-07 introduction of `dolist' when the list
        actually was being manipulated in the loop.
index f1e5b146058012320fe9c96bd4df04e0c7882c87..49e83c514a9ce2071443fdbdb1f36442d7a39696 100644 (file)
@@ -416,12 +416,16 @@ will use an up-to-date value of `auto-revert-interval'"
   "Revert current buffer, if appropriate.
 This is an internal function used by Auto-Revert Mode."
   (when (or auto-revert-tail-mode (not (buffer-modified-p)))
-    (let* ((buffer (current-buffer))
+    (let* ((buffer (current-buffer)) size
           (revert
            (or (and buffer-file-name
                     (not (file-remote-p buffer-file-name))
                     (file-readable-p buffer-file-name)
-                    (not (verify-visited-file-modtime buffer)))
+                    (if auto-revert-tail-mode
+                        (/= auto-revert-tail-pos
+                           (setq size
+                                 (nth 7 (file-attributes buffer-file-name))))
+                      (not (verify-visited-file-modtime buffer))))
                (and (or auto-revert-mode
                         global-auto-revert-non-file-buffers)
                     revert-buffer-function
@@ -445,7 +449,7 @@ This is an internal function used by Auto-Revert Mode."
                    (push window eoblist)))
           'no-mini t))
        (if auto-revert-tail-mode
-           (auto-revert-tail-handler)
+           (auto-revert-tail-handler size)
          ;; Bind buffer-read-only in case user has done C-x C-q,
          ;; so as not to forget that.  This gives undesirable results
          ;; when the file's mode changes, but that is less common.
@@ -460,20 +464,22 @@ This is an internal function used by Auto-Revert Mode."
       (when (or revert auto-revert-check-vc-info)
        (vc-find-file-hook)))))
 
-(defun auto-revert-tail-handler ()
-  (let ((size (nth 7 (file-attributes buffer-file-name)))
-       (modified (buffer-modified-p))
+(defun auto-revert-tail-handler (size)  
+  (let ((modified (buffer-modified-p))
        (inhibit-read-only t)           ; Ignore.
        (file buffer-file-name)
        (buffer-file-name nil))         ; Ignore that file has changed.
-    (when (> size auto-revert-tail-pos)
+    (when (/= auto-revert-tail-pos size)
       (run-hooks 'before-revert-hook)
       (undo-boundary)
       (save-restriction
        (widen)
        (save-excursion
          (goto-char (point-max))
-         (insert-file-contents file nil auto-revert-tail-pos size)))
+         (insert-file-contents file nil
+                               (and (< auto-revert-tail-pos size)
+                                    auto-revert-tail-pos)
+                               size)))
       (run-hooks 'after-revert-hook)
       (undo-boundary)
       (setq auto-revert-tail-pos size)