mirror of
https://git.savannah.gnu.org/git/emacs.git
synced 2025-01-12 16:23:57 +00:00
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'.
This commit is contained in:
parent
281096ed46
commit
19db4308b6
253
lisp/iswitchb.el
253
lisp/iswitchb.el
@ -1,10 +1,10 @@
|
||||
;;; 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.
|
||||
@ -51,13 +47,13 @@
|
||||
;; I also modified a couple of functions from icomplete.el to provide
|
||||
;; the completion feedback in the minibuffer.
|
||||
|
||||
;;; Example
|
||||
;;; Example
|
||||
|
||||
;;If I have two buffers called "123456" and "123", with "123456" the
|
||||
;;most recent, when I use iswitchb, I first of all get presented with
|
||||
;;the list of all the buffers
|
||||
;;
|
||||
;; iswitch {123456,123}
|
||||
;; iswitch {123456,123}
|
||||
;;
|
||||
;; If I then press 2:
|
||||
;; iswitch 2[3]{123456,123}
|
||||
@ -69,7 +65,7 @@
|
||||
;; at the end of the list by pressing C-s, or put the last element at
|
||||
;; the head of the list by pressing C-r. The item in [] indicates
|
||||
;; what can be added to my input by pressing TAB. In this case, I
|
||||
;; will get "3" added to my input. So, press TAB:
|
||||
;; will get "3" added to my input. So, press TAB:
|
||||
;; iswitch 23{123456,123}
|
||||
;;
|
||||
;; At this point, I still have two matching buffers.
|
||||
@ -114,7 +110,7 @@
|
||||
;; Case matching: The case of strings when matching can be ignored or
|
||||
;; used depending on the value of iswitchb-case (default is the same
|
||||
;; as case-fold-search, normally t). Imagine you have the following
|
||||
;; buffers:
|
||||
;; buffers:
|
||||
;;
|
||||
;; INBOX *info* *scratch*
|
||||
;;
|
||||
@ -123,10 +119,10 @@
|
||||
;;
|
||||
;; iswitchb-case user input | matching buffers
|
||||
;; ----------------------------------------------
|
||||
;; nil in | *info*
|
||||
;; t in | INBOX, *info*
|
||||
;; t IN | INBOX
|
||||
;; t In | [No match]
|
||||
;; nil in | *info*
|
||||
;; t in | INBOX, *info*
|
||||
;; t IN | INBOX
|
||||
;; t In | [No match]
|
||||
|
||||
;;; Customisation
|
||||
|
||||
@ -182,7 +178,7 @@
|
||||
;; (setq read-buffer-function 'iswitchb-read-buffer)
|
||||
;; (This variable should be present in Emacs 20.3+)
|
||||
;; XEmacs users can get the same behaviour by doing:
|
||||
;; (defalias 'read-buffer 'iswitchb-read-buffer)
|
||||
;; (defalias 'read-buffer 'iswitchb-read-buffer)
|
||||
;; since `read-buffer' is defined in lisp.
|
||||
|
||||
;; Regexp matching
|
||||
@ -224,7 +220,7 @@
|
||||
;; We have the old custom-library, hack around it!
|
||||
(defmacro defgroup (&rest args)
|
||||
nil)
|
||||
(defmacro defcustom (var value doc &rest args)
|
||||
(defmacro defcustom (var value doc &rest args)
|
||||
`(defvar ,var ,value ,doc))))
|
||||
|
||||
;;; User Variables
|
||||
@ -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
|
||||
@ -278,10 +290,10 @@ Possible values:
|
||||
frame or in the other frame.
|
||||
`always-frame' If a buffer is visible in another frame, raise that
|
||||
frame. Otherwise, visit the buffer in the same window."
|
||||
:type '(choice (const samewindow)
|
||||
:type '(choice (const samewindow)
|
||||
(const otherwindow)
|
||||
(const display)
|
||||
(const otherframe)
|
||||
(const otherframe)
|
||||
(const maybe-frame)
|
||||
(const always-frame))
|
||||
:group 'iswitchb)
|
||||
@ -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)
|
||||
|
||||
@ -351,7 +364,7 @@ iswitchb is running. Copied from `icomplete-minibuffer-setup-hook'."
|
||||
;;; Internal Variables
|
||||
|
||||
(defvar iswitchb-method nil
|
||||
"Stores the method for viewing the selected buffer.
|
||||
"Stores the method for viewing the selected buffer.
|
||||
Its value is one of `samewindow', `otherwindow', `display', `otherframe',
|
||||
`maybe-frame' or `always-frame'. See `iswitchb-default-method' for
|
||||
details of values.")
|
||||
@ -370,11 +383,11 @@ at the end of the list. Created by `iswitchb-make-buflist'.")
|
||||
;; todo -- is this necessary?
|
||||
|
||||
(defvar iswitchb-use-mycompletion nil
|
||||
"Non-nil means use `iswitchb-buffer' completion feedback.
|
||||
"Non-nil means use `iswitchb-buffer' completion feedback.
|
||||
Should only be set to t by iswitchb functions, so that it doesn't
|
||||
interfere with other minibuffer usage.")
|
||||
|
||||
(defvar iswitchb-change-word-sub nil
|
||||
(defvar iswitchb-change-word-sub nil
|
||||
"Private variable used by `iswitchb-word-matching-substring'.")
|
||||
|
||||
(defvar iswitchb-common-match-string nil
|
||||
@ -389,14 +402,40 @@ 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-history nil
|
||||
(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'.")
|
||||
|
||||
(defvar iswitchb-exit nil
|
||||
"Flag to monitor how `iswitchb-buffer' exits.
|
||||
(defvar iswitchb-exit nil
|
||||
"Flag to monitor how `iswitchb-buffer' exits.
|
||||
If equal to `takeprompt', we use the prompt as the buffer name to be
|
||||
selected.")
|
||||
|
||||
@ -421,9 +460,11 @@ selected.")
|
||||
|
||||
;;; FUNCTIONS
|
||||
|
||||
;;; ISWITCHB KEYMAP
|
||||
;;; 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.
|
||||
@ -461,14 +502,14 @@ If no buffer is found, prompt for a new one.
|
||||
|
||||
\\[iswitchb-next-match] Put the first element at the end of the list.
|
||||
\\[iswitchb-prev-match] Put the last element at the start of the list.
|
||||
\\[iswitchb-complete] Complete a common suffix to the current string that
|
||||
\\[iswitchb-complete] Complete a common suffix to the current string that
|
||||
matches all buffers. If there is only one match, select that buffer.
|
||||
If there is no common suffix, show a list of all matching buffers
|
||||
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')
|
||||
@ -502,7 +543,7 @@ in a separate window.
|
||||
;;;###autoload
|
||||
(defun iswitchb-read-buffer (prompt &optional default require-match)
|
||||
"Replacement for the built-in `read-buffer'.
|
||||
Return the name of a buffer selected.
|
||||
Return the name of a buffer selected.
|
||||
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."
|
||||
@ -526,12 +567,12 @@ If REQUIRE-MATCH is non-nil, an existing-buffer must be selected."
|
||||
default))
|
||||
(iswitchb-make-buflist iswitchb-default)
|
||||
(iswitchb-set-matches)
|
||||
(let
|
||||
(let
|
||||
((minibuffer-local-completion-map iswitchb-mode-map)
|
||||
(iswitchb-prepost-hooks t)
|
||||
(iswitchb-require-match require-match))
|
||||
;; prompt the user for the buffer name
|
||||
(setq iswitchb-final-text (completing-read
|
||||
(setq iswitchb-final-text (completing-read
|
||||
prompt ;the prompt
|
||||
'(("dummy".1)) ;table
|
||||
nil ;predicate
|
||||
@ -540,9 +581,9 @@ 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
|
||||
(if (or
|
||||
(eq iswitchb-exit 'takeprompt)
|
||||
(null iswitchb-matches))
|
||||
(setq buf-sel iswitchb-final-text)
|
||||
@ -550,8 +591,8 @@ If REQUIRE-MATCH is non-nil, an existing-buffer must be selected."
|
||||
(setq buf-sel (car iswitchb-matches)))
|
||||
|
||||
;; Or possibly choose the default buffer
|
||||
(if (equal iswitchb-final-text "")
|
||||
(setq buf-sel
|
||||
(if (equal iswitchb-final-text "")
|
||||
(setq buf-sel
|
||||
(car iswitchb-matches)))
|
||||
|
||||
buf-sel))
|
||||
@ -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,19 +687,19 @@ 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))
|
||||
|
||||
(defun iswitchb-next-match ()
|
||||
(defun iswitchb-next-match ()
|
||||
"Put first element of `iswitchb-matches' at the end of the list."
|
||||
(interactive)
|
||||
(let ((next (cadr iswitchb-matches)))
|
||||
(setq iswitchb-buflist (iswitchb-chop iswitchb-buflist next))
|
||||
(setq iswitchb-rescan t)))
|
||||
|
||||
(defun iswitchb-prev-match ()
|
||||
(defun iswitchb-prev-match ()
|
||||
"Put last element of `iswitchb-matches' at the front of the list."
|
||||
(interactive)
|
||||
(let ((prev (car (last iswitchb-matches))))
|
||||
@ -685,19 +726,19 @@ If no buffer exactly matching the prompt exists, maybe create a new one."
|
||||
(defun iswitchb-make-buflist (default)
|
||||
"Set `iswitchb-buflist' to the current list of buffers.
|
||||
Currently visible buffers are put at the end of the list.
|
||||
The hook `iswitchb-make-buflist-hook' is run after the list has been
|
||||
The hook `iswitchb-make-buflist-hook' is run after the list has been
|
||||
created to allow the user to further modify the order of the buffer names
|
||||
in this list. If DEFAULT is non-nil, and corresponds to an existing buffer,
|
||||
it is put to the start of the list."
|
||||
(setq iswitchb-buflist
|
||||
(setq iswitchb-buflist
|
||||
(let* ((iswitchb-current-buffers (iswitchb-get-buffers-in-frames))
|
||||
(iswitchb-temp-buflist
|
||||
(delq nil
|
||||
(delq nil
|
||||
(mapcar
|
||||
(lambda (x)
|
||||
(let ((b-name (buffer-name x)))
|
||||
(if (not
|
||||
(or
|
||||
(if (not
|
||||
(or
|
||||
(iswitchb-ignore-buffername-p b-name)
|
||||
(memq b-name iswitchb-current-buffers)))
|
||||
b-name)))
|
||||
@ -709,28 +750,28 @@ it is put to the start of the list."
|
||||
;; final thing to be run?
|
||||
(if default
|
||||
(progn
|
||||
(setq iswitchb-temp-buflist
|
||||
(setq iswitchb-temp-buflist
|
||||
(delete default iswitchb-temp-buflist))
|
||||
(setq iswitchb-temp-buflist
|
||||
(setq iswitchb-temp-buflist
|
||||
(cons default iswitchb-temp-buflist))))
|
||||
iswitchb-temp-buflist)))
|
||||
|
||||
(defun iswitchb-to-end (lst)
|
||||
"Move the elements from LST to the end of `iswitchb-temp-buflist'."
|
||||
(mapcar
|
||||
(lambda (elem)
|
||||
(mapcar
|
||||
(lambda (elem)
|
||||
(setq iswitchb-temp-buflist (delq elem iswitchb-temp-buflist)))
|
||||
lst)
|
||||
(nconc iswitchb-temp-buflist lst))
|
||||
|
||||
(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))
|
||||
(walk-windows 'iswitchb-get-bufname nil
|
||||
(if current
|
||||
(if current
|
||||
nil
|
||||
iswitchb-all-frames))
|
||||
iswitchb-bufs-in-frame))
|
||||
@ -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
|
||||
@ -859,7 +900,7 @@ Return the modified list with the last element prepended to it."
|
||||
"Show possible completions in a *Buffer Completions* buffer."
|
||||
;; we could allow this buffer to be used to select match, but I think
|
||||
;; choose-completion-string will need redefining, so it just inserts
|
||||
;; choice with out any previous input.
|
||||
;; choice with out any previous input.
|
||||
(interactive)
|
||||
(setq iswitchb-rescan nil)
|
||||
(let ((completion-setup-hook nil) ;disable fancy highlight/selection.
|
||||
@ -879,7 +920,7 @@ Return the modified list with the last element prepended to it."
|
||||
(set-buffer buf))
|
||||
|
||||
(with-output-to-temp-buffer temp-buf
|
||||
(if iswitchb-xemacs
|
||||
(if iswitchb-xemacs
|
||||
|
||||
;; XEmacs extents are put on by default, doesn't seem to be
|
||||
;; any way of switching them off.
|
||||
@ -887,12 +928,14 @@ Return the modified list with the last element prepended to it."
|
||||
iswitchb-matches
|
||||
iswitchb-buflist)
|
||||
:help-string "iswitchb "
|
||||
:activate-callback
|
||||
(lambda (x y z)
|
||||
(message "doesn't work yet, sorry!")))
|
||||
:activate-callback
|
||||
(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-matches
|
||||
iswitchb-buflist))
|
||||
)))))
|
||||
|
||||
@ -915,7 +958,7 @@ Return the modified list with the last element prepended to it."
|
||||
;; killed, so we can't rely on kill-buffer return value.
|
||||
(if (get-buffer buf)
|
||||
;; buffer couldn't be killed.
|
||||
(setq iswitchb-rescan t)
|
||||
(setq iswitchb-rescan t)
|
||||
;; else buffer was killed so remove name from list.
|
||||
(setq iswitchb-buflist (delq buf 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)
|
||||
@ -1064,13 +1109,13 @@ This is a hack for XEmacs, and should really be handled by `iswitchb-exhibit'."
|
||||
|
||||
;; add this hook for XEmacs only.
|
||||
(if iswitchb-xemacs
|
||||
(add-hook 'iswitchb-minibuffer-setup-hook
|
||||
(add-hook 'iswitchb-minibuffer-setup-hook
|
||||
'iswitchb-init-XEmacs-trick))
|
||||
|
||||
;;; XEmacs / backspace key
|
||||
;; For some reason, if the backspace key is pressed in XEmacs, the
|
||||
;; line gets confused, so I've added a simple key definition to make
|
||||
;; backspace act like the normal delete key.
|
||||
;; backspace act like the normal delete key.
|
||||
|
||||
(defun iswitchb-xemacs-backspacekey ()
|
||||
"Bind backspace to `backward-delete-char'."
|
||||
@ -1078,7 +1123,7 @@ This is a hack for XEmacs, and should really be handled by `iswitchb-exhibit'."
|
||||
(define-key iswitchb-mode-map '[(meta backspace)] 'backward-kill-word))
|
||||
|
||||
(if iswitchb-xemacs
|
||||
(add-hook 'iswitchb-define-mode-map-hook
|
||||
(add-hook 'iswitchb-define-mode-map-hook
|
||||
'iswitchb-xemacs-backspacekey))
|
||||
|
||||
;;; ICOMPLETE TYPE CODE
|
||||
@ -1131,10 +1176,10 @@ Modified from `icomplete-completions'."
|
||||
(setq first (car comps))
|
||||
(setq first (format "%s" first))
|
||||
(put-text-property 0 (length first) 'face
|
||||
(if (= (length comps) 1)
|
||||
(if (= (length comps) 1)
|
||||
'font-lock-comment-face
|
||||
'font-lock-function-name-face)
|
||||
first)
|
||||
first)
|
||||
(setq comps (cons first (cdr comps)))))
|
||||
|
||||
(cond ((null comps) (format " %sNo match%s"
|
||||
@ -1145,7 +1190,7 @@ Modified from `icomplete-completions'."
|
||||
(concat (if (and (> (length (car comps))
|
||||
(length name)))
|
||||
(concat open-bracket-determined
|
||||
;; when there is one match, show the
|
||||
;; when there is one match, show the
|
||||
;; matching buffer name in full
|
||||
(car comps)
|
||||
close-bracket-determined)
|
||||
@ -1182,7 +1227,7 @@ Modified from `icomplete-completions'."
|
||||
;; pressing tab
|
||||
(if (> (length iswitchb-common-match-string) (length name))
|
||||
(concat open-bracket-determined
|
||||
(substring iswitchb-common-match-string
|
||||
(substring iswitchb-common-match-string
|
||||
(length name))
|
||||
close-bracket-determined))
|
||||
;; end of partial matches...
|
||||
@ -1260,13 +1305,12 @@ 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
|
||||
(lambda (x)
|
||||
(if (or
|
||||
(string-match "Summary" x)
|
||||
(string-match "output\\*$" x))
|
||||
x))
|
||||
iswitchb-temp-buflist))))
|
||||
(let ((summaries (delq nil
|
||||
(mapcar
|
||||
(lambda (x)
|
||||
(if (string-match "Summary\\|output\\*$" x)
|
||||
x))
|
||||
iswitchb-temp-buflist))))
|
||||
(iswitchb-to-end summaries)))
|
||||
|
||||
(defun iswitchb-case ()
|
||||
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user