aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLuc Teirlinck2004-03-23 05:24:55 +0000
committerLuc Teirlinck2004-03-23 05:24:55 +0000
commitd4411cef6e5b6f955eed862cc465e3a0f5a2f46d (patch)
treeaf260972117af9e4114e998a2490baf62bd9fc63
parent573e4d2ddd5c6f06f818fb238a907633ed2be1f2 (diff)
downloademacs-d4411cef6e5b6f955eed862cc465e3a0f5a2f46d.tar.gz
emacs-d4411cef6e5b6f955eed862cc465e3a0f5a2f46d.zip
(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.
-rw-r--r--lisp/ChangeLog17
-rw-r--r--lisp/autorevert.el115
2 files changed, 56 insertions, 76 deletions
diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index 3a4e6327bef..37855861e12 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -1,3 +1,20 @@
12004-03-22 Luc Teirlinck <teirllm@auburn.edu>
2
3 * autorevert.el (global-auto-revert-non-file-buffers): Expand doc
4 string.
5 (buffer-stale-function): New variable.
6 (auto-revert-list-diff, auto-revert-dired-file-list)
7 (auto-revert-dired-changed-p, auto-revert-buffer-p): Delete.
8 (auto-revert-handler): Take over some functionality of deleted
9 functions.
10 (auto-revert-buffers): Delete call to auto-revert-buffer-p.
11
12 * dired.el (dired-directory-changed-p, dired-buffer-stale-p): New
13 functions.
14 (dired-internal-noselect): Use dired-directory-changed-p.
15 Eliminate revert messages.
16 (dired-mode): Set buffer-stale-function to dired-buffer-stale-p.
17
12004-03-23 Kenichi Handa <handa@etlken2> 182004-03-23 Kenichi Handa <handa@etlken2>
2 19
3 * international/characters.el: Setup syntaxes for more parentheses 20 * international/characters.el: Setup syntaxes for more parentheses
diff --git a/lisp/autorevert.el b/lisp/autorevert.el
index c2620a1940e..efae885de60 100644
--- a/lisp/autorevert.el
+++ b/lisp/autorevert.el
@@ -172,7 +172,12 @@ would only waste precious space."
172When non-nil, both file buffers and buffers with a custom 172When non-nil, both file buffers and buffers with a custom
173`revert-buffer-function' are reverted by Global Auto-Revert Mode. 173`revert-buffer-function' are reverted by Global Auto-Revert Mode.
174 174
175Use this option with care since it could lead to excessive reverts." 175Use this option with care since it could lead to excessive reverts.
176Note also that for some non-file buffers the check whether the
177buffer needs updating may be imperfect, due to efficiency
178considerations, and may not take all information listed in the
179buffer into account. Hence, a non-nil value for this option does
180not necessarily make manual updates useless for non-file buffers."
176 :group 'auto-revert 181 :group 'auto-revert
177 :type 'boolean) 182 :type 'boolean)
178 183
@@ -193,6 +198,18 @@ Use this option with care since it could lead to excessive reverts."
193This variable becomes buffer local when set in any fashion.") 198This variable becomes buffer local when set in any fashion.")
194(make-variable-buffer-local 'global-auto-revert-ignore-buffer) 199(make-variable-buffer-local 'global-auto-revert-ignore-buffer)
195 200
201(defvar buffer-stale-function nil
202 "Function to check whether a non-file buffer needs reverting.
203This should be a function with one optional argument NOCONFIRM.
204Auto Revert Mode sets NOCONFIRM to t. The function should return
205non-nil if the buffer should be reverted. The buffer is current
206when this function is called.
207
208The idea behind the NOCONFIRM argument is that the same function
209can also be used to ask the user whether the buffer should be
210reverted. In such a situation one has to be less careful about,
211say, reverting remote files, than if the function is called at
212regular intervals by Auto Revert Mode.")
196 213
197;; Internal variables: 214;; Internal variables:
198 215
@@ -272,61 +289,6 @@ Use `auto-revert-mode' to revert a particular buffer."
272 (not (memq major-mode 289 (not (memq major-mode
273 global-auto-revert-ignore-modes))))) 290 global-auto-revert-ignore-modes)))))
274 291
275(defun auto-revert-list-diff (a b)
276 "Check if strings in list A differ from list B."
277 (when (and a b)
278 (setq a (sort a 'string-lessp))
279 (setq b (sort b 'string-lessp))
280 (let (elt1 elt2)
281 (catch 'break
282 (while (and (setq elt1 (and a (pop a)))
283 (setq elt2 (and b (pop b))))
284 (if (not (string= elt1 elt2))
285 (throw 'break t)))))))
286
287(defun auto-revert-dired-file-list ()
288 "Return list of dired files."
289 (let (file list)
290 (save-excursion
291 (goto-char (point-min))
292 (while (not (eobp))
293 (if (setq file (dired-get-filename t t))
294 (push file list))
295 (forward-line 1)))
296 list))
297
298(defun auto-revert-dired-changed-p ()
299 "Check if dired buffer has changed."
300 (when (and (stringp dired-directory)
301 ;; Exclude remote buffers, would be too slow for user
302 ;; modem, timeouts, network lag ... all is possible
303 (not (string-match "@" dired-directory))
304 (file-directory-p dired-directory))
305 (let ((files (directory-files dired-directory))
306 (dired (auto-revert-dired-file-list)))
307 (or (not (eq (length files) (length dired)))
308 (auto-revert-list-diff files dired)))))
309
310(defun auto-revert-buffer-p ()
311 "Check if current buffer should be reverted."
312 ;; - Always include dired buffers to list. It would be too expensive
313 ;; to test the "revert" status here each time timer launches.
314 ;; - Same for VC buffers.
315 (or (and (eq major-mode 'dired-mode)
316 (or (and global-auto-revert-mode
317 global-auto-revert-non-file-buffers)
318 auto-revert-mode))
319 (and (not (buffer-modified-p))
320 (auto-revert-vc-buffer-p))
321 (and (not (buffer-modified-p))
322 (if (buffer-file-name)
323 (and (file-readable-p (buffer-file-name))
324 (not (verify-visited-file-modtime (current-buffer))))
325 (and revert-buffer-function
326 (or (and global-auto-revert-mode
327 global-auto-revert-non-file-buffers)
328 auto-revert-mode))))))
329
330(defun auto-revert-vc-cvs-file-version (file) 292(defun auto-revert-vc-cvs-file-version (file)
331 "Get version of FILE by reading control file on disk." 293 "Get version of FILE by reading control file on disk."
332 (let* ((control "CVS/Entries") 294 (let* ((control "CVS/Entries")
@@ -383,25 +345,27 @@ Use `auto-revert-mode' to revert a particular buffer."
383 345
384(defun auto-revert-handler () 346(defun auto-revert-handler ()
385 "Revert current buffer." 347 "Revert current buffer."
386 (let (revert) 348 (unless (buffer-modified-p)
387 (cond 349 (let (revert)
388 ((eq major-mode 'dired-mode) 350 (cond
389 ;; Dired includes revert-buffer-function 351 ((auto-revert-vc-buffer-p)
390 (when (and revert-buffer-function 352 (when (auto-revert-handler-vc)
391 (auto-revert-dired-changed-p)) 353 (setq revert 'vc)))
354 ((or (and (buffer-file-name)
355 (file-readable-p (buffer-file-name))
356 (not (verify-visited-file-modtime (current-buffer))))
357 (and global-auto-revert-non-file-buffers
358 revert-buffer-function
359 (boundp 'buffer-stale-function)
360 (functionp buffer-stale-function)
361 (funcall buffer-stale-function t)))
392 (setq revert t))) 362 (setq revert t)))
393 ((auto-revert-vc-buffer-p) 363 (when revert
394 (when (auto-revert-handler-vc) 364 (revert-buffer 'ignore-auto 'dont-ask 'preserve-modes)
395 (setq revert 'vc))) 365 (if (eq revert 'vc)
396 ((or (buffer-file-name) 366 (vc-mode-line buffer-file-name))
397 revert-buffer-function) 367 (if auto-revert-verbose
398 (setq revert t))) 368 (message "Reverting buffer `%s'." (buffer-name)))))))
399 (when revert
400 (revert-buffer 'ignore-auto 'dont-ask 'preserve-modes)
401 (if (eq revert 'vc)
402 (vc-mode-line buffer-file-name))
403 (if auto-revert-verbose
404 (message "Reverting buffer `%s'." (buffer-name))))))
405 369
406(defun auto-revert-buffers () 370(defun auto-revert-buffers ()
407 "Revert buffers as specified by Auto-Revert and Global Auto-Revert Mode. 371 "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."
453 (memq buf auto-revert-buffer-list)) 417 (memq buf auto-revert-buffer-list))
454 (setq auto-revert-buffer-list 418 (setq auto-revert-buffer-list
455 (delq buf auto-revert-buffer-list))) 419 (delq buf auto-revert-buffer-list)))
456 (when (and (auto-revert-active-p) 420 (when (auto-revert-active-p)
457 (auto-revert-buffer-p))
458 (auto-revert-handler) 421 (auto-revert-handler)
459 ;; `preserve-modes' avoids changing the (minor) modes. But we 422 ;; `preserve-modes' avoids changing the (minor) modes. But we
460 ;; do want to reset the mode for VC, so we do it explicitly. 423 ;; do want to reset the mode for VC, so we do it explicitly.