* [patch] 21.3 autorevert.el - Added dired buffer support
@ 2004-01-24 20:41 Jari Aalto+mail.emacs
0 siblings, 0 replies; 2+ messages in thread
From: Jari Aalto+mail.emacs @ 2004-01-24 20:41 UTC (permalink / raw)
2004-01-24 Sat Jari Aalto <jari.aalto@poboxes.com>
* autorevert.el
Added support to detect changed dired buffers.
(auto-revert-active-p): New.
(auto-revert-list-diff): New.
(auto-revert-dired-file-list): New.
(auto-revert-dired-changed-p): New.
(auto-revert-handler): New.
(auto-revert-active-p): New.
(auto-revert-buffers): Moved logic to
`auto-revert-handler' and `auto-revert-active-p'
Index: autorevert.el
===================================================================
RCS file: /cygdrive/h/data/version-control/cvsroot/emacs/gnu-emacs/lisp213/autorevert.el,v
retrieving revision 1.1.1.1
diff -u -IId: -b -w -u -r1.1.1.1 autorevert.el
--- autorevert.el 26 Jun 2003 18:06:05 -0000 1.1.1.1
+++ autorevert.el 24 Jan 2004 20:36:08 -0000
@@ -273,6 +273,81 @@
'auto-revert-buffers))
(setq auto-revert-timer nil)))
+(defun auto-revert-active-p ()
+ "Check if auto-revert is active (in current buffer or globally)."
+ (or auto-revert-mode
+ (and
+ global-auto-revert-mode
+ (not global-auto-revert-ignore-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 (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.
+ (or (eq major-mode 'dired-mode)
+ (and (not (buffer-modified-p))
+ (if (buffer-file-name)
+ (and (file-readable-p (buffer-file-name))
+ (not (verify-visited-file-modtime buf)))
+ (and revert-buffer-function
+ (or (and global-auto-revert-mode
+ global-auto-revert-non-file-buffers)
+ auto-revert-mode))))))
+
+(defun auto-revert-handler ()
+ "Revert current buffer."
+ (let (done)
+ (cond
+ ((eq major-mode 'dired-mode)
+ ;; Dired includes revert-buffer-function
+ (when (and revert-buffer-function
+ (auto-revert-dired-changed-p))
+ (setq done t)
+ (revert-buffer t t t)))
+ ((or (buffer-file-name)
+ revert-buffer-function)
+ (setq done t)
+ (revert-buffer t t t)))
+ (if (and done
+ 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.
@@ -325,24 +400,9 @@
(memq buf auto-revert-buffer-list))
(setq auto-revert-buffer-list
(delq buf auto-revert-buffer-list)))
- (when (and
- (or auto-revert-mode
- (and
- global-auto-revert-mode
- (not global-auto-revert-ignore-buffer)
- (not (memq major-mode
- global-auto-revert-ignore-modes))))
- (not (buffer-modified-p))
- (if (buffer-file-name)
- (and (file-readable-p (buffer-file-name))
- (not (verify-visited-file-modtime buf)))
- (and revert-buffer-function
- (or (and global-auto-revert-mode
- global-auto-revert-non-file-buffers)
- auto-revert-mode))))
- (if auto-revert-verbose
- (message "Reverting buffer `%s'." buf))
- (revert-buffer t t t)))
+ (when (and (auto-revert-active-p)
+ (auto-revert-buffer-p))
+ (auto-revert-handler)))
;; Remove dead buffer from `auto-revert-buffer-list'.
(setq auto-revert-buffer-list
(delq buf auto-revert-buffer-list))))
@@ -360,6 +420,7 @@
(unless (assq 'auto-revert-mode minor-mode-alist)
(push '(auto-revert-mode auto-revert-mode-text)
minor-mode-alist))
+
(unless (assq 'global-auto-revert-mode minor-mode-alist)
(push '(global-auto-revert-mode global-auto-revert-mode-text)
minor-mode-alist))
^ permalink raw reply [flat|nested] 2+ messages in thread
* Re: [patch] 21.3 autorevert.el - Added dired buffer support
[not found] <mailman.1283.1074976265.928.bug-gnu-emacs@gnu.org>
@ 2004-01-25 14:47 ` Jari Aalto+mail.emacs
0 siblings, 0 replies; 2+ messages in thread
From: Jari Aalto+mail.emacs @ 2004-01-25 14:47 UTC (permalink / raw)
* Sat 2004-01-24 jari.aalto@poboxes.com (Jari Aalto+mail.emacs) gnu.emacs.bug
* <http://groups.google.com/groups?oi=djq&as_umsgid=%3Cmailman.1283.1074976265.928.bug-gnu-emacs@gnu.org>
Here are some additional fixed to the previous port.
Jari
2004-01-25 Sun Jari Aalto <jari.aalto@poboxes.com>
* autorevert.el
(auto-revert-dired-file-list): added missing variable `file' to `let'.
(top level): Byte compiler fixes.
defvar `dired-directory' added, autoload `dired-get-filename' added.
Index: autorevert.el
===================================================================
RCS file: /cygdrive/h/data/version-control/cvsroot/emacs/gnu-emacs/lisp213/autorevert.el,v
retrieving revision 1.2
retrieving revision 1.4
diff -u -IId: -b -w -u -r1.2 -r1.4
--- autorevert.el 25 Jan 2004 11:59:14 -0000 1.2
+++ autorevert.el 25 Jan 2004 13:08:09 -0000 1.4
@@ -70,7 +70,11 @@
;; Dependencies:
(require 'timer)
-(eval-when-compile (require 'cl))
+(autoload 'dired-get-filename "dired")
+
+(eval-when-compile
+ (defvar dired-directory)
+ (require 'cl))
;; Custom Group:
@@ -296,7 +300,7 @@
(defun auto-revert-dired-file-list ()
"Return list of dired files."
- (let (list)
+ (let (file list)
(save-excursion
(goto-char (point-min))
(while (not (eobp))
@@ -325,7 +329,7 @@
(and (not (buffer-modified-p))
(if (buffer-file-name)
(and (file-readable-p (buffer-file-name))
- (not (verify-visited-file-modtime buf)))
+ (not (verify-visited-file-modtime (current-buffer))))
(and revert-buffer-function
(or (and global-auto-revert-mode
global-auto-revert-non-file-buffers)
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2004-01-25 14:47 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2004-01-24 20:41 [patch] 21.3 autorevert.el - Added dired buffer support Jari Aalto+mail.emacs
[not found] <mailman.1283.1074976265.928.bug-gnu-emacs@gnu.org>
2004-01-25 14:47 ` Jari Aalto+mail.emacs
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/emacs.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).