Commit 19db4308 authored by Dave Love's avatar Dave Love

Some doc fixes.

(iswitchb-mode-map): Define completely initially.  Inherit
minibuffer-local-map.
(iswitchb-completion-help) <!iswitchb-xemacs>: Use
fundamental-mode.
(iswitchb-global-map): New variable.
(iswitchb-summaries-to-end): Amalgamate regexps.
(iswitchb-mode): New.
(iswitchb-mode-hook): New variable.
(iswitchb) <defgroup>: Add URL link.  Use group `completion', not
`extensions'.
parent 281096ed
;;; iswitchb.el --- switch between buffers using substrings
;; Copyright (C) 1996, 1997 Free Software Foundation, Inc.
;; Copyright (C) 1996, 1997, 2000 Free Software Foundation, Inc.
;; Author: Stephen Eglen <stephen@anc.ed.ac.uk>
;; Maintainer: Stephen Eglen <stephen@anc.ed.ac.uk>
;; Keywords: extensions convenience
;; Keywords: completion convenience
;; location: http://www.anc.ed.ac.uk/~stephen/emacs/
;; This file is part of GNU Emacs.
......@@ -27,20 +27,16 @@
;;; Commentary:
;; Installation:
;; To get the functions in this package bound to keys, do
;; (iswitchb-default-keybindings)
;;
;; If you want to use the features of iswitchb, but without rebinding
;; the keys as above, then you need to add the following hook:
;; (add-hook 'minibuffer-setup-hook 'iswitchb-minibuffer-setup)
;; To get the functions in this package bound to keys, use
;; M-x iswitchb-mode or customize the option `iswitchb-mode'.
;; As you type in a substring, the list of buffers currently matching
;; the substring are displayed as you type. The list is ordered so
;; the substring is displayed as you type. The list is ordered so
;; that the most recent buffers visited come at the start of the list.
;; The buffer at the start of the list will be the one visited when
;; you press return. By typing more of the substring, the list is
;; narrowed down so that gradually the buffer you want will be at the
;; top of the list. Alternatively, you can use C-s an C-r to rotate
;; top of the list. Alternatively, you can use C-s and C-r to rotate
;; buffer names in the list until the one you want is at the top of
;; the list. Completion is also available so that you can see what is
;; common to all of the matching buffers as you type.
......@@ -233,13 +229,29 @@
(defgroup iswitchb nil
"Switch between buffers using substrings."
:group 'extensions
:group 'convenience
;; These links are to be added in later versions of custom and
;; so are currently commented out.
:group 'completion
:link '(emacs-commentary-link :tag "Commentary" "iswitchb.el")
:link '(url-link "http://www.anc.ed.ac.uk/~stephen/emacs/")
:link '(emacs-library-link :tag "Lisp File" "iswitchb.el"))
;;;###autoload
(defcustom iswitchb-mode nil
"Toggle Iswitchb mode.
Setting this variable directly does not take effect;
use either \\[customize] or the function `iswitchb-mode'."
:set (lambda (symbol value)
(iswitchb-mode (or value 0)))
:initialize 'custom-initialize-default
:group 'iswitchb
:version "21.1"
:type 'boolean)
(defcustom iswitchb-mode-hook nil
"Hook run at the end of function `iswitchb-mode'."
:group 'iswitchb
:type 'hook)
(defcustom iswitchb-case case-fold-search
"*Non-nil if searching of buffer names should ignore case.
If this is non-nil but the user input has any upper case letters, matching
......@@ -305,7 +317,7 @@ See also `iswitchb-newbuffer'."
:group 'iswitchb)
(defcustom iswitchb-define-mode-map-hook nil
"*Hook to define keys in `iswitchb-mode-map' for extra keybindings."
"Hook to define keys in `iswitchb-mode-map' for extra keybindings."
:type 'hook
:group 'iswitchb)
......@@ -320,7 +332,7 @@ See also `iswitchb-newbuffer'."
:group 'iswitchb)
(defcustom iswitchb-make-buflist-hook nil
"*Hook to run when list of matching buffers is created."
"Hook to run when list of matching buffers is created."
:type 'hook
:group 'iswitchb)
......@@ -329,20 +341,21 @@ See also `iswitchb-newbuffer'."
See documentation of `walk-windows' for useful values.")
(defcustom iswitchb-minibuffer-setup-hook nil
"*Iswitchb-specific customization of minibuffer setup.
"Iswitchb-specific customization of minibuffer setup.
This hook is run during minibuffer setup iff `iswitchb' will be active.
It is intended for use in customizing iswitchb for interoperation
with other packages. For instance:
with other packages."
;;; For instance:
\(add-hook 'iswitchb-minibuffer-setup-hook
\(function
\(lambda ()
\(make-local-variable 'resize-minibuffer-window-max-height)
\(setq resize-minibuffer-window-max-height 3))))
;;; \(add-hook 'iswitchb-minibuffer-setup-hook
;;; \(function
;;; \(lambda ()
;;; \(make-local-variable 'resize-minibuffer-window-max-height)
;;; \(setq resize-minibuffer-window-max-height 3))))
will constrain rsz-mini to a maximum minibuffer height of 3 lines when
iswitchb is running. Copied from `icomplete-minibuffer-setup-hook'."
;;; will constrain rsz-mini to a maximum minibuffer height of 3 lines when
;;; iswitchb is running. Copied from `icomplete-minibuffer-setup-hook'."
:type 'hook
:group 'iswitchb)
......@@ -389,8 +402,34 @@ interfere with other minibuffer usage.")
(defvar iswitchb-matches nil
"List of buffers currently matching `iswitchb-text'.")
(defvar iswitchb-mode-map nil
"Keymap for `iswitchb-buffer'.")
(defvar iswitchb-mode-map
(let ((map (make-sparse-keymap)))
(set-keymap-parent map minibuffer-local-map)
(define-key map "?" 'iswitchb-completion-help)
(define-key map "\C-s" 'iswitchb-next-match)
(define-key map "\C-r" 'iswitchb-prev-match)
(define-key map "\t" 'iswitchb-complete)
(define-key map "\C-j" 'iswitchb-select-buffer-text)
(define-key map "\C-t" 'iswitchb-toggle-regexp)
(define-key map "\C-x\C-f" 'iswitchb-find-file)
(define-key map "\C-c" 'iswitchb-toggle-case)
(define-key map "\C-k" 'iswitchb-kill-buffer)
(define-key map "\C-m" 'iswitchb-exit-minibuffer)
map)
"Minibuffer keymap for `iswitchb-buffer'.")
(defvar iswitchb-global-map
(let ((map (make-sparse-keymap)))
(substitute-key-definition 'switch-to-buffer ; normally C-x b
'iswitchb-buffer map global-map)
(substitute-key-definition 'switch-to-buffer-other-window ; C-x 4 b
'iswitchb-buffer-other-window map global-map)
(substitute-key-definition 'switch-to-buffer-other-frame ; C-x 5 b
'iswitchb-buffer-other-frame map global-map)
(substitute-key-definition 'display-buffer ; C-x 4 C-o
'iswitchb-display-buffer map global-map)
map)
"Global keymap for `iswtichb-mode'.")
(defvar iswitchb-history nil
"History of buffers selected using `iswitchb-buffer'.")
......@@ -423,7 +462,9 @@ selected.")
;;; ISWITCHB KEYMAP
(defun iswitchb-define-mode-map ()
"Set up the keymap for `iswitchb-buffer'."
"Set up the keymap for `iswitchb-buffer'.
This is obsolete. Use \\[iswitchb-mode] or customize the
variable `iswitchb-mode'."
(interactive)
(let (map)
;; generated every time so that it can inherit new functions.
......@@ -468,7 +509,7 @@ in a separate window.
\\[iswitchb-toggle-regexp] Toggle regexp searching.
\\[iswitchb-toggle-case] Toggle case-sensitive searching of buffer names.
\\[iswitchb-completion-help] Show list of matching buffers in separate window.
\\[iswitchb-find-file] Exit iswitchb and drop into find-file.
\\[iswitchb-find-file] Exit iswitchb and drop into `find-file'.
\\[iswitchb-kill-buffer] Kill buffer at head of buffer list."
;;\\[iswitchb-toggle-ignore] Toggle ignoring certain buffers (see \
;;`iswitchb-buffer-ignore')
......@@ -540,7 +581,7 @@ If REQUIRE-MATCH is non-nil, an existing-buffer must be selected."
'iswitchb-history)))
;; Handling the require-match must be done in a better way.
(if (and require-match (not (iswitchb-existing-buffer-p)))
(error "must specify valid buffer"))
(error "Must specify valid buffer"))
(if (or
(eq iswitchb-exit 'takeprompt)
......@@ -605,7 +646,7 @@ The result is stored in `iswitchb-common-match-string'."
;;; TOGGLE FUNCTIONS
(defun iswitchb-toggle-case ()
"Toggle the value of `iswitchb-case'."
"Toggle the value of variable `iswitchb-case'."
(interactive)
(setq iswitchb-case (not iswitchb-case))
;; ask for list to be regenerated.
......@@ -646,7 +687,7 @@ If no buffer exactly matching the prompt exists, maybe create a new one."
(exit-minibuffer))
(defun iswitchb-find-file ()
"Drop into find-file from buffer switching."
"Drop into `find-file' from buffer switching."
(interactive)
(setq iswitchb-exit 'findfile)
(exit-minibuffer))
......@@ -725,7 +766,7 @@ it is put to the start of the list."
(defun iswitchb-get-buffers-in-frames (&optional current)
"Return the list of buffers that are visible in the current frame.
If optional argument `current' is given, restrict searching to the
If optional argument CURRENT is given, restrict searching to the
current frame, rather than all frames, regardless of value of
`iswitchb-all-frames'."
(let ((iswitchb-bufs-in-frame nil))
......@@ -843,7 +884,7 @@ If `iswitchb-change-word-sub' cannot be found in WORD, return nil."
;; from Wayne Mesard <wmesard@esd.sgi.com>
(defun iswitchb-rotate-list (lis)
"Destructively removes the last element from LIS.
"Destructively remove the last element from LIS.
Return the modified list with the last element prepended to it."
(if (<= (length lis) 1)
lis
......@@ -891,6 +932,8 @@ Return the modified list with the last element prepended to it."
(lambda (x y z)
(message "doesn't work yet, sorry!")))
;; else running Emacs
(with-current-buffer standard-output
(fundamental-mode))
(display-completion-list (if iswitchb-matches
iswitchb-matches
iswitchb-buflist))
......@@ -996,7 +1039,9 @@ If BUFFER is visible in the current frame, return nil."
(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."
adds a hook to the minibuffer.
Obsolescent. Use `iswitchb-mode'."
(interactive)
(add-hook 'minibuffer-setup-hook 'iswitchb-minibuffer-setup)
(global-set-key "\C-xb" 'iswitchb-buffer)
......@@ -1260,11 +1305,10 @@ Copied from `icomplete-tidy'."
This is an example function which can be hooked on to
`iswitchb-make-buflist-hook'. Any buffer matching the regexps
`Summary' or `output\*$'are put to the end of the list."
(let ((summaries (delq nil (mapcar
(let ((summaries (delq nil
(mapcar
(lambda (x)
(if (or
(string-match "Summary" x)
(string-match "output\\*$" x))
(if (string-match "Summary\\|output\\*$" x)
x))
iswitchb-temp-buflist))))
(iswitchb-to-end summaries)))
......@@ -1277,6 +1321,29 @@ See the variable `iswitchb-case' for details."
(isearch-no-upper-case-p iswitchb-text)
(isearch-no-upper-case-p iswitchb-text t))))
;;;###autoload
(defun iswitchb-mode (&optional arg)
"Toggle Iswitchb global minor mode.
With arg, turn Iswitchb mode on if and only iff ARG is positive.
This mode enables switching between buffers using substrings. See
`iswitchb' for details."
(interactive "P")
(setq iswitchb-mode
(if arg
(> (prefix-numeric-value arg) 0)
(not iswitchb-mode)))
(if iswitchb-mode
(add-hook 'minibuffer-setup-hook 'iswitchb-minibuffer-setup)
(remove-hook 'minibuffer-setup-hook 'iswitchb-minibuffer-setup))
(run-hooks 'iswitchb-mode-hook)
(if (interactive-p)
(message "Iswitchb mode %sabled"
(if iswitchb-mode "en" "dis"))))
(unless (assq 'iswitchb-mode minor-mode-map-alist)
(push (cons 'iswitchb-mode iswitchb-global-map)
minor-mode-map-alist))
(provide 'iswitchb)
;;; iswitchb.el ends here
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment