diff options
| author | Luc Teirlinck | 2004-03-23 05:24:55 +0000 |
|---|---|---|
| committer | Luc Teirlinck | 2004-03-23 05:24:55 +0000 |
| commit | d4411cef6e5b6f955eed862cc465e3a0f5a2f46d (patch) | |
| tree | af260972117af9e4114e998a2490baf62bd9fc63 | |
| parent | 573e4d2ddd5c6f06f818fb238a907633ed2be1f2 (diff) | |
| download | emacs-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/ChangeLog | 17 | ||||
| -rw-r--r-- | lisp/autorevert.el | 115 |
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 @@ | |||
| 1 | 2004-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 | |||
| 1 | 2004-03-23 Kenichi Handa <handa@etlken2> | 18 | 2004-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." | |||
| 172 | When non-nil, both file buffers and buffers with a custom | 172 | When 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 | ||
| 175 | Use this option with care since it could lead to excessive reverts." | 175 | Use this option with care since it could lead to excessive reverts. |
| 176 | Note also that for some non-file buffers the check whether the | ||
| 177 | buffer needs updating may be imperfect, due to efficiency | ||
| 178 | considerations, and may not take all information listed in the | ||
| 179 | buffer into account. Hence, a non-nil value for this option does | ||
| 180 | not 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." | |||
| 193 | This variable becomes buffer local when set in any fashion.") | 198 | This 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. | ||
| 203 | This should be a function with one optional argument NOCONFIRM. | ||
| 204 | Auto Revert Mode sets NOCONFIRM to t. The function should return | ||
| 205 | non-nil if the buffer should be reverted. The buffer is current | ||
| 206 | when this function is called. | ||
| 207 | |||
| 208 | The idea behind the NOCONFIRM argument is that the same function | ||
| 209 | can also be used to ask the user whether the buffer should be | ||
| 210 | reverted. In such a situation one has to be less careful about, | ||
| 211 | say, reverting remote files, than if the function is called at | ||
| 212 | regular 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. |