;;; iswitchb.el --- switch between buffers using substrings
;; Copyright (C) 1996, 1997, 2000, 2001, 2002, 2003, 2004,
-;; 2005, 2006, 2007 Free Software Foundation, Inc.
+;; 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
;; Author: Stephen Eglen <stephen@gnu.org>
;; Maintainer: Stephen Eglen <stephen@gnu.org>
;; GNU Emacs is free software; you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation; either version 2, or (at your option)
+;; the Free Software Foundation; either version 3, or (at your option)
;; any later version.
;; GNU Emacs is distributed in the hope that it will be useful,
;;; Code:
-;; CL needed for cadr and last
-(if (not (and (fboundp 'cadr)
- (fboundp 'last)))
- (require 'cl))
-
(require 'font-lock)
-;; Set up the custom library.
-;; taken from http://www.dina.kvl.dk/~abraham/custom/
-(eval-and-compile
- (condition-case ()
- (require 'custom)
- (error nil))
- (if (and (featurep 'custom) (fboundp 'custom-declare-variable))
- nil ;; We've got what we needed
- ;; We have the old custom-library, hack around it!
- (defmacro defgroup (&rest args)
- nil)
- (defmacro defcustom (var value doc &rest args)
- `(defvar ,var ,value ,doc))))
-
;;; User Variables
;;
;; These are some things you might want to change.
"*List of regexps or functions matching buffer names to ignore.
For example, traditional behavior is not to list buffers whose names begin
with a space, for which the regexp is `^ '. See the source file for
-example functions that filter buffernames."
+example functions that filter buffer names."
:type '(repeat (choice regexp function))
:group 'iswitchb)
(put 'iswitchb-buffer-ignore 'risky-local-variable t)
:type 'hook
:group 'iswitchb)
-;;; Examples for setting the value of iswitchb-buffer-ignore
-;(defun iswitchb-ignore-c-mode (name)
-; "Ignore all c mode buffers -- example function for iswitchb."
-; (save-excursion
-; (set-buffer name)
-; (string-match "^C$" mode-name)))
+;; Examples for setting the value of iswitchb-buffer-ignore
+;;(defun iswitchb-ignore-c-mode (name)
+;; "Ignore all c mode buffers -- example function for iswitchb."
+;; (with-current-buffer name
+;; (derived-mode-p 'c-mode)))
-;(setq iswitchb-buffer-ignore '("^ " iswitchb-ignore-c-mode))
-;(setq iswitchb-buffer-ignore '("^ " "\\.c$" "\\.h$"))
+;;(setq iswitchb-buffer-ignore '("^ " iswitchb-ignore-c-mode))
+;;(setq iswitchb-buffer-ignore '("^ " "\\.c\\'" "\\.h\\'"))
(defcustom iswitchb-default-method 'always-frame
"*How to switch to new buffer when using `iswitchb-buffer'.
:group 'iswitchb)
(defcustom iswitchb-use-faces t
- "*Non-nil means use font-lock fonts for showing first match."
+ "*Non-nil means use font-lock faces for showing first match."
:type 'boolean
:group 'iswitchb)
(define-obsolete-variable-alias 'iswitchb-use-fonts 'iswitchb-use-faces "22.1")
(defcustom iswitchb-minibuffer-setup-hook nil
"Iswitchb-specific customization of minibuffer setup.
-This hook is run during minibuffer setup iff `iswitchb' will be active.
+This hook is run during minibuffer setup if `iswitchb' is active.
For instance:
\(add-hook 'iswitchb-minibuffer-setup-hook
'\(lambda () (set (make-local-variable 'max-mini-window-height) 3)))
;;; ISWITCHB KEYMAP
(defun iswitchb-define-mode-map ()
- "Set up the keymap for `iswitchb-buffer'.
-This is obsolete. Use \\[iswitchb-mode] or customize the
-variable `iswitchb-mode'."
+ "Set up the keymap for `iswitchb-buffer'."
(interactive)
(let (map)
;; generated every time so that it can inherit new functions.
(setq iswitchb-mode-map map)
(run-hooks 'iswitchb-define-mode-map-hook)))
+(make-obsolete 'iswitchb-define-mode-map
+ "use M-x iswitchb-mode or customize the variable `iswitchb-mode'."
+ "21.1")
+
;;; MAIN FUNCTION
(defun iswitchb ()
"Switch to buffer matching a substring.
PROMPT is the prompt to give to the user.
DEFAULT if given is the default buffer to be selected, which will
go to the front of the list.
-If REQUIRE-MATCH is non-nil, an existing-buffer must be selected.
+If REQUIRE-MATCH is non-nil, an existing buffer must be selected.
If START is a string, the selection process is started with that
string.
If MATCHES-SET is non-nil, the buflist is not updated before
"Find common completion of `iswitchb-text' in `iswitchb-matches'.
The result is stored in `iswitchb-common-match-string'."
- (let* (val)
+ (let (val)
(setq iswitchb-common-match-string nil)
(if (and iswitchb-matches
(not iswitchb-regexp) ;; testing
(setq iswitchb-exit 'findfile)
(exit-minibuffer))
-(eval-when-compile
- (defvar recentf-list))
+(defvar recentf-list)
(defun iswitchb-next-match ()
"Put first element of `iswitchb-matches' at the end of the list."
"Set `iswitchb-matches' to the list of buffers matching prompt."
(if iswitchb-rescan
(setq iswitchb-matches
- (let* ((buflist iswitchb-buflist))
+ (let ((buflist iswitchb-buflist))
(iswitchb-get-matched-buffers iswitchb-text iswitchb-regexp
buflist))
iswitchb-virtual-buffers nil)))
"Return buffers matching REGEXP.
If STRING-FORMAT is nil, consider REGEXP as just a string.
BUFFER-LIST can be list of buffers or list of strings."
- (let* ((case-fold-search (iswitchb-case))
+ (let ((case-fold-search (iswitchb-case))
name ret)
(if (null string-format) (setq regexp (regexp-quote regexp)))
(setq iswitchb-invalid-regexp nil)
;;; VISIT CHOSEN BUFFER
(defun iswitchb-visit-buffer (buffer)
"Visit buffer named BUFFER according to `iswitchb-method'."
- (let* (win newframe)
+ (let (win newframe)
(cond
((eq iswitchb-method 'samewindow)
(switch-to-buffer buffer))
(defun iswitchb-default-keybindings ()
"Set up default keybindings for `iswitchb-buffer'.
Call this function to override the normal bindings. This function also
-adds a hook to the minibuffer.
-
-Obsolescent. Use `iswitchb-mode'."
+adds a hook to the minibuffer."
(interactive)
(add-hook 'minibuffer-setup-hook 'iswitchb-minibuffer-setup)
(global-set-key "\C-xb" 'iswitchb-buffer)
(global-set-key "\C-x4\C-o" 'iswitchb-display-buffer)
(global-set-key "\C-x5b" 'iswitchb-buffer-other-frame))
+(make-obsolete 'iswitchb-default-keybindings 'iswitchb-mode "21.1")
+
(defun iswitchb-buffer ()
"Switch to another buffer.
(insert (iswitchb-completions
contents))))))
-(eval-when-compile
- (defvar most-len)
- (defvar most-is-exact))
+(defvar most-len)
+(defvar most-is-exact)
(defun iswitchb-output-completion (com)
(if (= (length com) most-len)
(iswitchb-to-end summaries)))
(defun iswitchb-case ()
- "Return non-nil iff we should ignore case when matching.
+ "Return non-nil if we should ignore case when matching.
See the variable `iswitchb-case' for details."
(if iswitchb-case
(if (featurep 'xemacs)
;;;###autoload
(define-minor-mode iswitchb-mode
"Toggle Iswitchb global minor mode.
-With arg, turn Iswitchb mode on if and only iff ARG is positive.
+With arg, turn Iswitchb mode on if ARG is positive, otherwise turn it off.
This mode enables switching between buffers using substrings. See
`iswitchb' for details."
nil nil iswitchb-global-map :global t :group 'iswitchb