summaryrefslogtreecommitdiff
path: root/lisp/autorevert.el
diff options
context:
space:
mode:
authorDavid Kastrup <dak@gnu.org>2007-09-30 20:26:55 +0000
committerDavid Kastrup <dak@gnu.org>2007-09-30 20:26:55 +0000
commitfdc31e1d3897cbfdea861deabd2e813dadd8e66c (patch)
tree52cca260a7fdab1ec4d5abfd301d2254e1141304 /lisp/autorevert.el
parentb616a212d4f14d762ab4f8613d2789aa3c4a7916 (diff)
downloademacs-fdc31e1d3897cbfdea861deabd2e813dadd8e66c.tar.gz
(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).
Diffstat (limited to 'lisp/autorevert.el')
-rw-r--r--lisp/autorevert.el22
1 files changed, 14 insertions, 8 deletions
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)