# HG changeset patch # User David Kastrup # Date 1191184015 0 # Node ID 9f33047587c7d3d2adfbc5934e9b6af4d16102e1 # Parent 4d9afe4d96b46378b5e0c9d24a4da2790b4efa5a (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). diff -r 4d9afe4d96b4 -r 9f33047587c7 lisp/ChangeLog --- a/lisp/ChangeLog Sun Sep 30 19:10:44 2007 +0000 +++ b/lisp/ChangeLog Sun Sep 30 20:26:55 2007 +0000 @@ -1,5 +1,11 @@ 2007-09-30 David Kastrup + * 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. diff -r 4d9afe4d96b4 -r 9f33047587c7 lisp/autorevert.el --- a/lisp/autorevert.el Sun Sep 30 19:10:44 2007 +0000 +++ b/lisp/autorevert.el Sun Sep 30 20:26:55 2007 +0000 @@ -416,12 +416,16 @@ "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 @@ (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 @@ (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)