;; Copyright (C) 1985, 1986, 1994 Free Software Foundation, Inc.
;; Author: Richard Mlynarik <mly@ai.mit.edu>
+;; Maintainer: FSF
+;; Keywords: convenience
;; This file is part of GNU Emacs.
;; GNU General Public License for more details.
;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs; see the file COPYING. If not, write to
-;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
+;; along with GNU Emacs; see the file COPYING. If not, write to the
+;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
;;; Commentary:
(interactive "P")
(let (select buffer)
(save-window-excursion
- (save-window-excursion (list-buffers arg))
- (setq buffer (window-buffer (Electric-pop-up-window "*Buffer List*")))
+ (setq buffer (list-buffers-noselect arg))
+ (Electric-pop-up-window buffer)
(unwind-protect
(progn
(set-buffer buffer)
(Electric-buffer-menu-mode)
+ (electric-buffer-update-highlight)
(setq select
(catch 'electric-buffer-menu-select
(message "<<< Press Return to bury the buffer list >>>")
?\ )
(progn (setq unread-command-events nil)
(throw 'electric-buffer-menu-select nil)))
- (let ((first (progn (goto-char (point-min))
+ (let ((start-point (point))
+ (first (progn (goto-char (point-min))
(forward-line 2)
(point)))
(last (progn (goto-char (point-max))
(forward-line -1)
(point)))
(goal-column 0))
- (goto-char first)
+ ;; Use start-point if it is meaningful.
+ (goto-char (if (or (< start-point first)
+ (> start-point last))
+ first
+ start-point))
(Electric-command-loop 'electric-buffer-menu-select
nil
t
(goto-char (point-max))
(forward-line -1)
(if (pos-visible-in-window-p (point-max))
- (recenter -1)))))
+ (recenter -1))))
+ (electric-buffer-update-highlight))
(put 'Electric-buffer-menu-mode 'mode-class 'special)
(defun Electric-buffer-menu-mode ()
(put 'Electric-buffer-menu-undefined 'suppress-keymap t)
(if electric-buffer-menu-mode-map
nil
- (let ((map (make-keymap)) (submap (make-keymap)))
+ (let ((map (make-keymap)))
(fillarray (car (cdr map)) 'Electric-buffer-menu-undefined)
- (define-key map "\e" submap)
- (fillarray (car (cdr submap)) 'Electric-buffer-menu-undefined)
+ (define-key map "\e" nil)
(define-key map "\C-z" 'suspend-emacs)
(define-key map "v" 'Electric-buffer-menu-mode-view-buffer)
(define-key map (char-to-string help-char) 'Helper-help)
(defun Electric-buffer-menu-undefined ()
(interactive)
(ding)
- (message (if (and (eq (key-binding "\C-c\C-c") 'Electric-buffer-menu-quit)
+ (message "%s"
+ (if (and (eq (key-binding "\C-c\C-c") 'Electric-buffer-menu-quit)
(eq (key-binding " ") 'Electric-buffer-menu-select)
(eq (key-binding (char-to-string help-char)) 'Helper-help)
(eq (key-binding "?") 'Helper-describe-bindings))
(message "Buffer %s does not exist!" bufnam)
(sit-for 4))))
+(defvar electric-buffer-overlay nil)
+(defun electric-buffer-update-highlight ()
+ ;; Make sure we have an overlay to use.
+ (or electric-buffer-overlay
+ (progn
+ (make-local-variable 'electric-buffer-overlay)
+ (setq electric-buffer-overlay (make-overlay (point) (point)))))
+ (move-overlay electric-buffer-overlay
+ (save-excursion (beginning-of-line) (point))
+ (save-excursion (end-of-line) (point)))
+ (overlay-put electric-buffer-overlay 'face 'highlight))
+
+(provide 'ebuff-menu)
+
;;; ebuff-menu.el ends here