From fdc31e1d3897cbfdea861deabd2e813dadd8e66c Mon Sep 17 00:00:00 2001 From: David Kastrup Date: Sun, 30 Sep 2007 20:26:55 +0000 Subject: [PATCH] (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). --- lisp/ChangeLog | 6 ++++++ lisp/autorevert.el | 22 ++++++++++++++-------- 2 files changed, 20 insertions(+), 8 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 61a2109bc04..12eabe46e5a 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -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 --git a/lisp/autorevert.el b/lisp/autorevert.el index f1e5b146058..49e83c514a9 100644 --- a/lisp/autorevert.el +++ b/lisp/autorevert.el @@ -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) -- 2.39.5