[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: autorevert.el
From: |
Luc Teirlinck |
Subject: |
Re: autorevert.el |
Date: |
Sat, 20 Mar 2004 22:19:11 -0600 (CST) |
Below is my patch to make the Buffer Menu autorevert.
Without an auto-revert-flag type variable to tell functions that they
are called by auto-revert, making the Buffer Menu auto-revertable,
without intolerable side effects, requires two changes that affect
non auto-revert users. But I believe that these changes are positive
anyway and one can even be considered to be a bug fix.
The most important change is the following. If you currently update a
Buffer Menu that lists only file visiting buffers, the updated version
lists the usual Buffer Menu including non-file buffers. I believe
this is a bug regardless of any auto-revert stuff. Updating and
toggling file-buffers-only status are unrelated decisions. The patch
below would make the `g' command keep the file-buffers-only status
unchanged and would add a new binding `T' that explicitly toggles the
file-buffers-only status.
The second change is that `g' would keep point at the same position
(integer value: markers are useless, because `g' erases the original
contents). This is necessary for auto-revert, because otherwise
point keeps jumping to the beginning of the buffer, which is
intolerable if the buffer-menu is selected and one is working in it.
But I believe that even without auto-revert being enabled, one often
just types `g' to make sure the Buffer Menu is up to date. If it is
up to date, one does not want point to move.
Note that with my patch, auto-reverting will still make point move if
the Buffer Menu is shown in a non-selected window. But in that case,
the Buffer Menu will _really_ change if one switches to it, so that
the old value of point would be meaningless anyway.
My code unconditionally auto-reverts the Buffer Menu (if there is one)
every auto-revert-interval seconds. However, I did not notice any
measurable CPU usage with auto-revert-interval set to its default
value of 5 seconds.
===File ~/buff-menu-diff====================================
*** buff-menu.el.~1.63.~ Tue Sep 2 07:30:05 2003
--- buff-menu.el Sat Mar 20 19:37:33 2004
***************
*** 99,104 ****
--- 99,114 ----
(defvar Buffer-menu-mode-map nil
"Local keymap for `Buffer-menu-mode' buffers.")
+ (defvar Buffer-menu-files-only nil
+ "Non-nil if the current buffer-menu lists only file buffers.
+ This variable determines whether reverting the buffer lists only
+ file buffers. It affects both manual reverting and reverting by
+ Auto Revert Mode.")
+
+ (make-variable-buffer-local 'Buffer-menu-files-only)
+
+ (defvar buffer-stale-function)
+
(if Buffer-menu-mode-map
()
(setq Buffer-menu-mode-map (make-keymap))
***************
*** 131,136 ****
--- 141,147 ----
(define-key Buffer-menu-mode-map "b" 'Buffer-menu-bury)
(define-key Buffer-menu-mode-map "g" 'Buffer-menu-revert)
(define-key Buffer-menu-mode-map "V" 'Buffer-menu-view)
+ (define-key Buffer-menu-mode-map "T" 'Buffer-menu-toggle-files-only)
(define-key Buffer-menu-mode-map [mouse-2] 'Buffer-menu-mouse-select)
)
***************
*** 167,179 ****
\\[Buffer-menu-backup-unmark] -- back up a line and remove marks.
\\[Buffer-menu-toggle-read-only] -- toggle read-only status of buffer on this
line.
\\[Buffer-menu-revert] -- update the list of buffers.
\\[Buffer-menu-bury] -- bury the buffer listed on this line."
(kill-all-local-variables)
(use-local-map Buffer-menu-mode-map)
(setq major-mode 'Buffer-menu-mode)
(setq mode-name "Buffer Menu")
! (make-local-variable 'revert-buffer-function)
! (setq revert-buffer-function 'Buffer-menu-revert-function)
(setq truncate-lines t)
(setq buffer-read-only t)
(run-hooks 'buffer-menu-mode-hook))
--- 178,193 ----
\\[Buffer-menu-backup-unmark] -- back up a line and remove marks.
\\[Buffer-menu-toggle-read-only] -- toggle read-only status of buffer on this
line.
\\[Buffer-menu-revert] -- update the list of buffers.
+ \\[Buffer-menu-toggle-files-only] -- toggle whether the menu diplays only
file buffers.
\\[Buffer-menu-bury] -- bury the buffer listed on this line."
(kill-all-local-variables)
(use-local-map Buffer-menu-mode-map)
(setq major-mode 'Buffer-menu-mode)
(setq mode-name "Buffer Menu")
! (set (make-local-variable 'revert-buffer-function)
! 'Buffer-menu-revert-function)
! (set (make-local-variable 'buffer-stale-function)
! #'(lambda (&optional noconfirm) t))
(setq truncate-lines t)
(setq buffer-read-only t)
(run-hooks 'buffer-menu-mode-hook))
***************
*** 184,190 ****
(revert-buffer))
(defun Buffer-menu-revert-function (ignore1 ignore2)
! (list-buffers))
(defun Buffer-menu-buffer (error-if-non-existent-p)
"Return buffer described by this line of buffer menu."
--- 198,218 ----
(revert-buffer))
(defun Buffer-menu-revert-function (ignore1 ignore2)
! ;; We can not use save-excursion here. The buffer gets erased.
! (let ((old-point (point)))
! (list-buffers-noselect Buffer-menu-files-only)
! (goto-char old-point)))
!
! (defun Buffer-menu-toggle-files-only (arg)
! "Toggle whether the current buffer-menu diplays only file buffers.
! With a positive ARF diplay only file buffers. With zero or
! negative ARG, display other buffers as well."
! (interactive "P")
! (setq Buffer-menu-files-only
! (cond ((not arg) (not Buffer-menu-files-only))
! ((> (prefix-numeric-value arg) 0) t)))
! (revert-buffer))
!
(defun Buffer-menu-buffer (error-if-non-existent-p)
"Return buffer described by this line of buffer menu."
***************
*** 662,667 ****
--- 690,697 ----
;; current buffer is not displayed for some reason.
(and desired-point
(goto-char desired-point))
+ (setq Buffer-menu-files-only files-only)
+ (set-buffer-modified-p nil)
(current-buffer))))
;;; arch-tag: e7dfcfc9-6cb2-46e4-bf55-8ef1936d83c6
============================================================
- Re: autorevert.el, (continued)
- Re: autorevert.el, Stefan Monnier, 2004/03/14
- Re: autorevert.el, Eli Zaretskii, 2004/03/15
- Re: autorevert.el, Luc Teirlinck, 2004/03/15
- Re: autorevert.el, Eli Zaretskii, 2004/03/17
- Re: autorevert.el, Luc Teirlinck, 2004/03/18
- Re: autorevert.el, Stefan Monnier, 2004/03/19
- Re: autorevert.el, Luc Teirlinck, 2004/03/20
- Re: autorevert.el, Stefan Monnier, 2004/03/23
- Re: autorevert.el, Luc Teirlinck, 2004/03/23
- Re: autorevert.el, Luc Teirlinck, 2004/03/23
- Re: autorevert.el,
Luc Teirlinck <=
- Re: autorevert.el, Kim F. Storm, 2004/03/19
- Re: autorevert.el, Eli Zaretskii, 2004/03/19
- Re: autorevert.el, Luc Teirlinck, 2004/03/20
- Re: autorevert.el, Eli Zaretskii, 2004/03/21
- Re: autorevert.el, Luc Teirlinck, 2004/03/21
- Re: autorevert.el, Eli Zaretskii, 2004/03/22
- Re: autorevert.el, Luc Teirlinck, 2004/03/22
- Re: autorevert.el, Eli Zaretskii, 2004/03/23
- Re: autorevert.el, Stefan Monnier, 2004/03/23
- Re: autorevert.el, Luc Teirlinck, 2004/03/23