1
0
mirror of https://git.savannah.gnu.org/git/emacs.git synced 2024-11-23 07:19:15 +00:00

(global-auto-revert-non-file-buffers): Expand doc string.

(buffer-stale-function): New variable.
(auto-revert-list-diff, auto-revert-dired-file-list)
(auto-revert-dired-changed-p, auto-revert-buffer-p): Delete.
(auto-revert-handler): Take over some functionality of deleted functions.
(auto-revert-buffers): Delete call to auto-revert-buffer-p.
This commit is contained in:
Luc Teirlinck 2004-03-23 05:24:55 +00:00
parent 573e4d2ddd
commit d4411cef6e
2 changed files with 56 additions and 76 deletions

View File

@ -1,3 +1,20 @@
2004-03-22 Luc Teirlinck <teirllm@auburn.edu>
* autorevert.el (global-auto-revert-non-file-buffers): Expand doc
string.
(buffer-stale-function): New variable.
(auto-revert-list-diff, auto-revert-dired-file-list)
(auto-revert-dired-changed-p, auto-revert-buffer-p): Delete.
(auto-revert-handler): Take over some functionality of deleted
functions.
(auto-revert-buffers): Delete call to auto-revert-buffer-p.
* dired.el (dired-directory-changed-p, dired-buffer-stale-p): New
functions.
(dired-internal-noselect): Use dired-directory-changed-p.
Eliminate revert messages.
(dired-mode): Set buffer-stale-function to dired-buffer-stale-p.
2004-03-23 Kenichi Handa <handa@etlken2>
* international/characters.el: Setup syntaxes for more parentheses

View File

@ -172,7 +172,12 @@ would only waste precious space."
When non-nil, both file buffers and buffers with a custom
`revert-buffer-function' are reverted by Global Auto-Revert Mode.
Use this option with care since it could lead to excessive reverts."
Use this option with care since it could lead to excessive reverts.
Note also that for some non-file buffers the check whether the
buffer needs updating may be imperfect, due to efficiency
considerations, and may not take all information listed in the
buffer into account. Hence, a non-nil value for this option does
not necessarily make manual updates useless for non-file buffers."
:group 'auto-revert
:type 'boolean)
@ -193,6 +198,18 @@ Use this option with care since it could lead to excessive reverts."
This variable becomes buffer local when set in any fashion.")
(make-variable-buffer-local 'global-auto-revert-ignore-buffer)
(defvar buffer-stale-function nil
"Function to check whether a non-file buffer needs reverting.
This should be a function with one optional argument NOCONFIRM.
Auto Revert Mode sets NOCONFIRM to t. The function should return
non-nil if the buffer should be reverted. The buffer is current
when this function is called.
The idea behind the NOCONFIRM argument is that the same function
can also be used to ask the user whether the buffer should be
reverted. In such a situation one has to be less careful about,
say, reverting remote files, than if the function is called at
regular intervals by Auto Revert Mode.")
;; Internal variables:
@ -272,61 +289,6 @@ Use `auto-revert-mode' to revert a particular buffer."
(not (memq major-mode
global-auto-revert-ignore-modes)))))
(defun auto-revert-list-diff (a b)
"Check if strings in list A differ from list B."
(when (and a b)
(setq a (sort a 'string-lessp))
(setq b (sort b 'string-lessp))
(let (elt1 elt2)
(catch 'break
(while (and (setq elt1 (and a (pop a)))
(setq elt2 (and b (pop b))))
(if (not (string= elt1 elt2))
(throw 'break t)))))))
(defun auto-revert-dired-file-list ()
"Return list of dired files."
(let (file list)
(save-excursion
(goto-char (point-min))
(while (not (eobp))
(if (setq file (dired-get-filename t t))
(push file list))
(forward-line 1)))
list))
(defun auto-revert-dired-changed-p ()
"Check if dired buffer has changed."
(when (and (stringp dired-directory)
;; Exclude remote buffers, would be too slow for user
;; modem, timeouts, network lag ... all is possible
(not (string-match "@" dired-directory))
(file-directory-p dired-directory))
(let ((files (directory-files dired-directory))
(dired (auto-revert-dired-file-list)))
(or (not (eq (length files) (length dired)))
(auto-revert-list-diff files dired)))))
(defun auto-revert-buffer-p ()
"Check if current buffer should be reverted."
;; - Always include dired buffers to list. It would be too expensive
;; to test the "revert" status here each time timer launches.
;; - Same for VC buffers.
(or (and (eq major-mode 'dired-mode)
(or (and global-auto-revert-mode
global-auto-revert-non-file-buffers)
auto-revert-mode))
(and (not (buffer-modified-p))
(auto-revert-vc-buffer-p))
(and (not (buffer-modified-p))
(if (buffer-file-name)
(and (file-readable-p (buffer-file-name))
(not (verify-visited-file-modtime (current-buffer))))
(and revert-buffer-function
(or (and global-auto-revert-mode
global-auto-revert-non-file-buffers)
auto-revert-mode))))))
(defun auto-revert-vc-cvs-file-version (file)
"Get version of FILE by reading control file on disk."
(let* ((control "CVS/Entries")
@ -383,25 +345,27 @@ Use `auto-revert-mode' to revert a particular buffer."
(defun auto-revert-handler ()
"Revert current buffer."
(let (revert)
(cond
((eq major-mode 'dired-mode)
;; Dired includes revert-buffer-function
(when (and revert-buffer-function
(auto-revert-dired-changed-p))
(unless (buffer-modified-p)
(let (revert)
(cond
((auto-revert-vc-buffer-p)
(when (auto-revert-handler-vc)
(setq revert 'vc)))
((or (and (buffer-file-name)
(file-readable-p (buffer-file-name))
(not (verify-visited-file-modtime (current-buffer))))
(and global-auto-revert-non-file-buffers
revert-buffer-function
(boundp 'buffer-stale-function)
(functionp buffer-stale-function)
(funcall buffer-stale-function t)))
(setq revert t)))
((auto-revert-vc-buffer-p)
(when (auto-revert-handler-vc)
(setq revert 'vc)))
((or (buffer-file-name)
revert-buffer-function)
(setq revert t)))
(when revert
(revert-buffer 'ignore-auto 'dont-ask 'preserve-modes)
(if (eq revert 'vc)
(vc-mode-line buffer-file-name))
(if auto-revert-verbose
(message "Reverting buffer `%s'." (buffer-name))))))
(when revert
(revert-buffer 'ignore-auto 'dont-ask 'preserve-modes)
(if (eq revert 'vc)
(vc-mode-line buffer-file-name))
(if auto-revert-verbose
(message "Reverting buffer `%s'." (buffer-name)))))))
(defun auto-revert-buffers ()
"Revert buffers as specified by Auto-Revert and Global Auto-Revert Mode.
@ -453,8 +417,7 @@ the timer when no buffers need to be checked."
(memq buf auto-revert-buffer-list))
(setq auto-revert-buffer-list
(delq buf auto-revert-buffer-list)))
(when (and (auto-revert-active-p)
(auto-revert-buffer-p))
(when (auto-revert-active-p)
(auto-revert-handler)
;; `preserve-modes' avoids changing the (minor) modes. But we
;; do want to reset the mode for VC, so we do it explicitly.