emacs-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Suggestion for autorevert.el


From: Luc Teirlinck
Subject: Re: Suggestion for autorevert.el
Date: Fri, 2 Apr 2004 17:46:52 -0600 (CST)

>From my previous message:

   The added code, which calls the non-primitive and non-optimized
   `get-buffer-window-list'

I do not know what I was worrying about, because `get-buffer-window-list'
does by no means appear to be as slow as I assumed (I mistakenly
deduced that from comments in the source code saying that it really
should be a primitive).  Apparently one would need several thousands
of constantly reverting buffers for these calls to add up to something
and in such a situation, there would presumably be other things to
worry about.

Anyway, the following patch would appear to be better than the one I
submitted yesterday (there is no difference in behavior, it just
appears to be somewhat more efficient):

===File ~/autorevert-newdiff================================
*** autorevert.el       31 Mar 2004 10:03:44 -0600      1.28
--- autorevert.el       02 Apr 2004 17:15:25 -0600      
***************
*** 44,49 ****
--- 44,60 ----
  ;; seconds.  The check is aborted whenever the user actually uses
  ;; Emacs.  You should never even notice that this package is active
  ;; (except that your buffers will be reverted, of course).
+ ;;
+ ;; After reverting a file buffer, Auto Revert Mode normally puts point
+ ;; at the same position that a regular manual revert would.  However,
+ ;; there is one exception to this rule.  If point is at the end of the
+ ;; buffer before reverting, it stays at the end.  Similarly if point
+ ;; is displayed at the end of a file buffer in any window, it will stay
+ ;; at the end of the buffer in that window, even if the window is not
+ ;; selected.  This way, you can use Auto Revert Mode to `tail' a file.
+ ;; Just put point at the end of the buffer and it will stay there.
+ ;; These rules apply to file buffers. For non-file buffers, the
+ ;; behavior may be mode dependent.
  
  ;; Usage:
  ;;
***************
*** 298,307 ****
    "Revert current buffer, if appropriate.
  This is an internal function used by Auto-Revert Mode."
    (unless (buffer-modified-p)
!     (let (revert)
!       (or (and (buffer-file-name)
!              (file-readable-p (buffer-file-name))
!              (not (verify-visited-file-modtime (current-buffer)))
               (setq revert t))
          (and (or auto-revert-mode global-auto-revert-non-file-buffers)
               revert-buffer-function
--- 309,318 ----
    "Revert current buffer, if appropriate.
  This is an internal function used by Auto-Revert Mode."
    (unless (buffer-modified-p)
!     (let ((buffer (current-buffer)) revert eob eoblist)
!       (or (and buffer-file-name
!              (file-readable-p buffer-file-name)
!              (not (verify-visited-file-modtime buffer))
               (setq revert t))
          (and (or auto-revert-mode global-auto-revert-non-file-buffers)
               revert-buffer-function
***************
*** 312,318 ****
        (when (and auto-revert-verbose
                   (not (eq revert 'fast)))
          (message "Reverting buffer `%s'." (buffer-name)))
!       (revert-buffer 'ignore-auto 'dont-ask 'preserve-modes))
        ;; `preserve-modes' avoids changing the (minor) modes.  But we
        ;; do want to reset the mode for VC, so we do it manually.
        (when (or revert auto-revert-check-vc-info)
--- 323,341 ----
        (when (and auto-revert-verbose
                   (not (eq revert 'fast)))
          (message "Reverting buffer `%s'." (buffer-name)))
!       (when buffer-file-name
!         (setq eob (eobp))
!         (walk-windows
!          #'(lambda (window)
!              (and (eq (window-buffer window) buffer)
!                   (= (window-point window) (point-max))
!                   (push window eoblist)))
!          'no-mini t))
!       (revert-buffer 'ignore-auto 'dont-ask 'preserve-modes)
!       (when buffer-file-name
!         (when eob (goto-char (point-max)))
!         (dolist (window eoblist)
!           (set-window-point window (point-max)))))
        ;; `preserve-modes' avoids changing the (minor) modes.  But we
        ;; do want to reset the mode for VC, so we do it manually.
        (when (or revert auto-revert-check-vc-info)
============================================================




reply via email to

[Prev in Thread] Current Thread [Next in Thread]