diff options
author | David Kastrup <dak@gnu.org> | 2007-09-30 20:26:55 +0000 |
---|---|---|
committer | David Kastrup <dak@gnu.org> | 2007-09-30 20:26:55 +0000 |
commit | fdc31e1d3897cbfdea861deabd2e813dadd8e66c (patch) | |
tree | 52cca260a7fdab1ec4d5abfd301d2254e1141304 /lisp/autorevert.el | |
parent | b616a212d4f14d762ab4f8613d2789aa3c4a7916 (diff) | |
download | emacs-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.el | 22 |
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) |