;;; bs.el --- menu for selecting and displaying buffers
-;; Copyright (C) 1998, 1999 Free Software Foundation, Inc.
+;; Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc.
;; Author: Olaf Sylvester <Olaf.Sylvester@netsurf.de>
;; Maintainer: Olaf Sylvester <Olaf.Sylvester@netsurf.de>
;; Keywords: convenience
;; The package bs combines the advantages of the Emacs functions
;; `list-buffers' and `electric-buffer-list'.
;;
-;; Additioal features for Buffer Selection Menu:
+;; Additional features for Buffer Selection Menu:
;; - configurable list of buffers (show only files etc.).
;; - comfortable way to change displayed subset of all buffers.
;; - show sorted list of buffers.
:link '(url-link "http://home.netsurf.de/olaf.sylvester/emacs")
:group 'convenience)
-(defgroup bs-appearence nil
- "Buffer Selection appearence: Appearence of bs buffer menu."
+(defgroup bs-appearance nil
+ "Buffer Selection appearance: Appearance of bs buffer menu."
:group 'bs)
(defcustom bs-attributes-list
ALIGNMENT : alignment of column: (`left' `right' `middle')
FUN-OR-STRING : Name of a function for calculating the value or
a string for a constant value.
-The function gets as parameter the buffer we have started
+The function gets as parameter the buffer where we have started
buffer selection and the list of all buffers to show. The function must
-return a string representing the columns value."
- :group 'bs-appearence
+return a string representing the column's value."
+ :group 'bs-appearance
:type '(repeat sexp))
(defvar bs--running-in-xemacs (string-match "XEmacs" (emacs-version))
"Non-nil when running under XEmacs.")
-
(defun bs--make-header-match-string ()
"Return a regexp matching the first line of a Buffer Selection Menu buffer."
(let ((res "^\\(")
- (ele bs-attributes-list))
+ (ele bs-attributes-list))
(while ele
(setq res (concat res (car (car ele)) " *"))
(setq ele (cdr ele)))
;;; Font-Lock-Settings
(defvar bs-mode-font-lock-keywords
- (list;; header in font-lock-type-face
+ (list ;; header in font-lock-type-face
(list (bs--make-header-match-string)
'(1 font-lock-type-face append) '(1 'bold append))
;; Buffername embedded by *
(defcustom bs-max-window-height 20
"*Maximal window height of Buffer Selection Menu."
- :group 'bs-appearence
+ :group 'bs-appearance
:type 'integer)
(defvar bs-dont-show-regexp nil
(defvar bs-buffer-sort-function nil
"Sort function to sort the buffers that appear in Buffer Selection Menu.
-The functions gets two arguments - the buffers to compare.")
+The function gets two arguments - the buffers to compare.")
(defcustom bs-maximal-buffer-name-column 45
"*Maximum column width for buffer names.
maximal and minimal length of names of buffers to show. The maximal
width is bounded by `bs-maximal-buffer-name-column'.
See also `bs-minimal-buffer-name-column'."
- :group 'bs-appearence
+ :group 'bs-appearance
:type 'integer)
(defcustom bs-minimal-buffer-name-column 15
maximal and minimal length of names of buffers to show. The minimal
width is bounded by `bs-minimal-buffer-name-column'.
See also `bs-maximal-buffer-name-column'."
- :group 'bs-appearence
+ :group 'bs-appearance
:type 'integer)
(defconst bs-header-lines-length 2
(defcustom bs-configurations
'(("all" nil nil nil nil nil)
("files" nil nil nil bs-visits-non-file bs-sort-buffer-interns-are-last)
- ("files-and-scratch" "^\\*scratch\\*" nil nil bs-visits-non-file
+ ("files-and-scratch" "^\\*scratch\\*$" nil nil bs-visits-non-file
bs-sort-buffer-interns-are-last)
("all-intern-last" nil nil nil nil bs-sort-buffer-interns-are-last))
"*List of all configurations you can use in the Buffer Selection Menu.
A configuration describes which buffers appear in Buffer Selection Menu
-and describes the order of buffers. A configuration is a list with
+and also the order of buffers. A configuration is a list with
six elements. The first element is a string and describes the configuration.
The following five elements represent the values for Buffer Selection Menu
-configurations variables `bs-dont-show-regexp', `bs-dont-show-function',
-`bs-must-show-regexp', `bs-must-show-function' and `bs-buffer-sort-function'.
+configuration variables `bs-must-show-regexp', `bs-must-show-function',
+`bs-dont-show-regexp', `bs-dont-show-function' and `bs-buffer-sort-function'.
By setting these variables you define a configuration."
- :group 'bs-appearence
+ :group 'bs-appearance
:type '(repeat sexp))
(defcustom bs-default-configuration "files"
- "*Name of default configuration used by in the Buffer Selection Menu.
+ "*Name of default configuration used by the Buffer Selection Menu.
\\<bs-mode-map>
Will be changed using key \\[bs-select-next-configuration].
Must be a string used in `bs-configurations' for naming a configuration."
(defvar bs-current-configuration bs-default-configuration
"Name of current configuration.
-Must be a string found in `bs-configurations' for naming a configuration.")
+Must be a string used in `bs-configurations' for naming a configuration.")
(defcustom bs-cycle-configuration-name nil
"*Name of configuration used when cycling through the buffer list.
(defcustom bs-string-show-always "+"
"*String added in column 1 indicating a buffer will always be shown."
- :group 'bs-appearence
+ :group 'bs-appearance
:type 'string)
(defcustom bs-string-show-never "-"
"*String added in column 1 indicating a buffer will never be shown."
- :group 'bs-appearence
+ :group 'bs-appearance
:type 'string)
(defcustom bs-string-current "."
"*String added in column 1 indicating the current buffer."
- :group 'bs-appearence
+ :group 'bs-appearance
:type 'string)
(defcustom bs-string-current-marked "#"
"*String added in column 1 indicating the current buffer when it is marked."
- :group 'bs-appearence
+ :group 'bs-appearance
:type 'string)
(defcustom bs-string-marked ">"
"*String added in column 1 indicating a marked buffer."
- :group 'bs-appearence
+ :group 'bs-appearance
:type 'string)
(defcustom bs-string-show-normally " "
"*String added in column 1 indicating a unmarked buffer."
- :group 'bs-appearence
+ :group 'bs-appearance
:type 'string)
(defvar bs--name-entry-length 20
Used internally, only.")
;; ----------------------------------------------------------------------
-;; Intern globals
+;; Internal globals
;; ----------------------------------------------------------------------
(defvar bs-buffer-show-mark nil
"Flag for the current mode for showing this buffer.
-A value of nil means buffer will be shown depending on the current on
-current configuration.
+A value of nil means buffer will be shown depending on the current
+configuration.
A value of `never' means to never show the buffer.
A value of `always' means to show buffer regardless of the configuration.")
(make-face 'region)
(set-face-background 'region "gray75"))
-
(defun bs--sort-by-name (b1 b2)
"Compare buffers B1 and B2 by buffer name."
(string< (buffer-name b1)
(defun bs-buffer-list (&optional list sort-description)
"Return a list of buffers to be shown.
-LIST is a list of buffers to test for appearence in Buffer Selection Menu.
+LIST is a list of buffers to test for appearance in Buffer Selection Menu.
The result list depends on the global variables `bs-dont-show-regexp',
`bs-must-show-regexp', `bs-dont-show-function', `bs-must-show-function'
and `bs-buffer-sort-function'.
\\[bs-select-next-configuration] -- select and apply next \
available Buffer Selection Menu configuration.
\\[bs-kill] -- leave Buffer Selection Menu without a selection.
-\\[bs-toggle-current-to-show] -- toggle status of appearence .
+\\[bs-toggle-current-to-show] -- toggle status of appearance.
\\[bs-set-current-buffer-to-show-always] -- mark current line's buffer \
to show always.
-\\[bs-visit-tags-table] -- call `visit-tags-table' on current line'w buffer.
+\\[bs-visit-tags-table] -- call `visit-tags-table' on current line's buffer.
\\[bs-help] -- display this help text."
(interactive)
(kill-all-local-variables)
(defun bs--current-buffer ()
"Return buffer on current line.
-Raise an error if not an a buffer line."
+Raise an error if not on a buffer line."
(beginning-of-line)
(let ((line (+ (- bs-header-lines-length)
(count-lines 1 (point)))))
(defun bs-toggle-readonly ()
"Toggle read-only status for buffer on current line.
-Uses Function `vc-toggle-read-only'."
+Uses function `vc-toggle-read-only'."
(interactive)
(let ((buffer (bs--current-buffer)))
(save-excursion
(not (buffer-file-name buffer)))
(defun bs-sort-buffer-interns-are-last (b1 b2)
- "Function for sorting intern buffers B1 and B2 at the end of all buffers."
+ "Function for sorting internal buffers B1 and B2 at the end of all buffers."
(string-match "^\\*" (buffer-name b2)))
;; ----------------------------------------------------------------------
(defun bs-config--only-files ()
"Define a configuration for showing only buffers visiting a file."
(bs-config-clear)
- (setq;; I want to see *-buffers at the end
+ (setq ;; I want to see *-buffers at the end
bs-buffer-sort-function 'bs-sort-buffer-interns-are-last
;; Don't show files who don't belong to a file
bs-dont-show-function 'bs-visits-non-file))
(defun bs-config--files-and-scratch ()
"Define a configuration for showing buffer *scratch* and file buffers."
(bs-config-clear)
- (setq;; I want to see *-buffers at the end
+ (setq ;; I want to see *-buffers at the end
bs-buffer-sort-function 'bs-sort-buffer-interns-are-last
;; Don't show files who don't belong to a file
bs-dont-show-function 'bs-visits-non-file
;; Show *scratch* buffer.
- bs-must-show-regexp "^\\*scratch\\*"))
+ bs-must-show-regexp "^\\*scratch\\*$"))
(defun bs-config--all ()
"Define a configuration for showing all buffers.
(defun bs-config--all-intern-last ()
"Define a configuration for showing all buffers.
-Intern buffers appear at end of all buffers."
+Internal buffers appear at end of all buffers."
(bs-config-clear)
;; I want to see *-buffers at the end
(setq bs-buffer-sort-function 'bs-sort-buffer-interns-are-last))
(setq bs-default-configuration bs-current-configuration)
(bs--redisplay t)
(bs--set-window-height)
- (bs-message-without-log "Selected config: %s" (car config))))
+ (bs-message-without-log "Selected configuration: %s" (car config))))
(defun bs-show-in-buffer (list)
"Display buffer list LIST in buffer *buffer-selection*.
(apply 'message args)))
(defvar bs--cycle-list nil
- "Currentyl buffer list used for cycling.")
+ "Current buffer list used for cycling.")
;;;###autoload
(defun bs-cycle-next ()
The result string is one of `bs-string-current', `bs-string-current-marked',
`bs-string-marked', `bs-string-show-normally', `bs-string-show-never', or
`bs-string-show-always'."
- (cond;; current buffer is the buffer we started buffer selection.
+ (cond ;; current buffer is the buffer we started buffer selection.
((eq (current-buffer) start-buffer)
(if (memq (current-buffer) bs--marked-buffers)
bs-string-current-marked ; buffer is marked
(make-string (- bs--name-entry-length (length name)) ? ))
name)))
-
(defun bs--get-mode-name (start-buffer all-buffers)
"Return the name of mode of current buffer for Buffer Selection Menu.
START-BUFFER is the buffer where we started buffer selection.
(put-text-property 0 (length string) 'mouse-face 'highlight string)
string))
-
(defun bs--insert-one-entry (buffer)
"Generate one entry for buffer BUFFER in Buffer Selection Menu.
It goes over all columns described in `bs-attributes-list'
"")))
(defun bs--show-with-configuration (name &optional arg)
- "Display buffer list of configuration with NAME name.
+ "Display buffer list of configuration with name NAME.
Set configuration NAME and determine window for Buffer Selection Menu.
Unless current buffer is buffer *buffer-selection* we have to save
the buffer we started Buffer Selection Menu and the current window
If PREFIX-ARG is nil return `bs-default-configuration'.
If PREFIX-ARG is an integer return PREFIX-ARG element of `bs-configurations'.
Otherwise return `bs-alternative-configuration'."
- (cond;; usually activation
+ (cond ;; usually activation
((null prefix-arg)
bs-default-configuration)
;; call with integer as prefix argument