annotate lisp/iswitchb.el @ 24419:30e478cd167e

(shell-command-default-error-buffer): Renamed from shell-command-on-region-default-error-buffer. (shell-command-on-region): Mention in echo area when there is some error output. Mention success or failure, too. Accumulate multiple error outputs going forward, with formfeed in between. Display the error buffer when we have put something in it. (shell-command): Add the ERROR-BUFFER argument feature.
author Karl Heuer <kwzh@gnu.org>
date Mon, 01 Mar 1999 03:19:32 +0000
parents ef0150f917c9
children 788dc6ff04da
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
17617
4851316697c1 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 17616
diff changeset
1 ;;; iswitchb.el --- switch between buffers using substrings
17616
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3 ;; Copyright (C) 1996, 1997 Free Software Foundation, Inc.
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4
23785
ef0150f917c9 Update author email and web page.
Stephen Eglen <stephen@gnu.org>
parents: 22380
diff changeset
5 ;; Author: Stephen Eglen <stephen@anc.ed.ac.uk>
ef0150f917c9 Update author email and web page.
Stephen Eglen <stephen@gnu.org>
parents: 22380
diff changeset
6 ;; Maintainer: Stephen Eglen <stephen@anc.ed.ac.uk>
22250
a77d473867b8 *** empty log message ***
Dan Nicolaescu <done@ece.arizona.edu>
parents: 21706
diff changeset
7 ;; Keywords: extensions convenience
23785
ef0150f917c9 Update author email and web page.
Stephen Eglen <stephen@gnu.org>
parents: 22380
diff changeset
8 ;; location: http://www.anc.ed.ac.uk/~stephen/emacs/
17616
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
9
17617
4851316697c1 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 17616
diff changeset
10 ;; This file is part of GNU Emacs.
4851316697c1 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 17616
diff changeset
11
4851316697c1 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 17616
diff changeset
12 ;; GNU Emacs is free software; you can redistribute it and/or modify
17616
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
13 ;; it under the terms of the GNU General Public License as published by
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
14 ;; the Free Software Foundation; either version 2, or (at your option)
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
15 ;; any later version.
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
16
17617
4851316697c1 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 17616
diff changeset
17 ;; GNU Emacs is distributed in the hope that it will be useful,
17616
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
18 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
19 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
20 ;; GNU General Public License for more details.
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
21
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
22 ;; You should have received a copy of the GNU General Public License
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
23 ;; along with GNU Emacs; see the file COPYING. If not, write to the
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
24 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
25 ;; Boston, MA 02111-1307, USA.
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
26
21058
f2c4ac206a48 (iswitchb-default-method): Remove :tag entries.
Stephen Eglen <stephen@gnu.org>
parents: 20470
diff changeset
27 ;;; Commentary:
17616
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
28
21058
f2c4ac206a48 (iswitchb-default-method): Remove :tag entries.
Stephen Eglen <stephen@gnu.org>
parents: 20470
diff changeset
29 ;; Installation:
17616
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
30 ;; To get the functions in this package bound to keys, do
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
31 ;; (iswitchb-default-keybindings)
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
32
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
33 ;; As you type in a substring, the list of buffers currently matching
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
34 ;; the substring are displayed as you type. The list is ordered so
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
35 ;; that the most recent buffers visited come at the start of the list.
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
36 ;; The buffer at the start of the list will be the one visited when
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
37 ;; you press return. By typing more of the substring, the list is
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
38 ;; narrowed down so that gradually the buffer you want will be at the
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
39 ;; top of the list. Alternatively, you can use C-s an C-r to rotate
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
40 ;; buffer names in the list until the one you want is at the top of
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
41 ;; the list. Completion is also available so that you can see what is
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
42 ;; common to all of the matching buffers as you type.
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
43
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
44 ;; This code is similar to a couple of other packages. Michael R Cook
21058
f2c4ac206a48 (iswitchb-default-method): Remove :tag entries.
Stephen Eglen <stephen@gnu.org>
parents: 20470
diff changeset
45 ;; <mcook@cognex.com> wrote a similar buffer switching package, but
17616
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
46 ;; does exact matching rather than substring matching on buffer names.
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
47 ;; I also modified a couple of functions from icomplete.el to provide
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
48 ;; the completion feedback in the minibuffer.
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
49
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
50 ;;; Example
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
51
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
52 ;;If I have two buffers called "123456" and "123", with "123456" the
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
53 ;;most recent, when I use iswitchb, I first of all get presented with
18776
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
54 ;;the list of all the buffers
17616
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
55 ;;
18776
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
56 ;; iswitch {123456,123}
17616
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
57 ;;
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
58 ;; If I then press 2:
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
59 ;; iswitch 2[3]{123456,123}
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
60 ;;
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
61 ;; The list in {} are the matching buffers, most recent first (buffers
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
62 ;; visible in the current frame are put at the end of the list by
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
63 ;; default). At any time I can select the item at the head of the
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
64 ;; list by pressing RET. I can also bring the put the first element
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
65 ;; at the end of the list by pressing C-s, or put the last element at
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
66 ;; the head of the list by pressing C-r. The item in [] indicates
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
67 ;; what can be added to my input by pressing TAB. In this case, I
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
68 ;; will get "3" added to my input. So, press TAB:
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
69 ;; iswitch 23{123456,123}
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
70 ;;
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
71 ;; At this point, I still have two matching buffers.
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
72 ;; If I want the first buffer in the list, I simply press RET. If I
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
73 ;; wanted the second in the list, I could press C-s to move it to the
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
74 ;; top of the list and then RET to select it.
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
75 ;;
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
76 ;;However, If I type 4, I only have one match left:
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
77 ;; iswitch 234[123456] [Matched]
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
78 ;;
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
79 ;;Since there is only one matching buffer left, it is given in [] and we
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
80 ;;see the text [Matched] afterwards. I can now press TAB or RET to go
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
81 ;;to that buffer.
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
82 ;;
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
83 ;; If however, I now type "a":
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
84 ;; iswitch 234a [No match]
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
85 ;; There are no matching buffers. If I press RET or TAB, I can be
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
86 ;; prompted to create a new buffer called "234a".
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
87 ;;
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
88 ;; Of course, where this function comes in really useful is when you
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
89 ;; can specify the buffer using only a few keystrokes. In the above
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
90 ;; example, the quickest way to get to the "123456" buffer would be
20470
4d8e07123564 (iswitchb-completion-help): Multiple TAB presses
Karl Heuer <kwzh@gnu.org>
parents: 18929
diff changeset
91 ;; just to type 4 and then RET (assuming there isn't any newer buffer
17616
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
92 ;; with 4 in its name).
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
93
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
94 ;; To see a full list of all matching buffers in a separate buffer,
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
95 ;; hit ? or press TAB when there are no further completions to the
20470
4d8e07123564 (iswitchb-completion-help): Multiple TAB presses
Karl Heuer <kwzh@gnu.org>
parents: 18929
diff changeset
96 ;; substring. Repeated TAB presses will scroll you through this
4d8e07123564 (iswitchb-completion-help): Multiple TAB presses
Karl Heuer <kwzh@gnu.org>
parents: 18929
diff changeset
97 ;; separate buffer.
17616
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
98
18776
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
99 ;; The buffer at the head of the list can be killed by pressing C-k.
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
100 ;; If the buffer needs saving, you will be queried before the buffer
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
101 ;; is killed.
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
102
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
103 ;; If you find that the file you are after is not in a buffer, you can
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
104 ;; press C-x C-f to immediately drop into find-file.
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
105
17616
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
106 ;;
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
107 ;; See the doc string of iswitchb for full keybindings and features.
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
108 ;; (describe-function 'iswitchb)
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
109
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
110 ;;; Customisation
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
111
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
112 ;; See the User Variables section below for easy ways to change the
18776
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
113 ;; functionality of the program. These are accessible using the
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
114 ;; custom package.
17616
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
115 ;; To modify the keybindings, use the hook provided. For example:
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
116 ;;(add-hook 'iswitchb-define-mode-map-hook
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
117 ;; 'iswitchb-my-keys)
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
118 ;;
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
119 ;;(defun iswitchb-my-keys ()
20470
4d8e07123564 (iswitchb-completion-help): Multiple TAB presses
Karl Heuer <kwzh@gnu.org>
parents: 18929
diff changeset
120 ;; "Add my keybindings for iswitchb."
17616
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
121 ;; (define-key iswitchb-mode-map " " 'iswitchb-next-match)
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
122 ;; )
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
123 ;;
21326
8150549598cc Many doc fixes.
Stephen Eglen <stephen@gnu.org>
parents: 21156
diff changeset
124 ;; Seeing all the matching buffers
18776
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
125 ;;
17616
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
126 ;; If you have many matching buffers, they may not all fit onto one
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
127 ;; line of the minibuffer. In this case, you should use rsz-mini
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
128 ;; (resize-minibuffer-mode). You can also limit iswitchb so that it
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
129 ;; only shows a certain number of lines -- see the documentation for
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
130 ;; `iswitchb-minibuffer-setup-hook'.
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
131
21326
8150549598cc Many doc fixes.
Stephen Eglen <stephen@gnu.org>
parents: 21156
diff changeset
132 ;; Changing the list of buffers
17616
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
133
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
134 ;; By default, the list of current buffers is most recent first,
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
135 ;; oldest last, with the exception that the buffers visible in the
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
136 ;; current frame are put at the end of the list. A hook exists to
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
137 ;; allow other functions to order the list. For example, if you add:
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
138 ;;
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
139 ;; (add-hook 'iswitchb-make-buflist-hook 'iswitchb-summaries-to-end)
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
140 ;;
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
141 ;; then all buffers matching "Summary" are moved to the end of the
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
142 ;; list. (I find this handy for keeping the INBOX Summary and so on
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
143 ;; out of the way.) It also moves buffers matching "output\*$" to the
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
144 ;; end of the list (these are created by AUC TeX when compiling.)
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
145 ;; Other functions could be made available which alter the list of
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
146 ;; matching buffers (either deleting or rearranging elements.)
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
147
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
148 ;; Font-Lock
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
149
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
150 ;; If you have font-lock loaded, the first matching buffer is
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
151 ;; highlighted. To switch this off, set (setq iswitchb-use-fonts nil)
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
152 ;; I don't use font-lock that much, so I've hardcoded the faces. If
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
153 ;; this is too harsh, let me know. Colouring of the matching buffer
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
154 ;; name was suggested by Carsten Dominik (dominik@strw.leidenuniv.nl)
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
155
21326
8150549598cc Many doc fixes.
Stephen Eglen <stephen@gnu.org>
parents: 21156
diff changeset
156 ;; Replacement for read-buffer
17616
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
157
20470
4d8e07123564 (iswitchb-completion-help): Multiple TAB presses
Karl Heuer <kwzh@gnu.org>
parents: 18929
diff changeset
158 ;; iswitchb-read-buffer has been written to be a drop in replacement
4d8e07123564 (iswitchb-completion-help): Multiple TAB presses
Karl Heuer <kwzh@gnu.org>
parents: 18929
diff changeset
159 ;; for the normal buffer selection routine `read-buffer'. To use
21058
f2c4ac206a48 (iswitchb-default-method): Remove :tag entries.
Stephen Eglen <stephen@gnu.org>
parents: 20470
diff changeset
160 ;; iswitch for all buffer selections in Emacs, add:
20470
4d8e07123564 (iswitchb-completion-help): Multiple TAB presses
Karl Heuer <kwzh@gnu.org>
parents: 18929
diff changeset
161 ;; (setq read-buffer-function 'iswitchb-read-buffer)
21058
f2c4ac206a48 (iswitchb-default-method): Remove :tag entries.
Stephen Eglen <stephen@gnu.org>
parents: 20470
diff changeset
162 ;; (This variable should be present in Emacs 20.3+)
f2c4ac206a48 (iswitchb-default-method): Remove :tag entries.
Stephen Eglen <stephen@gnu.org>
parents: 20470
diff changeset
163 ;; XEmacs users can get the same behaviour by doing:
f2c4ac206a48 (iswitchb-default-method): Remove :tag entries.
Stephen Eglen <stephen@gnu.org>
parents: 20470
diff changeset
164 ;; (defalias 'read-buffer 'iswitchb-read-buffer)
f2c4ac206a48 (iswitchb-default-method): Remove :tag entries.
Stephen Eglen <stephen@gnu.org>
parents: 20470
diff changeset
165 ;; since `read-buffer' is defined in lisp.
17616
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
166
21326
8150549598cc Many doc fixes.
Stephen Eglen <stephen@gnu.org>
parents: 21156
diff changeset
167 ;; Regexp matching
8150549598cc Many doc fixes.
Stephen Eglen <stephen@gnu.org>
parents: 21156
diff changeset
168
8150549598cc Many doc fixes.
Stephen Eglen <stephen@gnu.org>
parents: 21156
diff changeset
169 ;; There is limited provision for regexp matching within iswitchb,
8150549598cc Many doc fixes.
Stephen Eglen <stephen@gnu.org>
parents: 21156
diff changeset
170 ;; enabled through `iswitchb-regexp'. This allows you to type `c$'
8150549598cc Many doc fixes.
Stephen Eglen <stephen@gnu.org>
parents: 21156
diff changeset
171 ;; for example and see all buffer names ending in `c'. This facility
8150549598cc Many doc fixes.
Stephen Eglen <stephen@gnu.org>
parents: 21156
diff changeset
172 ;; is quite limited though in two respects. First, you can't
8150549598cc Many doc fixes.
Stephen Eglen <stephen@gnu.org>
parents: 21156
diff changeset
173 ;; currently type in expressions like `[0-9]' directly -- you have to
8150549598cc Many doc fixes.
Stephen Eglen <stephen@gnu.org>
parents: 21156
diff changeset
174 ;; type them in when iswitchb-regexp is nil and then toggle on the
8150549598cc Many doc fixes.
Stephen Eglen <stephen@gnu.org>
parents: 21156
diff changeset
175 ;; regexp functionality. Likewise, don't enter an expression
8150549598cc Many doc fixes.
Stephen Eglen <stephen@gnu.org>
parents: 21156
diff changeset
176 ;; containing `\' in regexp mode. If you try, iswitchb gets confused,
8150549598cc Many doc fixes.
Stephen Eglen <stephen@gnu.org>
parents: 21156
diff changeset
177 ;; so just hit C-g and try again. Secondly, no completion mechanism
8150549598cc Many doc fixes.
Stephen Eglen <stephen@gnu.org>
parents: 21156
diff changeset
178 ;; is currently offered when regexp searching.
8150549598cc Many doc fixes.
Stephen Eglen <stephen@gnu.org>
parents: 21156
diff changeset
179
18776
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
180 ;;; TODO
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
181
17616
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
182 ;;; Acknowledgements
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
183
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
184 ;; Thanks to Jari Aalto <jari.aalto@poboxes.com> for help with the
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
185 ;; first version of this package, iswitch-buffer. Thanks also to many
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
186 ;; others for testing earlier versions.
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
187
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
188 ;;; Code:
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
189
21058
f2c4ac206a48 (iswitchb-default-method): Remove :tag entries.
Stephen Eglen <stephen@gnu.org>
parents: 20470
diff changeset
190 ;; CL needed for cadr and last
21706
a0c3ee34362d Only require cl if cadr and last are not defined (thanks to Dave Love.)
Stephen Eglen <stephen@gnu.org>
parents: 21326
diff changeset
191 (if (not (and (fboundp 'cadr)
a0c3ee34362d Only require cl if cadr and last are not defined (thanks to Dave Love.)
Stephen Eglen <stephen@gnu.org>
parents: 21326
diff changeset
192 (fboundp 'last)))
a0c3ee34362d Only require cl if cadr and last are not defined (thanks to Dave Love.)
Stephen Eglen <stephen@gnu.org>
parents: 21326
diff changeset
193 (require 'cl))
21058
f2c4ac206a48 (iswitchb-default-method): Remove :tag entries.
Stephen Eglen <stephen@gnu.org>
parents: 20470
diff changeset
194
18776
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
195 ;; Set up the custom library.
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
196 ;; taken from http://www.dina.kvl.dk/~abraham/custom/
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
197 (eval-and-compile
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
198 (condition-case ()
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
199 (require 'custom)
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
200 (error nil))
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
201 (if (and (featurep 'custom) (fboundp 'custom-declare-variable))
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
202 nil ;; We've got what we needed
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
203 ;; We have the old custom-library, hack around it!
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
204 (defmacro defgroup (&rest args)
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
205 nil)
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
206 (defmacro defcustom (var value doc &rest args)
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
207 (` (defvar (, var) (, value) (, doc))))))
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
208
17616
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
209 ;;; User Variables
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
210 ;;
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
211 ;; These are some things you might want to change.
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
212
18776
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
213 (defgroup iswitchb nil
21058
f2c4ac206a48 (iswitchb-default-method): Remove :tag entries.
Stephen Eglen <stephen@gnu.org>
parents: 20470
diff changeset
214 "Switch between buffers using substrings."
18776
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
215 :group 'extensions
22250
a77d473867b8 *** empty log message ***
Dan Nicolaescu <done@ece.arizona.edu>
parents: 21706
diff changeset
216 :group 'convenience
18776
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
217 ;; These links are to be added in later versions of custom and
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
218 ;; so are currently commented out.
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
219 :link '(emacs-commentary-link :tag "Commentary" "iswitchb.el")
21706
a0c3ee34362d Only require cl if cadr and last are not defined (thanks to Dave Love.)
Stephen Eglen <stephen@gnu.org>
parents: 21326
diff changeset
220 :link '(emacs-library-link :tag "Lisp File" "iswitchb.el"))
18776
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
221
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
222 (defcustom iswitchb-case case-fold-search
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
223 "*Non-nil if searching of buffer names should ignore case."
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
224 :type 'boolean
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
225 :group 'iswitchb)
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
226
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
227 (defcustom iswitchb-buffer-ignore
17616
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
228 '("^ ")
17617
4851316697c1 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 17616
diff changeset
229 "*List of regexps or functions matching buffer names to ignore.
4851316697c1 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 17616
diff changeset
230 For example, traditional behavior is not to list buffers whose names begin
4851316697c1 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 17616
diff changeset
231 with a space, for which the regexp is `^ '. See the source file for
18776
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
232 example functions that filter buffernames."
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
233 :type '(repeat regexp)
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
234 :group 'iswitchb)
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
235
17616
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
236 ;;; Examples for setting the value of iswitchb-buffer-ignore
21326
8150549598cc Many doc fixes.
Stephen Eglen <stephen@gnu.org>
parents: 21156
diff changeset
237 ;(defun iswitchb-ignore-c-mode (name)
17616
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
238 ; "Ignore all c mode buffers -- example function for iswitchb."
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
239 ; (save-excursion
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
240 ; (set-buffer name)
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
241 ; (string-match "^C$" mode-name)))
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
242
21326
8150549598cc Many doc fixes.
Stephen Eglen <stephen@gnu.org>
parents: 21156
diff changeset
243 ;(setq iswitchb-buffer-ignore '("^ " iswitchb-ignore-c-mode))
17616
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
244 ;(setq iswitchb-buffer-ignore '("^ " "\\.c$" "\\.h$"))
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
245
18776
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
246 (defcustom iswitchb-default-method 'always-frame
17617
4851316697c1 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 17616
diff changeset
247 "*How to switch to new buffer when using `iswitchb-buffer'.
17616
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
248 Possible values:
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
249 `samewindow' Show new buffer in same window
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
250 `otherwindow' Show new buffer in another window (same frame)
17618
8d33666b1152 (iswitchb-visit-buffer): Handle `display' alternative.
Richard M. Stallman <rms@gnu.org>
parents: 17617
diff changeset
251 `display' Display buffer in another window without switching to it
17616
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
252 `otherframe' Show new buffer in another frame
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
253 `maybe-frame' If a buffer is visible in another frame, prompt to ask if you
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
254 you want to see the buffer in the same window of the current
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
255 frame or in the other frame.
21058
f2c4ac206a48 (iswitchb-default-method): Remove :tag entries.
Stephen Eglen <stephen@gnu.org>
parents: 20470
diff changeset
256 `always-frame' If a buffer is visible in another frame, raise that
18776
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
257 frame. Otherwise, visit the buffer in the same window."
21058
f2c4ac206a48 (iswitchb-default-method): Remove :tag entries.
Stephen Eglen <stephen@gnu.org>
parents: 20470
diff changeset
258 :type '(choice (const samewindow)
f2c4ac206a48 (iswitchb-default-method): Remove :tag entries.
Stephen Eglen <stephen@gnu.org>
parents: 20470
diff changeset
259 (const otherwindow)
f2c4ac206a48 (iswitchb-default-method): Remove :tag entries.
Stephen Eglen <stephen@gnu.org>
parents: 20470
diff changeset
260 (const display)
f2c4ac206a48 (iswitchb-default-method): Remove :tag entries.
Stephen Eglen <stephen@gnu.org>
parents: 20470
diff changeset
261 (const otherframe)
f2c4ac206a48 (iswitchb-default-method): Remove :tag entries.
Stephen Eglen <stephen@gnu.org>
parents: 20470
diff changeset
262 (const maybe-frame)
f2c4ac206a48 (iswitchb-default-method): Remove :tag entries.
Stephen Eglen <stephen@gnu.org>
parents: 20470
diff changeset
263 (const always-frame))
18776
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
264 :group 'iswitchb)
17616
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
265
18776
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
266 (defcustom iswitchb-regexp nil
17617
4851316697c1 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 17616
diff changeset
267 "*Non-nil means that `iswitchb' will do regexp matching.
21326
8150549598cc Many doc fixes.
Stephen Eglen <stephen@gnu.org>
parents: 21156
diff changeset
268 Value can be toggled within `iswitchb' using `iswitchb-toggle-regexp'."
18776
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
269 :type 'boolean
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
270 :group 'iswitchb)
17616
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
271
18776
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
272 (defcustom iswitchb-newbuffer t
17616
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
273 "*Non-nil means create new buffer if no buffer matches substring.
18776
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
274 See also `iswitchb-prompt-newbuffer'."
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
275 :type 'boolean
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
276 :group 'iswitchb)
17616
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
277
18776
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
278 (defcustom iswitchb-prompt-newbuffer t
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
279 "*Non-nil means prompt user to confirm before creating new buffer.
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
280 See also `iswitchb-newbuffer'."
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
281 :type 'boolean
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
282 :group 'iswitchb)
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
283
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
284 (defcustom iswitchb-define-mode-map-hook nil
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
285 "*Hook to define keys in `iswitchb-mode-map' for extra keybindings."
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
286 :type 'hook
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
287 :group 'iswitchb)
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
288
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
289 (defcustom iswitchb-use-fonts t
21326
8150549598cc Many doc fixes.
Stephen Eglen <stephen@gnu.org>
parents: 21156
diff changeset
290 "*Non-nil means use font-lock fonts for showing first match."
18776
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
291 :type 'boolean
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
292 :group 'iswitchb)
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
293
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
294 (defcustom iswitchb-make-buflist-hook nil
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
295 "*Hook to run when list of matching buffers is created."
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
296 :type 'hook
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
297 :group 'iswitchb)
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
298
17616
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
299 (defvar iswitchb-all-frames 'visible
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
300 "*Argument to pass to `walk-windows' when finding visible buffers.
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
301 See documentation of `walk-windows' for useful values.")
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
302
21326
8150549598cc Many doc fixes.
Stephen Eglen <stephen@gnu.org>
parents: 21156
diff changeset
303 (defcustom iswitchb-minibuffer-setup-hook nil
8150549598cc Many doc fixes.
Stephen Eglen <stephen@gnu.org>
parents: 21156
diff changeset
304 "*Iswitchb-specific customization of minibuffer setup.
17616
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
305
17617
4851316697c1 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 17616
diff changeset
306 This hook is run during minibuffer setup iff `iswitchb' will be active.
17616
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
307 It is intended for use in customizing iswitchb for interoperation
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
308 with other packages. For instance:
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
309
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
310 \(add-hook 'iswitchb-minibuffer-setup-hook
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
311 \(function
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
312 \(lambda ()
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
313 \(make-local-variable 'resize-minibuffer-window-max-height)
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
314 \(setq resize-minibuffer-window-max-height 3))))
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
315
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
316 will constrain rsz-mini to a maximum minibuffer height of 3 lines when
21326
8150549598cc Many doc fixes.
Stephen Eglen <stephen@gnu.org>
parents: 21156
diff changeset
317 iswitchb is running. Copied from `icomplete-minibuffer-setup-hook'."
8150549598cc Many doc fixes.
Stephen Eglen <stephen@gnu.org>
parents: 21156
diff changeset
318 :type 'hook
8150549598cc Many doc fixes.
Stephen Eglen <stephen@gnu.org>
parents: 21156
diff changeset
319 :group 'iswitchb)
8150549598cc Many doc fixes.
Stephen Eglen <stephen@gnu.org>
parents: 21156
diff changeset
320
8150549598cc Many doc fixes.
Stephen Eglen <stephen@gnu.org>
parents: 21156
diff changeset
321 ;; Do we need the variable iswitchb-use-mycompletion?
8150549598cc Many doc fixes.
Stephen Eglen <stephen@gnu.org>
parents: 21156
diff changeset
322
8150549598cc Many doc fixes.
Stephen Eglen <stephen@gnu.org>
parents: 21156
diff changeset
323 ;;; Internal Variables
8150549598cc Many doc fixes.
Stephen Eglen <stephen@gnu.org>
parents: 21156
diff changeset
324
8150549598cc Many doc fixes.
Stephen Eglen <stephen@gnu.org>
parents: 21156
diff changeset
325 (defvar iswitchb-method nil
8150549598cc Many doc fixes.
Stephen Eglen <stephen@gnu.org>
parents: 21156
diff changeset
326 "Stores the method for viewing the selected buffer.
8150549598cc Many doc fixes.
Stephen Eglen <stephen@gnu.org>
parents: 21156
diff changeset
327 Its value is one of `samewindow', `otherwindow', `display', `otherframe',
8150549598cc Many doc fixes.
Stephen Eglen <stephen@gnu.org>
parents: 21156
diff changeset
328 `maybe-frame' or `always-frame'. See `iswitchb-default-method' for
8150549598cc Many doc fixes.
Stephen Eglen <stephen@gnu.org>
parents: 21156
diff changeset
329 details of values.")
17616
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
330
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
331 (defvar iswitchb-eoinput 1
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
332 "Point where minibuffer input ends and completion info begins.
17617
4851316697c1 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 17616
diff changeset
333 Copied from `icomplete-eoinput'.")
17616
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
334 (make-variable-buffer-local 'iswitchb-eoinput)
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
335
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
336 (defvar iswitchb-buflist nil
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
337 "Stores the current list of buffers that will be searched through.
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
338 The list is ordered, so that the most recent buffers come first,
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
339 although by default, the buffers visible in the current frame are put
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
340 at the end of the list. Created by `iswitchb-make-buflist'.")
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
341
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
342 ;; todo -- is this necessary?
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
343
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
344 (defvar iswitchb-use-mycompletion nil
17617
4851316697c1 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 17616
diff changeset
345 "Non-nil means use `iswitchb-buffer' completion feedback.
4851316697c1 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 17616
diff changeset
346 Should only be set to t by iswitchb functions, so that it doesn't
4851316697c1 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 17616
diff changeset
347 interfere with other minibuffer usage.")
17616
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
348
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
349 (defvar iswitchb-change-word-sub nil
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
350 "Private variable used by `iswitchb-word-matching-substring'.")
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
351
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
352 (defvar iswitchb-common-match-string nil
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
353 "Stores the string that is common to all matching buffers.")
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
354
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
355 (defvar iswitchb-rescan nil
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
356 "Non-nil means we need to regenerate the list of matching buffers.")
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
357
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
358 (defvar iswitchb-text nil
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
359 "Stores the users string as it is typed in.")
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
360
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
361 (defvar iswitchb-matches nil
20470
4d8e07123564 (iswitchb-completion-help): Multiple TAB presses
Karl Heuer <kwzh@gnu.org>
parents: 18929
diff changeset
362 "List of buffers currently matching `iswitchb-text'.")
17616
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
363
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
364 (defvar iswitchb-mode-map nil
17617
4851316697c1 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 17616
diff changeset
365 "Keymap for `iswitchb-buffer'.")
17616
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
366
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
367 (defvar iswitchb-history nil
17617
4851316697c1 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 17616
diff changeset
368 "History of buffers selected using `iswitchb-buffer'.")
17616
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
369
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
370 (defvar iswitchb-exit nil
17617
4851316697c1 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 17616
diff changeset
371 "Flag to monitor how `iswitchb-buffer' exits.
4851316697c1 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 17616
diff changeset
372 If equal to `takeprompt', we use the prompt as the buffer name to be
4851316697c1 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 17616
diff changeset
373 selected.")
17616
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
374
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
375 (defvar iswitchb-buffer-ignore-orig nil
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
376 "Stores original value of `iswitchb-buffer-ignore'.")
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
377
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
378 (defvar iswitchb-xemacs (string-match "XEmacs" (emacs-version))
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
379 "Non-nil if we are running XEmacs. Otherwise, assume we are running Emacs.")
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
380
21326
8150549598cc Many doc fixes.
Stephen Eglen <stephen@gnu.org>
parents: 21156
diff changeset
381 (defvar iswitchb-default nil
8150549598cc Many doc fixes.
Stephen Eglen <stephen@gnu.org>
parents: 21156
diff changeset
382 "Default buffer for iswitchb.")
17616
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
383
22380
2645c2c3829f (iswitchb-require-match, iswitchb-temp-buflist, iswitchb-bufs-in-frame):
Stephen Eglen <stephen@gnu.org>
parents: 22354
diff changeset
384 ;; The following variables are needed to keep the byte compiler quiet.
2645c2c3829f (iswitchb-require-match, iswitchb-temp-buflist, iswitchb-bufs-in-frame):
Stephen Eglen <stephen@gnu.org>
parents: 22354
diff changeset
385 (defvar iswitchb-require-match nil
2645c2c3829f (iswitchb-require-match, iswitchb-temp-buflist, iswitchb-bufs-in-frame):
Stephen Eglen <stephen@gnu.org>
parents: 22354
diff changeset
386 "Non-nil if matching buffer must be selected.")
2645c2c3829f (iswitchb-require-match, iswitchb-temp-buflist, iswitchb-bufs-in-frame):
Stephen Eglen <stephen@gnu.org>
parents: 22354
diff changeset
387
2645c2c3829f (iswitchb-require-match, iswitchb-temp-buflist, iswitchb-bufs-in-frame):
Stephen Eglen <stephen@gnu.org>
parents: 22354
diff changeset
388 (defvar iswitchb-temp-buflist nil
2645c2c3829f (iswitchb-require-match, iswitchb-temp-buflist, iswitchb-bufs-in-frame):
Stephen Eglen <stephen@gnu.org>
parents: 22354
diff changeset
389 "Stores a temporary version of the buffer list being created.")
2645c2c3829f (iswitchb-require-match, iswitchb-temp-buflist, iswitchb-bufs-in-frame):
Stephen Eglen <stephen@gnu.org>
parents: 22354
diff changeset
390
2645c2c3829f (iswitchb-require-match, iswitchb-temp-buflist, iswitchb-bufs-in-frame):
Stephen Eglen <stephen@gnu.org>
parents: 22354
diff changeset
391 (defvar iswitchb-bufs-in-frame nil
2645c2c3829f (iswitchb-require-match, iswitchb-temp-buflist, iswitchb-bufs-in-frame):
Stephen Eglen <stephen@gnu.org>
parents: 22354
diff changeset
392 "List of the buffers visible in the current frame.")
2645c2c3829f (iswitchb-require-match, iswitchb-temp-buflist, iswitchb-bufs-in-frame):
Stephen Eglen <stephen@gnu.org>
parents: 22354
diff changeset
393
17616
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
394 ;;; FUNCTIONS
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
395
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
396 ;;; ISWITCHB KEYMAP
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
397 (defun iswitchb-define-mode-map ()
17617
4851316697c1 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 17616
diff changeset
398 "Set up the keymap for `iswitchb-buffer'."
17616
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
399 (interactive)
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
400 (let (map)
20470
4d8e07123564 (iswitchb-completion-help): Multiple TAB presses
Karl Heuer <kwzh@gnu.org>
parents: 18929
diff changeset
401 ;; generated every time so that it can inherit new functions.
17616
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
402 ;;(or iswitchb-mode-map
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
403
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
404 (setq map (copy-keymap minibuffer-local-map))
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
405 (define-key map "?" 'iswitchb-completion-help)
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
406 (define-key map "\C-s" 'iswitchb-next-match)
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
407 (define-key map "\C-r" 'iswitchb-prev-match)
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
408 (define-key map "\t" 'iswitchb-complete)
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
409 (define-key map "\C-j" 'iswitchb-select-buffer-text)
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
410 (define-key map "\C-t" 'iswitchb-toggle-regexp)
18776
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
411 (define-key map "\C-x\C-f" 'iswitchb-find-file)
17616
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
412 ;;(define-key map "\C-a" 'iswitchb-toggle-ignore)
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
413 (define-key map "\C-c" 'iswitchb-toggle-case)
18776
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
414 (define-key map "\C-k" 'iswitchb-kill-buffer)
20470
4d8e07123564 (iswitchb-completion-help): Multiple TAB presses
Karl Heuer <kwzh@gnu.org>
parents: 18929
diff changeset
415 (define-key map "\C-m" 'iswitchb-exit-minibuffer)
17616
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
416 (setq iswitchb-mode-map map)
21706
a0c3ee34362d Only require cl if cadr and last are not defined (thanks to Dave Love.)
Stephen Eglen <stephen@gnu.org>
parents: 21326
diff changeset
417 (run-hooks 'iswitchb-define-mode-map-hook)))
17616
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
418
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
419 ;;; MAIN FUNCTION
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
420 (defun iswitchb ()
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
421 "Switch to buffer matching a substring.
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
422 As you type in a string, all of the buffers matching the string are
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
423 displayed. When you have found the buffer you want, it can then be
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
424 selected. As you type, most keys have their normal keybindings,
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
425 except for the following:
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
426 \\<iswitchb-mode-map>
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
427
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
428 RET Select the buffer at the front of the list of matches. If the
17617
4851316697c1 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 17616
diff changeset
429 list is empty, possibly prompt to create new buffer.
17616
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
430
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
431 \\[iswitchb-select-buffer-text] Select the current prompt as the buffer.
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
432 If no buffer is found, prompt for a new one.
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
433
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
434 \\[iswitchb-next-match] Put the first element at the end of the list.
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
435 \\[iswitchb-prev-match] Put the last element at the start of the list.
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
436 \\[iswitchb-complete] Complete a common suffix to the current string that
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
437 matches all buffers. If there is only one match, select that buffer.
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
438 If there is no common suffix, show a list of all matching buffers
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
439 in a separate window.
20470
4d8e07123564 (iswitchb-completion-help): Multiple TAB presses
Karl Heuer <kwzh@gnu.org>
parents: 18929
diff changeset
440 \\[iswitchb-toggle-regexp] Toggle regexp searching.
17616
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
441 \\[iswitchb-toggle-case] Toggle case-sensitive searching of buffer names.
18776
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
442 \\[iswitchb-completion-help] Show list of matching buffers in separate window.
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
443 \\[iswitchb-find-file] Exit iswitchb and drop into find-file.
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
444 \\[iswitchb-kill-buffer] Kill buffer at head of buffer list."
17616
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
445 ;;\\[iswitchb-toggle-ignore] Toggle ignoring certain buffers (see \
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
446 ;;`iswitchb-buffer-ignore')
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
447
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
448 (let
20470
4d8e07123564 (iswitchb-completion-help): Multiple TAB presses
Karl Heuer <kwzh@gnu.org>
parents: 18929
diff changeset
449 (prompt buf)
17616
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
450
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
451 (setq prompt (format "iswitch "))
20470
4d8e07123564 (iswitchb-completion-help): Multiple TAB presses
Karl Heuer <kwzh@gnu.org>
parents: 18929
diff changeset
452
4d8e07123564 (iswitchb-completion-help): Multiple TAB presses
Karl Heuer <kwzh@gnu.org>
parents: 18929
diff changeset
453 (setq buf (iswitchb-read-buffer prompt))
4d8e07123564 (iswitchb-completion-help): Multiple TAB presses
Karl Heuer <kwzh@gnu.org>
parents: 18929
diff changeset
454
17616
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
455 ;;(message "chosen text %s" iswitchb-final-text)
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
456 ;; Choose the buffer name: either the text typed in, or the head
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
457 ;; of the list of matches
18776
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
458
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
459 (cond ( (eq iswitchb-exit 'findfile)
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
460 (call-interactively 'find-file))
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
461
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
462 (t
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
463 ;; View the buffer
21058
f2c4ac206a48 (iswitchb-default-method): Remove :tag entries.
Stephen Eglen <stephen@gnu.org>
parents: 20470
diff changeset
464 ;;(message "go to buf %s" buf)
20470
4d8e07123564 (iswitchb-completion-help): Multiple TAB presses
Karl Heuer <kwzh@gnu.org>
parents: 18929
diff changeset
465 ;; Check buf is non-nil.
4d8e07123564 (iswitchb-completion-help): Multiple TAB presses
Karl Heuer <kwzh@gnu.org>
parents: 18929
diff changeset
466 (if buf
4d8e07123564 (iswitchb-completion-help): Multiple TAB presses
Karl Heuer <kwzh@gnu.org>
parents: 18929
diff changeset
467 (if (get-buffer buf)
18776
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
468 ;; buffer exists, so view it and then exit
20470
4d8e07123564 (iswitchb-completion-help): Multiple TAB presses
Karl Heuer <kwzh@gnu.org>
parents: 18929
diff changeset
469 (iswitchb-visit-buffer buf)
4d8e07123564 (iswitchb-completion-help): Multiple TAB presses
Karl Heuer <kwzh@gnu.org>
parents: 18929
diff changeset
470 ;; else buffer doesn't exist
4d8e07123564 (iswitchb-completion-help): Multiple TAB presses
Karl Heuer <kwzh@gnu.org>
parents: 18929
diff changeset
471 (iswitchb-possible-new-buffer buf)))
21706
a0c3ee34362d Only require cl if cadr and last are not defined (thanks to Dave Love.)
Stephen Eglen <stephen@gnu.org>
parents: 21326
diff changeset
472 ))))
20470
4d8e07123564 (iswitchb-completion-help): Multiple TAB presses
Karl Heuer <kwzh@gnu.org>
parents: 18929
diff changeset
473
22354
2319cdbf38e5 *** empty log message ***
Dan Nicolaescu <done@ece.arizona.edu>
parents: 22250
diff changeset
474 ;;;###autoload
20470
4d8e07123564 (iswitchb-completion-help): Multiple TAB presses
Karl Heuer <kwzh@gnu.org>
parents: 18929
diff changeset
475 (defun iswitchb-read-buffer (prompt &optional default require-match)
4d8e07123564 (iswitchb-completion-help): Multiple TAB presses
Karl Heuer <kwzh@gnu.org>
parents: 18929
diff changeset
476 "Replacement for the built-in `read-buffer'.
4d8e07123564 (iswitchb-completion-help): Multiple TAB presses
Karl Heuer <kwzh@gnu.org>
parents: 18929
diff changeset
477 Return the name of a buffer selected.
4d8e07123564 (iswitchb-completion-help): Multiple TAB presses
Karl Heuer <kwzh@gnu.org>
parents: 18929
diff changeset
478 PROMPT is the prompt to give to the user. DEFAULT if given is the default
4d8e07123564 (iswitchb-completion-help): Multiple TAB presses
Karl Heuer <kwzh@gnu.org>
parents: 18929
diff changeset
479 buffer to be selected, which will go to the front of the list.
4d8e07123564 (iswitchb-completion-help): Multiple TAB presses
Karl Heuer <kwzh@gnu.org>
parents: 18929
diff changeset
480 If REQUIRE-MATCH is non-nil, an existing-buffer must be selected."
4d8e07123564 (iswitchb-completion-help): Multiple TAB presses
Karl Heuer <kwzh@gnu.org>
parents: 18929
diff changeset
481 (let
4d8e07123564 (iswitchb-completion-help): Multiple TAB presses
Karl Heuer <kwzh@gnu.org>
parents: 18929
diff changeset
482 (
4d8e07123564 (iswitchb-completion-help): Multiple TAB presses
Karl Heuer <kwzh@gnu.org>
parents: 18929
diff changeset
483 buf-sel
4d8e07123564 (iswitchb-completion-help): Multiple TAB presses
Karl Heuer <kwzh@gnu.org>
parents: 18929
diff changeset
484 iswitchb-final-text
4d8e07123564 (iswitchb-completion-help): Multiple TAB presses
Karl Heuer <kwzh@gnu.org>
parents: 18929
diff changeset
485 (icomplete-mode nil) ;; prevent icomplete starting up
4d8e07123564 (iswitchb-completion-help): Multiple TAB presses
Karl Heuer <kwzh@gnu.org>
parents: 18929
diff changeset
486 ;; can only use fonts if they have been bound.
4d8e07123564 (iswitchb-completion-help): Multiple TAB presses
Karl Heuer <kwzh@gnu.org>
parents: 18929
diff changeset
487 (iswitchb-use-fonts (and iswitchb-use-fonts
4d8e07123564 (iswitchb-completion-help): Multiple TAB presses
Karl Heuer <kwzh@gnu.org>
parents: 18929
diff changeset
488 (boundp 'font-lock-comment-face)
4d8e07123564 (iswitchb-completion-help): Multiple TAB presses
Karl Heuer <kwzh@gnu.org>
parents: 18929
diff changeset
489 (boundp 'font-lock-function-name-face))))
4d8e07123564 (iswitchb-completion-help): Multiple TAB presses
Karl Heuer <kwzh@gnu.org>
parents: 18929
diff changeset
490
4d8e07123564 (iswitchb-completion-help): Multiple TAB presses
Karl Heuer <kwzh@gnu.org>
parents: 18929
diff changeset
491 (iswitchb-define-mode-map)
4d8e07123564 (iswitchb-completion-help): Multiple TAB presses
Karl Heuer <kwzh@gnu.org>
parents: 18929
diff changeset
492 (setq iswitchb-exit nil)
4d8e07123564 (iswitchb-completion-help): Multiple TAB presses
Karl Heuer <kwzh@gnu.org>
parents: 18929
diff changeset
493 (setq iswitchb-rescan t)
4d8e07123564 (iswitchb-completion-help): Multiple TAB presses
Karl Heuer <kwzh@gnu.org>
parents: 18929
diff changeset
494 (setq iswitchb-text "")
21326
8150549598cc Many doc fixes.
Stephen Eglen <stephen@gnu.org>
parents: 21156
diff changeset
495 (setq iswitchb-default
8150549598cc Many doc fixes.
Stephen Eglen <stephen@gnu.org>
parents: 21156
diff changeset
496 (if (bufferp default)
8150549598cc Many doc fixes.
Stephen Eglen <stephen@gnu.org>
parents: 21156
diff changeset
497 (buffer-name default)
8150549598cc Many doc fixes.
Stephen Eglen <stephen@gnu.org>
parents: 21156
diff changeset
498 default))
8150549598cc Many doc fixes.
Stephen Eglen <stephen@gnu.org>
parents: 21156
diff changeset
499 (iswitchb-make-buflist iswitchb-default)
20470
4d8e07123564 (iswitchb-completion-help): Multiple TAB presses
Karl Heuer <kwzh@gnu.org>
parents: 18929
diff changeset
500 (iswitchb-set-matches)
4d8e07123564 (iswitchb-completion-help): Multiple TAB presses
Karl Heuer <kwzh@gnu.org>
parents: 18929
diff changeset
501 (let
4d8e07123564 (iswitchb-completion-help): Multiple TAB presses
Karl Heuer <kwzh@gnu.org>
parents: 18929
diff changeset
502 ((minibuffer-local-completion-map iswitchb-mode-map)
4d8e07123564 (iswitchb-completion-help): Multiple TAB presses
Karl Heuer <kwzh@gnu.org>
parents: 18929
diff changeset
503 (iswitchb-prepost-hooks t)
21706
a0c3ee34362d Only require cl if cadr and last are not defined (thanks to Dave Love.)
Stephen Eglen <stephen@gnu.org>
parents: 21326
diff changeset
504 (iswitchb-require-match require-match))
20470
4d8e07123564 (iswitchb-completion-help): Multiple TAB presses
Karl Heuer <kwzh@gnu.org>
parents: 18929
diff changeset
505 ;; prompt the user for the buffer name
4d8e07123564 (iswitchb-completion-help): Multiple TAB presses
Karl Heuer <kwzh@gnu.org>
parents: 18929
diff changeset
506 (setq iswitchb-final-text (completing-read
4d8e07123564 (iswitchb-completion-help): Multiple TAB presses
Karl Heuer <kwzh@gnu.org>
parents: 18929
diff changeset
507 prompt ;the prompt
4d8e07123564 (iswitchb-completion-help): Multiple TAB presses
Karl Heuer <kwzh@gnu.org>
parents: 18929
diff changeset
508 '(("dummy".1)) ;table
4d8e07123564 (iswitchb-completion-help): Multiple TAB presses
Karl Heuer <kwzh@gnu.org>
parents: 18929
diff changeset
509 nil ;predicate
4d8e07123564 (iswitchb-completion-help): Multiple TAB presses
Karl Heuer <kwzh@gnu.org>
parents: 18929
diff changeset
510 nil ;require-match [handled elsewhere]
4d8e07123564 (iswitchb-completion-help): Multiple TAB presses
Karl Heuer <kwzh@gnu.org>
parents: 18929
diff changeset
511 nil ;initial-contents
4d8e07123564 (iswitchb-completion-help): Multiple TAB presses
Karl Heuer <kwzh@gnu.org>
parents: 18929
diff changeset
512 'iswitchb-history)))
4d8e07123564 (iswitchb-completion-help): Multiple TAB presses
Karl Heuer <kwzh@gnu.org>
parents: 18929
diff changeset
513 ;; Handling the require-match must be done in a better way.
4d8e07123564 (iswitchb-completion-help): Multiple TAB presses
Karl Heuer <kwzh@gnu.org>
parents: 18929
diff changeset
514 (if (and require-match (not (iswitchb-existing-buffer-p)))
4d8e07123564 (iswitchb-completion-help): Multiple TAB presses
Karl Heuer <kwzh@gnu.org>
parents: 18929
diff changeset
515 (error "must specify valid buffer"))
4d8e07123564 (iswitchb-completion-help): Multiple TAB presses
Karl Heuer <kwzh@gnu.org>
parents: 18929
diff changeset
516
4d8e07123564 (iswitchb-completion-help): Multiple TAB presses
Karl Heuer <kwzh@gnu.org>
parents: 18929
diff changeset
517 (if (or
4d8e07123564 (iswitchb-completion-help): Multiple TAB presses
Karl Heuer <kwzh@gnu.org>
parents: 18929
diff changeset
518 (eq iswitchb-exit 'takeprompt)
4d8e07123564 (iswitchb-completion-help): Multiple TAB presses
Karl Heuer <kwzh@gnu.org>
parents: 18929
diff changeset
519 (null iswitchb-matches))
4d8e07123564 (iswitchb-completion-help): Multiple TAB presses
Karl Heuer <kwzh@gnu.org>
parents: 18929
diff changeset
520 (setq buf-sel iswitchb-final-text)
4d8e07123564 (iswitchb-completion-help): Multiple TAB presses
Karl Heuer <kwzh@gnu.org>
parents: 18929
diff changeset
521 ;; else take head of list
4d8e07123564 (iswitchb-completion-help): Multiple TAB presses
Karl Heuer <kwzh@gnu.org>
parents: 18929
diff changeset
522 (setq buf-sel (car iswitchb-matches)))
4d8e07123564 (iswitchb-completion-help): Multiple TAB presses
Karl Heuer <kwzh@gnu.org>
parents: 18929
diff changeset
523
4d8e07123564 (iswitchb-completion-help): Multiple TAB presses
Karl Heuer <kwzh@gnu.org>
parents: 18929
diff changeset
524 ;; Or possibly choose the default buffer
4d8e07123564 (iswitchb-completion-help): Multiple TAB presses
Karl Heuer <kwzh@gnu.org>
parents: 18929
diff changeset
525 (if (equal iswitchb-final-text "")
4d8e07123564 (iswitchb-completion-help): Multiple TAB presses
Karl Heuer <kwzh@gnu.org>
parents: 18929
diff changeset
526 (setq buf-sel
4d8e07123564 (iswitchb-completion-help): Multiple TAB presses
Karl Heuer <kwzh@gnu.org>
parents: 18929
diff changeset
527 (car iswitchb-matches)))
4d8e07123564 (iswitchb-completion-help): Multiple TAB presses
Karl Heuer <kwzh@gnu.org>
parents: 18929
diff changeset
528
4d8e07123564 (iswitchb-completion-help): Multiple TAB presses
Karl Heuer <kwzh@gnu.org>
parents: 18929
diff changeset
529 buf-sel))
4d8e07123564 (iswitchb-completion-help): Multiple TAB presses
Karl Heuer <kwzh@gnu.org>
parents: 18929
diff changeset
530
4d8e07123564 (iswitchb-completion-help): Multiple TAB presses
Karl Heuer <kwzh@gnu.org>
parents: 18929
diff changeset
531 (defun iswitchb-existing-buffer-p ()
4d8e07123564 (iswitchb-completion-help): Multiple TAB presses
Karl Heuer <kwzh@gnu.org>
parents: 18929
diff changeset
532 "Return non-nil if there is a matching buffer."
4d8e07123564 (iswitchb-completion-help): Multiple TAB presses
Karl Heuer <kwzh@gnu.org>
parents: 18929
diff changeset
533 (not (null iswitchb-matches)))
4d8e07123564 (iswitchb-completion-help): Multiple TAB presses
Karl Heuer <kwzh@gnu.org>
parents: 18929
diff changeset
534
17616
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
535 ;;; COMPLETION CODE
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
536
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
537 (defun iswitchb-set-common-completion ()
17617
4851316697c1 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 17616
diff changeset
538 "Find common completion of `iswitchb-text' in `iswitchb-matches'.
4851316697c1 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 17616
diff changeset
539 The result is stored in `iswitchb-common-match-string'."
17616
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
540
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
541 (let* (val)
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
542 (setq iswitchb-common-match-string nil)
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
543 (if (and iswitchb-matches
21326
8150549598cc Many doc fixes.
Stephen Eglen <stephen@gnu.org>
parents: 21156
diff changeset
544 (not iswitchb-regexp) ;; testing
17616
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
545 (stringp iswitchb-text)
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
546 (> (length iswitchb-text) 0))
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
547 (if (setq val (iswitchb-find-common-substring
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
548 iswitchb-matches iswitchb-text))
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
549 (setq iswitchb-common-match-string val)))
21706
a0c3ee34362d Only require cl if cadr and last are not defined (thanks to Dave Love.)
Stephen Eglen <stephen@gnu.org>
parents: 21326
diff changeset
550 val))
17616
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
551
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
552 (defun iswitchb-complete ()
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
553 "Try and complete the current pattern amongst the buffer names."
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
554 (interactive)
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
555 (let (res)
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
556 (cond ((not iswitchb-matches)
21706
a0c3ee34362d Only require cl if cadr and last are not defined (thanks to Dave Love.)
Stephen Eglen <stephen@gnu.org>
parents: 21326
diff changeset
557 (iswitchb-completion-help))
17616
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
558
20470
4d8e07123564 (iswitchb-completion-help): Multiple TAB presses
Karl Heuer <kwzh@gnu.org>
parents: 18929
diff changeset
559 ((= 1 (length iswitchb-matches))
17616
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
560 ;; only one choice, so select it.
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
561 (exit-minibuffer))
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
562
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
563 (t
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
564 ;; else there could be some completions
21326
8150549598cc Many doc fixes.
Stephen Eglen <stephen@gnu.org>
parents: 21156
diff changeset
565 (setq res iswitchb-common-match-string)
17616
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
566 (if (and (not (memq res '(t nil)))
18776
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
567 (not (equal res iswitchb-text)))
20470
4d8e07123564 (iswitchb-completion-help): Multiple TAB presses
Karl Heuer <kwzh@gnu.org>
parents: 18929
diff changeset
568 ;; found something to complete, so put it in the minibuffer.
17616
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
569 (progn
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
570 (setq iswitchb-rescan nil)
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
571 (delete-region (point-min) (point))
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
572 (insert res))
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
573 ;; else nothing to complete
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
574 (iswitchb-completion-help)
21706
a0c3ee34362d Only require cl if cadr and last are not defined (thanks to Dave Love.)
Stephen Eglen <stephen@gnu.org>
parents: 21326
diff changeset
575 )))))
17616
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
576
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
577 ;;; TOGGLE FUNCTIONS
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
578
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
579 (defun iswitchb-toggle-case ()
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
580 "Toggle the value of `iswitchb-case'."
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
581 (interactive)
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
582 (setq iswitchb-case (not iswitchb-case))
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
583 ;; ask for list to be regenerated.
21706
a0c3ee34362d Only require cl if cadr and last are not defined (thanks to Dave Love.)
Stephen Eglen <stephen@gnu.org>
parents: 21326
diff changeset
584 (setq iswitchb-rescan t))
17616
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
585
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
586 (defun iswitchb-toggle-regexp ()
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
587 "Toggle the value of `iswitchb-regexp'."
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
588 (interactive)
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
589 (setq iswitchb-regexp (not iswitchb-regexp))
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
590 ;; ask for list to be regenerated.
21706
a0c3ee34362d Only require cl if cadr and last are not defined (thanks to Dave Love.)
Stephen Eglen <stephen@gnu.org>
parents: 21326
diff changeset
591 (setq iswitchb-rescan t))
17616
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
592
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
593 (defun iswitchb-toggle-ignore ()
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
594 "Toggle ignoring buffers specified with `iswitchb-buffer-ignore'."
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
595 (interactive)
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
596 (if iswitchb-buffer-ignore
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
597 (progn
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
598 (setq iswitchb-buffer-ignore-orig iswitchb-buffer-ignore)
21706
a0c3ee34362d Only require cl if cadr and last are not defined (thanks to Dave Love.)
Stephen Eglen <stephen@gnu.org>
parents: 21326
diff changeset
599 (setq iswitchb-buffer-ignore nil))
17616
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
600 ;; else
21706
a0c3ee34362d Only require cl if cadr and last are not defined (thanks to Dave Love.)
Stephen Eglen <stephen@gnu.org>
parents: 21326
diff changeset
601 (setq iswitchb-buffer-ignore iswitchb-buffer-ignore-orig))
21326
8150549598cc Many doc fixes.
Stephen Eglen <stephen@gnu.org>
parents: 21156
diff changeset
602 (iswitchb-make-buflist iswitchb-default)
17616
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
603 ;; ask for list to be regenerated.
21706
a0c3ee34362d Only require cl if cadr and last are not defined (thanks to Dave Love.)
Stephen Eglen <stephen@gnu.org>
parents: 21326
diff changeset
604 (setq iswitchb-rescan t))
17616
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
605
20470
4d8e07123564 (iswitchb-completion-help): Multiple TAB presses
Karl Heuer <kwzh@gnu.org>
parents: 18929
diff changeset
606 (defun iswitchb-exit-minibuffer ()
4d8e07123564 (iswitchb-completion-help): Multiple TAB presses
Karl Heuer <kwzh@gnu.org>
parents: 18929
diff changeset
607 "Exit minibuffer, but make sure we have a match if one is needed."
4d8e07123564 (iswitchb-completion-help): Multiple TAB presses
Karl Heuer <kwzh@gnu.org>
parents: 18929
diff changeset
608 (interactive)
4d8e07123564 (iswitchb-completion-help): Multiple TAB presses
Karl Heuer <kwzh@gnu.org>
parents: 18929
diff changeset
609 (if (or (not iswitchb-require-match)
4d8e07123564 (iswitchb-completion-help): Multiple TAB presses
Karl Heuer <kwzh@gnu.org>
parents: 18929
diff changeset
610 (iswitchb-existing-buffer-p))
21706
a0c3ee34362d Only require cl if cadr and last are not defined (thanks to Dave Love.)
Stephen Eglen <stephen@gnu.org>
parents: 21326
diff changeset
611 (throw 'exit nil)))
17616
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
612
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
613 (defun iswitchb-select-buffer-text ()
17617
4851316697c1 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 17616
diff changeset
614 "Select the buffer named by the prompt.
4851316697c1 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 17616
diff changeset
615 If no buffer exactly matching the prompt exists, maybe create a new one."
17616
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
616 (interactive)
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
617 (setq iswitchb-exit 'takeprompt)
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
618 (exit-minibuffer))
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
619
18776
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
620 (defun iswitchb-find-file ()
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
621 "Drop into find-file from buffer switching."
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
622 (interactive)
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
623 (setq iswitchb-exit 'findfile)
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
624 (exit-minibuffer))
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
625
17616
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
626 (defun iswitchb-next-match ()
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
627 "Put first element of `iswitchb-matches' at the end of the list."
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
628 (interactive)
18776
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
629 (let ((next (cadr iswitchb-matches)))
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
630 (setq iswitchb-buflist (iswitchb-chop iswitchb-buflist next))
21706
a0c3ee34362d Only require cl if cadr and last are not defined (thanks to Dave Love.)
Stephen Eglen <stephen@gnu.org>
parents: 21326
diff changeset
631 (setq iswitchb-rescan t)))
17616
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
632
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
633 (defun iswitchb-prev-match ()
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
634 "Put last element of `iswitchb-matches' at the front of the list."
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
635 (interactive)
18776
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
636 (let ((prev (car (last iswitchb-matches))))
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
637 (setq iswitchb-buflist (iswitchb-chop iswitchb-buflist prev))
21706
a0c3ee34362d Only require cl if cadr and last are not defined (thanks to Dave Love.)
Stephen Eglen <stephen@gnu.org>
parents: 21326
diff changeset
638 (setq iswitchb-rescan t)))
18776
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
639
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
640 (defun iswitchb-chop (list elem)
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
641 "Remove all elements before ELEM and put them at the end of LIST."
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
642 (let ((ret nil)
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
643 (next nil)
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
644 (sofar nil))
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
645 (while (not ret)
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
646 (setq next (car list))
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
647 (if (equal next elem)
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
648 (setq ret (append list (nreverse sofar)))
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
649 ;; else
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
650 (progn
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
651 (setq list (cdr list))
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
652 (setq sofar (cons next sofar)))))
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
653 ret))
17616
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
654
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
655 ;;; CREATE LIST OF ALL CURRENT BUFFERS
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
656
20470
4d8e07123564 (iswitchb-completion-help): Multiple TAB presses
Karl Heuer <kwzh@gnu.org>
parents: 18929
diff changeset
657 (defun iswitchb-make-buflist (default)
17617
4851316697c1 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 17616
diff changeset
658 "Set `iswitchb-buflist' to the current list of buffers.
18776
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
659 Currently visible buffers are put at the end of the list.
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
660 The hook `iswitchb-make-buflist-hook' is run after the list has been
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
661 created to allow the user to further modify the order of the buffer names
20470
4d8e07123564 (iswitchb-completion-help): Multiple TAB presses
Karl Heuer <kwzh@gnu.org>
parents: 18929
diff changeset
662 in this list. If DEFAULT is non-nil, and corresponds to an existing buffer,
4d8e07123564 (iswitchb-completion-help): Multiple TAB presses
Karl Heuer <kwzh@gnu.org>
parents: 18929
diff changeset
663 it is put to the start of the list."
17616
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
664 (setq iswitchb-buflist
18776
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
665 (let* ((iswitchb-current-buffers (iswitchb-get-buffers-in-frames))
22380
2645c2c3829f (iswitchb-require-match, iswitchb-temp-buflist, iswitchb-bufs-in-frame):
Stephen Eglen <stephen@gnu.org>
parents: 22354
diff changeset
666 (iswitchb-temp-buflist
18776
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
667 (delq nil
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
668 (mapcar
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
669 (lambda (x)
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
670 (let ((b-name (buffer-name x)))
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
671 (if (not
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
672 (or
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
673 (iswitchb-ignore-buffername-p b-name)
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
674 (memq b-name iswitchb-current-buffers)))
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
675 b-name)))
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
676 (buffer-list)))))
22380
2645c2c3829f (iswitchb-require-match, iswitchb-temp-buflist, iswitchb-bufs-in-frame):
Stephen Eglen <stephen@gnu.org>
parents: 22354
diff changeset
677 (nconc iswitchb-temp-buflist iswitchb-current-buffers)
17616
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
678 (run-hooks 'iswitchb-make-buflist-hook)
20470
4d8e07123564 (iswitchb-completion-help): Multiple TAB presses
Karl Heuer <kwzh@gnu.org>
parents: 18929
diff changeset
679 ;; Should this be after the hooks, or should the hooks be the
4d8e07123564 (iswitchb-completion-help): Multiple TAB presses
Karl Heuer <kwzh@gnu.org>
parents: 18929
diff changeset
680 ;; final thing to be run?
4d8e07123564 (iswitchb-completion-help): Multiple TAB presses
Karl Heuer <kwzh@gnu.org>
parents: 18929
diff changeset
681 (if default
4d8e07123564 (iswitchb-completion-help): Multiple TAB presses
Karl Heuer <kwzh@gnu.org>
parents: 18929
diff changeset
682 (progn
22380
2645c2c3829f (iswitchb-require-match, iswitchb-temp-buflist, iswitchb-bufs-in-frame):
Stephen Eglen <stephen@gnu.org>
parents: 22354
diff changeset
683 (setq iswitchb-temp-buflist
2645c2c3829f (iswitchb-require-match, iswitchb-temp-buflist, iswitchb-bufs-in-frame):
Stephen Eglen <stephen@gnu.org>
parents: 22354
diff changeset
684 (delete default iswitchb-temp-buflist))
2645c2c3829f (iswitchb-require-match, iswitchb-temp-buflist, iswitchb-bufs-in-frame):
Stephen Eglen <stephen@gnu.org>
parents: 22354
diff changeset
685 (setq iswitchb-temp-buflist
2645c2c3829f (iswitchb-require-match, iswitchb-temp-buflist, iswitchb-bufs-in-frame):
Stephen Eglen <stephen@gnu.org>
parents: 22354
diff changeset
686 (cons default iswitchb-temp-buflist))))
2645c2c3829f (iswitchb-require-match, iswitchb-temp-buflist, iswitchb-bufs-in-frame):
Stephen Eglen <stephen@gnu.org>
parents: 22354
diff changeset
687 iswitchb-temp-buflist)))
17616
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
688
18776
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
689 (defun iswitchb-to-end (lst)
22380
2645c2c3829f (iswitchb-require-match, iswitchb-temp-buflist, iswitchb-bufs-in-frame):
Stephen Eglen <stephen@gnu.org>
parents: 22354
diff changeset
690 "Move the elements from LST to the end of `iswitchb-temp-buflist'."
18776
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
691 (mapcar
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
692 (lambda (elem)
22380
2645c2c3829f (iswitchb-require-match, iswitchb-temp-buflist, iswitchb-bufs-in-frame):
Stephen Eglen <stephen@gnu.org>
parents: 22354
diff changeset
693 (setq iswitchb-temp-buflist (delq elem iswitchb-temp-buflist)))
18776
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
694 lst)
22380
2645c2c3829f (iswitchb-require-match, iswitchb-temp-buflist, iswitchb-bufs-in-frame):
Stephen Eglen <stephen@gnu.org>
parents: 22354
diff changeset
695 (nconc iswitchb-temp-buflist lst))
17616
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
696
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
697 (defun iswitchb-get-buffers-in-frames (&optional current)
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
698 "Return the list of buffers that are visible in the current frame.
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
699 If optional argument `current' is given, restrict searching to the
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
700 current frame, rather than all frames, regardless of value of
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
701 `iswitchb-all-frames'."
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
702 (let ((iswitchb-bufs-in-frame nil))
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
703 (walk-windows 'iswitchb-get-bufname nil
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
704 (if current
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
705 nil
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
706 iswitchb-all-frames))
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
707 iswitchb-bufs-in-frame))
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
708
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
709 (defun iswitchb-get-bufname (win)
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
710 "Used by `iswitchb-get-buffers-in-frames' to walk through all windows."
18928
fff55212f6a7 (iswitchb-get-bufname): Only add buffer of current
Richard M. Stallman <rms@gnu.org>
parents: 18776
diff changeset
711 (let ((buf (buffer-name (window-buffer win))))
fff55212f6a7 (iswitchb-get-bufname): Only add buffer of current
Richard M. Stallman <rms@gnu.org>
parents: 18776
diff changeset
712 (if (not (member buf iswitchb-bufs-in-frame))
fff55212f6a7 (iswitchb-get-bufname): Only add buffer of current
Richard M. Stallman <rms@gnu.org>
parents: 18776
diff changeset
713 ;; Only add buf if it is not already in list.
fff55212f6a7 (iswitchb-get-bufname): Only add buffer of current
Richard M. Stallman <rms@gnu.org>
parents: 18776
diff changeset
714 ;; This prevents same buf in two different windows being
fff55212f6a7 (iswitchb-get-bufname): Only add buffer of current
Richard M. Stallman <rms@gnu.org>
parents: 18776
diff changeset
715 ;; put into the list twice.
fff55212f6a7 (iswitchb-get-bufname): Only add buffer of current
Richard M. Stallman <rms@gnu.org>
parents: 18776
diff changeset
716 (setq iswitchb-bufs-in-frame
fff55212f6a7 (iswitchb-get-bufname): Only add buffer of current
Richard M. Stallman <rms@gnu.org>
parents: 18776
diff changeset
717 (cons buf iswitchb-bufs-in-frame)))))
17616
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
718
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
719 ;;; FIND MATCHING BUFFERS
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
720
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
721 (defun iswitchb-set-matches ()
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
722 "Set `iswitchb-matches' to the list of buffers matching prompt."
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
723 (if iswitchb-rescan
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
724 (setq iswitchb-matches
21706
a0c3ee34362d Only require cl if cadr and last are not defined (thanks to Dave Love.)
Stephen Eglen <stephen@gnu.org>
parents: 21326
diff changeset
725 (let* ((buflist iswitchb-buflist))
18776
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
726 (iswitchb-get-matched-buffers iswitchb-text iswitchb-regexp
21326
8150549598cc Many doc fixes.
Stephen Eglen <stephen@gnu.org>
parents: 21156
diff changeset
727 buflist)))))
17616
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
728
18776
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
729 (defun iswitchb-get-matched-buffers (regexp
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
730 &optional string-format buffer-list)
21326
8150549598cc Many doc fixes.
Stephen Eglen <stephen@gnu.org>
parents: 21156
diff changeset
731 "Return buffers matching REGEXP.
8150549598cc Many doc fixes.
Stephen Eglen <stephen@gnu.org>
parents: 21156
diff changeset
732 If STRING-FORMAT is nil, consider REGEXP as just a string.
17617
4851316697c1 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 17616
diff changeset
733 BUFFER-LIST can be list of buffers or list of strings."
17616
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
734 (let* ((case-fold-search iswitchb-case)
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
735 ;; need reverse since we are building up list backwards
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
736 (list (reverse buffer-list))
21326
8150549598cc Many doc fixes.
Stephen Eglen <stephen@gnu.org>
parents: 21156
diff changeset
737 (do-string (stringp (car list)))
17616
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
738 name
21706
a0c3ee34362d Only require cl if cadr and last are not defined (thanks to Dave Love.)
Stephen Eglen <stephen@gnu.org>
parents: 21326
diff changeset
739 ret)
17616
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
740 (mapcar
18776
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
741 (lambda (x)
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
742
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
743 (if do-string
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
744 (setq name x) ;We already have the name
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
745 (setq name (buffer-name x)))
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
746
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
747 (cond
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
748 ((and (or (and string-format (string-match regexp name))
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
749 (and (null string-format)
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
750 (string-match (regexp-quote regexp) name)))
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
751
21706
a0c3ee34362d Only require cl if cadr and last are not defined (thanks to Dave Love.)
Stephen Eglen <stephen@gnu.org>
parents: 21326
diff changeset
752 (not (iswitchb-ignore-buffername-p name)))
18776
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
753 (setq ret (cons name ret))
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
754 )))
17616
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
755 list)
21706
a0c3ee34362d Only require cl if cadr and last are not defined (thanks to Dave Love.)
Stephen Eglen <stephen@gnu.org>
parents: 21326
diff changeset
756 ret))
17616
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
757
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
758 (defun iswitchb-ignore-buffername-p (bufname)
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
759 "Return t if the buffer BUFNAME should be ignored."
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
760 (let ((data (match-data))
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
761 (re-list iswitchb-buffer-ignore)
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
762 ignorep
21706
a0c3ee34362d Only require cl if cadr and last are not defined (thanks to Dave Love.)
Stephen Eglen <stephen@gnu.org>
parents: 21326
diff changeset
763 nextstr)
17616
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
764 (while re-list
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
765 (setq nextstr (car re-list))
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
766 (cond
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
767 ((stringp nextstr)
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
768 (if (string-match nextstr bufname)
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
769 (progn
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
770 (setq ignorep t)
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
771 (setq re-list nil))))
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
772 ((fboundp nextstr)
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
773 (if (funcall nextstr bufname)
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
774 (progn
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
775 (setq ignorep t)
21706
a0c3ee34362d Only require cl if cadr and last are not defined (thanks to Dave Love.)
Stephen Eglen <stephen@gnu.org>
parents: 21326
diff changeset
776 (setq re-list nil)))))
17616
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
777 (setq re-list (cdr re-list)))
21156
cbdbd307fdb7 (iswitchb-ignore-buffername-p): store-match-data => set-match-data.
Richard M. Stallman <rms@gnu.org>
parents: 21058
diff changeset
778 (set-match-data data)
17616
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
779
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
780 ;; return the result
21706
a0c3ee34362d Only require cl if cadr and last are not defined (thanks to Dave Love.)
Stephen Eglen <stephen@gnu.org>
parents: 21326
diff changeset
781 ignorep))
17616
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
782
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
783 (defun iswitchb-word-matching-substring (word)
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
784 "Return part of WORD before 1st match to `iswitchb-change-word-sub'.
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
785 If `iswitchb-change-word-sub' cannot be found in WORD, return nil."
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
786 (let ((case-fold-search iswitchb-case))
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
787 (let ((m (string-match iswitchb-change-word-sub word)))
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
788 (if m
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
789 (substring word m)
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
790 ;; else no match
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
791 nil))))
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
792
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
793 (defun iswitchb-find-common-substring (lis subs)
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
794 "Return common string following SUBS in each element of LIS."
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
795 (let (res
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
796 alist
21706
a0c3ee34362d Only require cl if cadr and last are not defined (thanks to Dave Love.)
Stephen Eglen <stephen@gnu.org>
parents: 21326
diff changeset
797 iswitchb-change-word-sub)
17616
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
798 (setq iswitchb-change-word-sub
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
799 (if iswitchb-regexp
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
800 subs
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
801 (regexp-quote subs)))
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
802 (setq res (mapcar 'iswitchb-word-matching-substring lis))
20470
4d8e07123564 (iswitchb-completion-help): Multiple TAB presses
Karl Heuer <kwzh@gnu.org>
parents: 18929
diff changeset
803 (setq res (delq nil res)) ;; remove any nil elements (shouldn't happen)
17616
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
804 (setq alist (mapcar 'iswitchb-makealist res)) ;; could use an OBARRAY
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
805
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
806 ;; try-completion returns t if there is an exact match.
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
807 (let ((completion-ignore-case iswitchb-case))
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
808
21706
a0c3ee34362d Only require cl if cadr and last are not defined (thanks to Dave Love.)
Stephen Eglen <stephen@gnu.org>
parents: 21326
diff changeset
809 (try-completion subs alist))))
17616
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
810
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
811 (defun iswitchb-makealist (res)
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
812 "Return dotted pair (RES . 1)."
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
813 (cons res 1))
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
814
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
815 ;; from Wayne Mesard <wmesard@esd.sgi.com>
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
816 (defun iswitchb-rotate-list (lis)
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
817 "Destructively removes the last element from LIS.
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
818 Return the modified list with the last element prepended to it."
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
819 (if (<= (length lis) 1)
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
820 lis
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
821 (let ((las lis)
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
822 (prev lis))
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
823 (while (consp (cdr las))
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
824 (setq prev las
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
825 las (cdr las)))
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
826 (setcdr prev nil)
21706
a0c3ee34362d Only require cl if cadr and last are not defined (thanks to Dave Love.)
Stephen Eglen <stephen@gnu.org>
parents: 21326
diff changeset
827 (cons (car las) lis))))
17616
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
828
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
829 (defun iswitchb-completion-help ()
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
830 "Show possible completions in a *Buffer Completions* buffer."
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
831 ;; we could allow this buffer to be used to select match, but I think
18776
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
832 ;; choose-completion-string will need redefining, so it just inserts
17616
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
833 ;; choice with out any previous input.
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
834 (interactive)
18776
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
835 (setq iswitchb-rescan nil)
17616
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
836 (let ((completion-setup-hook nil) ;disable fancy highlight/selection.
20470
4d8e07123564 (iswitchb-completion-help): Multiple TAB presses
Karl Heuer <kwzh@gnu.org>
parents: 18929
diff changeset
837 (buf (current-buffer))
4d8e07123564 (iswitchb-completion-help): Multiple TAB presses
Karl Heuer <kwzh@gnu.org>
parents: 18929
diff changeset
838 (temp-buf "*Buffer Completions*")
4d8e07123564 (iswitchb-completion-help): Multiple TAB presses
Karl Heuer <kwzh@gnu.org>
parents: 18929
diff changeset
839 (win)
4d8e07123564 (iswitchb-completion-help): Multiple TAB presses
Karl Heuer <kwzh@gnu.org>
parents: 18929
diff changeset
840 (again (eq last-command this-command)))
4d8e07123564 (iswitchb-completion-help): Multiple TAB presses
Karl Heuer <kwzh@gnu.org>
parents: 18929
diff changeset
841
4d8e07123564 (iswitchb-completion-help): Multiple TAB presses
Karl Heuer <kwzh@gnu.org>
parents: 18929
diff changeset
842 (if again
4d8e07123564 (iswitchb-completion-help): Multiple TAB presses
Karl Heuer <kwzh@gnu.org>
parents: 18929
diff changeset
843 ;; scroll buffer
4d8e07123564 (iswitchb-completion-help): Multiple TAB presses
Karl Heuer <kwzh@gnu.org>
parents: 18929
diff changeset
844 (progn
4d8e07123564 (iswitchb-completion-help): Multiple TAB presses
Karl Heuer <kwzh@gnu.org>
parents: 18929
diff changeset
845 (set-buffer temp-buf)
4d8e07123564 (iswitchb-completion-help): Multiple TAB presses
Karl Heuer <kwzh@gnu.org>
parents: 18929
diff changeset
846 (setq win (get-buffer-window temp-buf))
4d8e07123564 (iswitchb-completion-help): Multiple TAB presses
Karl Heuer <kwzh@gnu.org>
parents: 18929
diff changeset
847 (if (pos-visible-in-window-p (point-max) win)
4d8e07123564 (iswitchb-completion-help): Multiple TAB presses
Karl Heuer <kwzh@gnu.org>
parents: 18929
diff changeset
848 (set-window-start win (point-min))
4d8e07123564 (iswitchb-completion-help): Multiple TAB presses
Karl Heuer <kwzh@gnu.org>
parents: 18929
diff changeset
849 (scroll-other-window))
21706
a0c3ee34362d Only require cl if cadr and last are not defined (thanks to Dave Love.)
Stephen Eglen <stephen@gnu.org>
parents: 21326
diff changeset
850 (set-buffer buf))
20470
4d8e07123564 (iswitchb-completion-help): Multiple TAB presses
Karl Heuer <kwzh@gnu.org>
parents: 18929
diff changeset
851
4d8e07123564 (iswitchb-completion-help): Multiple TAB presses
Karl Heuer <kwzh@gnu.org>
parents: 18929
diff changeset
852 (with-output-to-temp-buffer temp-buf
4d8e07123564 (iswitchb-completion-help): Multiple TAB presses
Karl Heuer <kwzh@gnu.org>
parents: 18929
diff changeset
853 (if iswitchb-xemacs
4d8e07123564 (iswitchb-completion-help): Multiple TAB presses
Karl Heuer <kwzh@gnu.org>
parents: 18929
diff changeset
854
4d8e07123564 (iswitchb-completion-help): Multiple TAB presses
Karl Heuer <kwzh@gnu.org>
parents: 18929
diff changeset
855 ;; XEmacs extents are put on by default, doesn't seem to be
4d8e07123564 (iswitchb-completion-help): Multiple TAB presses
Karl Heuer <kwzh@gnu.org>
parents: 18929
diff changeset
856 ;; any way of switching them off.
4d8e07123564 (iswitchb-completion-help): Multiple TAB presses
Karl Heuer <kwzh@gnu.org>
parents: 18929
diff changeset
857 (display-completion-list (if iswitchb-matches
4d8e07123564 (iswitchb-completion-help): Multiple TAB presses
Karl Heuer <kwzh@gnu.org>
parents: 18929
diff changeset
858 iswitchb-matches
4d8e07123564 (iswitchb-completion-help): Multiple TAB presses
Karl Heuer <kwzh@gnu.org>
parents: 18929
diff changeset
859 iswitchb-buflist)
4d8e07123564 (iswitchb-completion-help): Multiple TAB presses
Karl Heuer <kwzh@gnu.org>
parents: 18929
diff changeset
860 :help-string "iswitchb "
17616
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
861 :activate-callback
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
862 '(lambda (x y z)
20470
4d8e07123564 (iswitchb-completion-help): Multiple TAB presses
Karl Heuer <kwzh@gnu.org>
parents: 18929
diff changeset
863 (message "doesn't work yet, sorry!")))
4d8e07123564 (iswitchb-completion-help): Multiple TAB presses
Karl Heuer <kwzh@gnu.org>
parents: 18929
diff changeset
864 ;; else running Emacs
4d8e07123564 (iswitchb-completion-help): Multiple TAB presses
Karl Heuer <kwzh@gnu.org>
parents: 18929
diff changeset
865 (display-completion-list (if iswitchb-matches
17616
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
866 iswitchb-matches
20470
4d8e07123564 (iswitchb-completion-help): Multiple TAB presses
Karl Heuer <kwzh@gnu.org>
parents: 18929
diff changeset
867 iswitchb-buflist))
4d8e07123564 (iswitchb-completion-help): Multiple TAB presses
Karl Heuer <kwzh@gnu.org>
parents: 18929
diff changeset
868 )))))
4d8e07123564 (iswitchb-completion-help): Multiple TAB presses
Karl Heuer <kwzh@gnu.org>
parents: 18929
diff changeset
869
18776
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
870 ;;; KILL CURRENT BUFFER
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
871
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
872 (defun iswitchb-kill-buffer ()
20470
4d8e07123564 (iswitchb-completion-help): Multiple TAB presses
Karl Heuer <kwzh@gnu.org>
parents: 18929
diff changeset
873 "Kill the buffer at the head of `iswitchb-matches'."
18776
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
874 (interactive)
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
875 (let ( (enable-recursive-minibuffers t)
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
876 buf)
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
877
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
878 (setq buf (car iswitchb-matches))
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
879 ;; check to see if buf is non-nil.
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
880 (if buf
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
881 (progn
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
882 (kill-buffer buf)
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
883
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
884 ;; Check if buffer exists. XEmacs gnuserv.el makes alias
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
885 ;; for kill-buffer which does not return t if buffer is
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
886 ;; killed, so we can't rely on kill-buffer return value.
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
887 (if (get-buffer buf)
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
888 ;; buffer couldn't be killed.
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
889 (setq iswitchb-rescan t)
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
890 ;; else buffer was killed so remove name from list.
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
891 (setq iswitchb-buflist (delq buf iswitchb-buflist)))))))
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
892
17616
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
893 ;;; VISIT CHOSEN BUFFER
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
894 (defun iswitchb-visit-buffer (buffer)
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
895 "Visit buffer named BUFFER according to `iswitchb-method'."
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
896 (let* (win newframe)
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
897 (cond
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
898 ((eq iswitchb-method 'samewindow)
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
899 (switch-to-buffer buffer))
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
900
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
901 ((memq iswitchb-method '(always-frame maybe-frame))
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
902 (cond
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
903 ((and (setq win (iswitchb-window-buffer-p buffer))
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
904 (or (eq iswitchb-method 'always-frame)
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
905 (y-or-n-p "Jump to frame? ")))
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
906 (setq newframe (window-frame win))
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
907 (raise-frame newframe)
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
908 (select-frame newframe)
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
909 (select-window win)
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
910 (if (not iswitchb-xemacs)
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
911 ;; reposition mouse to make frame active. not needed in XEmacs
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
912 ;; This line came from the other-frame defun in Emacs.
21706
a0c3ee34362d Only require cl if cadr and last are not defined (thanks to Dave Love.)
Stephen Eglen <stephen@gnu.org>
parents: 21326
diff changeset
913 (set-mouse-position (selected-frame) (1- (frame-width)) 0)))
17616
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
914 (t
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
915 ;; No buffer in other frames...
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
916 (switch-to-buffer buffer)
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
917 )))
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
918
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
919 ((eq iswitchb-method 'otherwindow)
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
920 (switch-to-buffer-other-window buffer))
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
921
17618
8d33666b1152 (iswitchb-visit-buffer): Handle `display' alternative.
Richard M. Stallman <rms@gnu.org>
parents: 17617
diff changeset
922 ((eq iswitchb-method 'display)
8d33666b1152 (iswitchb-visit-buffer): Handle `display' alternative.
Richard M. Stallman <rms@gnu.org>
parents: 17617
diff changeset
923 (display-buffer buffer))
8d33666b1152 (iswitchb-visit-buffer): Handle `display' alternative.
Richard M. Stallman <rms@gnu.org>
parents: 17617
diff changeset
924
17616
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
925 ((eq iswitchb-method 'otherframe)
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
926 (progn
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
927 (switch-to-buffer-other-frame buffer)
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
928 (if (not iswitchb-xemacs)
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
929 (set-mouse-position (selected-frame) (1- (frame-width)) 0))
21706
a0c3ee34362d Only require cl if cadr and last are not defined (thanks to Dave Love.)
Stephen Eglen <stephen@gnu.org>
parents: 21326
diff changeset
930 )))))
17616
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
931
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
932 (defun iswitchb-possible-new-buffer (buf)
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
933 "Possibly create and visit a new buffer called BUF."
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
934
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
935 (let ((newbufcreated))
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
936 (if (and iswitchb-newbuffer
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
937 (or
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
938 (not iswitchb-prompt-newbuffer)
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
939
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
940 (and iswitchb-prompt-newbuffer
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
941 (y-or-n-p
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
942 (format
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
943 "No buffer matching `%s', create one? "
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
944 buf)))))
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
945 ;; then create a new buffer
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
946 (progn
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
947 (setq newbufcreated (get-buffer-create buf))
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
948 (if (fboundp 'set-buffer-major-mode)
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
949 (set-buffer-major-mode newbufcreated))
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
950 (iswitchb-visit-buffer newbufcreated))
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
951 ;; else wont create new buffer
21706
a0c3ee34362d Only require cl if cadr and last are not defined (thanks to Dave Love.)
Stephen Eglen <stephen@gnu.org>
parents: 21326
diff changeset
952 (message (format "no buffer matching `%s'" buf)))))
17616
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
953
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
954 (defun iswitchb-window-buffer-p (buffer)
17617
4851316697c1 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 17616
diff changeset
955 "Return window pointer if BUFFER is visible in another frame.
4851316697c1 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 17616
diff changeset
956 If BUFFER is visible in the current frame, return nil."
17616
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
957 (interactive)
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
958 (let ((blist (iswitchb-get-buffers-in-frames 'current)))
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
959 ;;If the buffer is visible in current frame, return nil
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
960 (if (memq buffer blist)
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
961 nil
20470
4d8e07123564 (iswitchb-completion-help): Multiple TAB presses
Karl Heuer <kwzh@gnu.org>
parents: 18929
diff changeset
962 ;; maybe in other frame or icon
4d8e07123564 (iswitchb-completion-help): Multiple TAB presses
Karl Heuer <kwzh@gnu.org>
parents: 18929
diff changeset
963 (get-buffer-window buffer 0) ; better than 'visible
17616
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
964 )))
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
965
17617
4851316697c1 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 17616
diff changeset
966 ;;;###autoload
17616
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
967 (defun iswitchb-default-keybindings ()
17617
4851316697c1 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 17616
diff changeset
968 "Set up default keybindings for `iswitchb-buffer'.
17616
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
969 Call this function to override the normal bindings."
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
970 (interactive)
18776
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
971 (global-set-key (read-kbd-macro "C-x b") 'iswitchb-buffer)
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
972 (global-set-key (read-kbd-macro "C-x 4 b") 'iswitchb-buffer-other-window)
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
973 (global-set-key (read-kbd-macro "C-x 4 C-o") 'iswitchb-display-buffer)
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
974 (global-set-key (read-kbd-macro "C-x 5 b") 'iswitchb-buffer-other-frame))
17616
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
975
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
976 ;;;###autoload
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
977 (defun iswitchb-buffer ()
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
978 "Switch to another buffer.
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
979
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
980 The buffer name is selected interactively by typing a substring. The
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
981 buffer is displayed according to `iswitchb-default-method' -- the
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
982 default is to show it in the same window, unless it is already visible
17617
4851316697c1 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 17616
diff changeset
983 in another frame.
4851316697c1 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 17616
diff changeset
984 For details of keybindings, do `\\[describe-function] iswitchb'."
17616
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
985 (interactive)
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
986 (setq iswitchb-method iswitchb-default-method)
20470
4d8e07123564 (iswitchb-completion-help): Multiple TAB presses
Karl Heuer <kwzh@gnu.org>
parents: 18929
diff changeset
987 (iswitchb))
17616
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
988
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
989 ;;;###autoload
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
990 (defun iswitchb-buffer-other-window ()
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
991 "Switch to another buffer and show it in another window.
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
992 The buffer name is selected interactively by typing a substring.
17617
4851316697c1 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 17616
diff changeset
993 For details of keybindings, do `\\[describe-function] iswitchb'."
17616
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
994 (interactive)
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
995 (setq iswitchb-method 'otherwindow)
20470
4d8e07123564 (iswitchb-completion-help): Multiple TAB presses
Karl Heuer <kwzh@gnu.org>
parents: 18929
diff changeset
996 (iswitchb))
17616
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
997
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
998 ;;;###autoload
17618
8d33666b1152 (iswitchb-visit-buffer): Handle `display' alternative.
Richard M. Stallman <rms@gnu.org>
parents: 17617
diff changeset
999 (defun iswitchb-display-buffer ()
8d33666b1152 (iswitchb-visit-buffer): Handle `display' alternative.
Richard M. Stallman <rms@gnu.org>
parents: 17617
diff changeset
1000 "Display a buffer in another window but don't select it.
8d33666b1152 (iswitchb-visit-buffer): Handle `display' alternative.
Richard M. Stallman <rms@gnu.org>
parents: 17617
diff changeset
1001 The buffer name is selected interactively by typing a substring.
8d33666b1152 (iswitchb-visit-buffer): Handle `display' alternative.
Richard M. Stallman <rms@gnu.org>
parents: 17617
diff changeset
1002 For details of keybindings, do `\\[describe-function] iswitchb'."
8d33666b1152 (iswitchb-visit-buffer): Handle `display' alternative.
Richard M. Stallman <rms@gnu.org>
parents: 17617
diff changeset
1003 (interactive)
8d33666b1152 (iswitchb-visit-buffer): Handle `display' alternative.
Richard M. Stallman <rms@gnu.org>
parents: 17617
diff changeset
1004 (setq iswitchb-method 'display)
20470
4d8e07123564 (iswitchb-completion-help): Multiple TAB presses
Karl Heuer <kwzh@gnu.org>
parents: 18929
diff changeset
1005 (iswitchb))
17618
8d33666b1152 (iswitchb-visit-buffer): Handle `display' alternative.
Richard M. Stallman <rms@gnu.org>
parents: 17617
diff changeset
1006
8d33666b1152 (iswitchb-visit-buffer): Handle `display' alternative.
Richard M. Stallman <rms@gnu.org>
parents: 17617
diff changeset
1007 ;;;###autoload
17616
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1008 (defun iswitchb-buffer-other-frame ()
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1009 "Switch to another buffer and show it in another frame.
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1010 The buffer name is selected interactively by typing a substring.
17617
4851316697c1 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 17616
diff changeset
1011 For details of keybindings, do `\\[describe-function] iswitchb'."
17616
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1012 (interactive)
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1013 (setq iswitchb-method 'otherframe)
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1014 (iswitchb))
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1015
18776
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
1016 ;;; XEmacs hack for showing default buffer
17616
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1017
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1018 ;; The first time we enter the minibuffer, Emacs puts up the default
20470
4d8e07123564 (iswitchb-completion-help): Multiple TAB presses
Karl Heuer <kwzh@gnu.org>
parents: 18929
diff changeset
1019 ;; buffer to switch to, but XEmacs doesn't -- presumably there is a
18776
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
1020 ;; subtle difference in the two versions of post-command-hook. The
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
1021 ;; default is shown for both whenever we delete all of our text
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
1022 ;; though, indicating its just a problem the first time we enter the
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
1023 ;; function. To solve this, we use another entry hook for emacs to
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
1024 ;; show the default the first time we enter the minibuffer.
17616
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1025
21326
8150549598cc Many doc fixes.
Stephen Eglen <stephen@gnu.org>
parents: 21156
diff changeset
1026 (defun iswitchb-init-XEmacs-trick ()
17617
4851316697c1 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 17616
diff changeset
1027 "Display default buffer when first entering minibuffer.
4851316697c1 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 17616
diff changeset
1028 This is a hack for XEmacs, and should really be handled by `iswitchb-exhibit'."
17616
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1029 (if (iswitchb-entryfn-p)
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1030 (progn
18776
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
1031 (iswitchb-exhibit)
17616
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1032 (goto-char (point-min)))))
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1033
18776
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
1034 ;; add this hook for XEmacs only.
17616
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1035 (if iswitchb-xemacs
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1036 (add-hook 'iswitchb-minibuffer-setup-hook
21326
8150549598cc Many doc fixes.
Stephen Eglen <stephen@gnu.org>
parents: 21156
diff changeset
1037 'iswitchb-init-XEmacs-trick))
17616
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1038
18776
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
1039 ;;; XEmacs / backspace key
20470
4d8e07123564 (iswitchb-completion-help): Multiple TAB presses
Karl Heuer <kwzh@gnu.org>
parents: 18929
diff changeset
1040 ;; For some reason, if the backspace key is pressed in XEmacs, the
17616
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1041 ;; line gets confused, so I've added a simple key definition to make
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1042 ;; backspace act like the normal delete key.
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1043
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1044 (defun iswitchb-xemacs-backspacekey ()
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1045 "Bind backspace to `backward-delete-char'."
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1046 (define-key iswitchb-mode-map '[backspace] 'backward-delete-char)
21706
a0c3ee34362d Only require cl if cadr and last are not defined (thanks to Dave Love.)
Stephen Eglen <stephen@gnu.org>
parents: 21326
diff changeset
1047 (define-key iswitchb-mode-map '[(meta backspace)] 'backward-kill-word))
17616
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1048
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1049 (if iswitchb-xemacs
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1050 (add-hook 'iswitchb-define-mode-map-hook
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1051 'iswitchb-xemacs-backspacekey))
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1052
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1053 ;;; ICOMPLETE TYPE CODE
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1054
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1055 (defun iswitchb-exhibit ()
17617
4851316697c1 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 17616
diff changeset
1056 "Find matching buffers and display a list in the minibuffer.
17616
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1057 Copied from `icomplete-exhibit' with two changes:
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1058 1. It prints a default buffer name when there is no text yet entered.
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1059 2. It calls my completion routine rather than the standard completion."
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1060
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1061 (if iswitchb-use-mycompletion
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1062 (let ((contents (buffer-substring (point-min)(point-max)))
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1063 (buffer-undo-list t))
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1064 (save-excursion
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1065 (goto-char (point-max))
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1066 ; Register the end of input, so we
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1067 ; know where the extra stuff
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1068 ; (match-status info) begins:
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1069 (if (not (boundp 'iswitchb-eoinput))
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1070 ;; In case it got wiped out by major mode business:
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1071 (make-local-variable 'iswitchb-eoinput))
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1072 (setq iswitchb-eoinput (point))
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1073 ;; Update the list of matches
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1074 (setq iswitchb-text contents)
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1075 (iswitchb-set-matches)
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1076 (setq iswitchb-rescan t)
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1077 (iswitchb-set-common-completion)
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1078
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1079 ;; Insert the match-status information:
18776
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
1080 (insert-string
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
1081 (iswitchb-completions
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
1082 contents
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
1083 minibuffer-completion-table
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
1084 minibuffer-completion-predicate
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
1085 (not minibuffer-completion-confirm)))
17616
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1086 ))))
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1087
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1088 (defun iswitchb-completions
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1089 (name candidates predicate require-match)
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1090 "Return the string that is displayed after the user's text.
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1091 Modified from `icomplete-completions'."
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1092
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1093 (let ((comps iswitchb-matches)
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1094 ; "-determined" - only one candidate
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1095 (open-bracket-determined (if require-match "(" "["))
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1096 (close-bracket-determined (if require-match ")" "]"))
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1097 ;"-prospects" - more than one candidate
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1098 (open-bracket-prospects "{")
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1099 (close-bracket-prospects "}")
21706
a0c3ee34362d Only require cl if cadr and last are not defined (thanks to Dave Love.)
Stephen Eglen <stephen@gnu.org>
parents: 21326
diff changeset
1100 first)
17616
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1101
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1102 (if (and iswitchb-use-fonts comps)
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1103 (progn
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1104 (setq first (car comps))
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1105 (setq first (format "%s" first))
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1106 (put-text-property 0 (length first) 'face
20470
4d8e07123564 (iswitchb-completion-help): Multiple TAB presses
Karl Heuer <kwzh@gnu.org>
parents: 18929
diff changeset
1107 (if (= (length comps) 1)
17616
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1108 'font-lock-comment-face
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1109 'font-lock-function-name-face)
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1110 first)
21706
a0c3ee34362d Only require cl if cadr and last are not defined (thanks to Dave Love.)
Stephen Eglen <stephen@gnu.org>
parents: 21326
diff changeset
1111 (setq comps (cons first (cdr comps)))))
17616
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1112
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1113 (cond ((null comps) (format " %sNo match%s"
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1114 open-bracket-determined
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1115 close-bracket-determined))
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1116
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1117 ((null (cdr comps)) ;one match
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1118 (concat (if (and (> (length (car comps))
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1119 (length name)))
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1120 (concat open-bracket-determined
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1121 ;; when there is one match, show the
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1122 ;; matching buffer name in full
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1123 (car comps)
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1124 close-bracket-determined)
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1125 "")
21706
a0c3ee34362d Only require cl if cadr and last are not defined (thanks to Dave Love.)
Stephen Eglen <stephen@gnu.org>
parents: 21326
diff changeset
1126 (if (not iswitchb-use-fonts) " [Matched]")))
17616
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1127 (t ;multiple matches
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1128 (let* (
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1129 ;;(most (try-completion name candidates predicate))
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1130 (most nil)
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1131 (most-len (length most))
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1132 most-is-exact
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1133 first
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1134 (alternatives
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1135 (apply
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1136 (function concat)
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1137 (cdr (apply
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1138 (function nconc)
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1139 (mapcar '(lambda (com)
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1140 (if (= (length com) most-len)
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1141 ;; Most is one exact match,
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1142 ;; note that and leave out
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1143 ;; for later indication:
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1144 (progn
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1145 (setq most-is-exact t)
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1146 ())
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1147 (list ","
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1148 (substring com
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1149 most-len))))
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1150 comps))))))
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1151
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1152 (concat
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1153
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1154 ;; put in common completion item -- what you get by
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1155 ;; pressing tab
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1156 (if (> (length iswitchb-common-match-string) (length name))
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1157 (concat open-bracket-determined
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1158 (substring iswitchb-common-match-string
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1159 (length name))
21706
a0c3ee34362d Only require cl if cadr and last are not defined (thanks to Dave Love.)
Stephen Eglen <stephen@gnu.org>
parents: 21326
diff changeset
1160 close-bracket-determined))
17616
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1161 ;; end of partial matches...
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1162
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1163 ;; think this bit can be ignored.
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1164 (and (> most-len (length name))
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1165 (concat open-bracket-determined
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1166 (substring most (length name))
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1167 close-bracket-determined))
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1168
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1169 ;; list all alternatives
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1170 open-bracket-prospects
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1171 (if most-is-exact
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1172 (concat "," alternatives)
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1173 alternatives)
21706
a0c3ee34362d Only require cl if cadr and last are not defined (thanks to Dave Love.)
Stephen Eglen <stephen@gnu.org>
parents: 21326
diff changeset
1174 close-bracket-prospects))))))
17616
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1175
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1176 (defun iswitchb-minibuffer-setup ()
17617
4851316697c1 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 17616
diff changeset
1177 "Set up minibuffer for `iswitchb-buffer'.
4851316697c1 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 17616
diff changeset
1178 Copied from `icomplete-minibuffer-setup-hook'."
17616
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1179 (if (iswitchb-entryfn-p)
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1180 (progn
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1181
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1182 (make-local-variable 'iswitchb-use-mycompletion)
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1183 (setq iswitchb-use-mycompletion t)
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1184 (make-local-hook 'pre-command-hook)
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1185 (add-hook 'pre-command-hook
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1186 'iswitchb-pre-command
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1187 nil t)
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1188 (make-local-hook 'post-command-hook)
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1189 (add-hook 'post-command-hook
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1190 'iswitchb-post-command
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1191 nil t)
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1192
21706
a0c3ee34362d Only require cl if cadr and last are not defined (thanks to Dave Love.)
Stephen Eglen <stephen@gnu.org>
parents: 21326
diff changeset
1193 (run-hooks 'iswitchb-minibuffer-setup-hook))))
17616
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1194
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1195 (defun iswitchb-pre-command ()
17617
4851316697c1 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 17616
diff changeset
1196 "Run before command in `iswitchb-buffer'."
17616
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1197 (iswitchb-tidy))
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1198
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1199 (defun iswitchb-post-command ()
17617
4851316697c1 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 17616
diff changeset
1200 "Run after command in `iswitchb-buffer'."
21706
a0c3ee34362d Only require cl if cadr and last are not defined (thanks to Dave Love.)
Stephen Eglen <stephen@gnu.org>
parents: 21326
diff changeset
1201 (iswitchb-exhibit))
17616
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1202
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1203 (defun iswitchb-tidy ()
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1204 "Remove completions display, if any, prior to new user input.
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1205 Copied from `icomplete-tidy'."
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1206
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1207 (if (and (boundp 'iswitchb-eoinput)
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1208 iswitchb-eoinput)
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1209
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1210 (if (> iswitchb-eoinput (point-max))
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1211 ;; Oops, got rug pulled out from under us - reinit:
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1212 (setq iswitchb-eoinput (point-max))
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1213 (let ((buffer-undo-list buffer-undo-list )) ; prevent entry
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1214 (delete-region iswitchb-eoinput (point-max))))
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1215
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1216 ;; Reestablish the local variable 'cause minibuffer-setup is weird:
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1217 (make-local-variable 'iswitchb-eoinput)
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1218 (setq iswitchb-eoinput 1)))
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1219
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1220 (defun iswitchb-entryfn-p ()
17617
4851316697c1 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 17616
diff changeset
1221 "Return non-nil if `this-command' shows we are using `iswitchb-buffer'."
20470
4d8e07123564 (iswitchb-completion-help): Multiple TAB presses
Karl Heuer <kwzh@gnu.org>
parents: 18929
diff changeset
1222 (or (boundp 'iswitchb-prepost-hooks)
4d8e07123564 (iswitchb-completion-help): Multiple TAB presses
Karl Heuer <kwzh@gnu.org>
parents: 18929
diff changeset
1223 ;; I think the of this may be redundant, since the prepost hooks
4d8e07123564 (iswitchb-completion-help): Multiple TAB presses
Karl Heuer <kwzh@gnu.org>
parents: 18929
diff changeset
1224 ;; will always be set in the iswitchb defuns.
4d8e07123564 (iswitchb-completion-help): Multiple TAB presses
Karl Heuer <kwzh@gnu.org>
parents: 18929
diff changeset
1225 ;;(and (symbolp this-command) ; ignore lambda functions
4d8e07123564 (iswitchb-completion-help): Multiple TAB presses
Karl Heuer <kwzh@gnu.org>
parents: 18929
diff changeset
1226 ;;(memq this-command
4d8e07123564 (iswitchb-completion-help): Multiple TAB presses
Karl Heuer <kwzh@gnu.org>
parents: 18929
diff changeset
1227 ;; '(iswitchb-buffer
4d8e07123564 (iswitchb-completion-help): Multiple TAB presses
Karl Heuer <kwzh@gnu.org>
parents: 18929
diff changeset
1228 ;; iswitchb-buffer-other-frame
4d8e07123564 (iswitchb-completion-help): Multiple TAB presses
Karl Heuer <kwzh@gnu.org>
parents: 18929
diff changeset
1229 ;; iswitchb-display-buffer
4d8e07123564 (iswitchb-completion-help): Multiple TAB presses
Karl Heuer <kwzh@gnu.org>
parents: 18929
diff changeset
1230 ;; iswitchb-buffer-other-window))))
4d8e07123564 (iswitchb-completion-help): Multiple TAB presses
Karl Heuer <kwzh@gnu.org>
parents: 18929
diff changeset
1231 ))
4d8e07123564 (iswitchb-completion-help): Multiple TAB presses
Karl Heuer <kwzh@gnu.org>
parents: 18929
diff changeset
1232
17616
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1233 (defun iswitchb-summaries-to-end ()
17617
4851316697c1 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 17616
diff changeset
1234 "Move the summaries to the end of the list.
4851316697c1 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 17616
diff changeset
1235 This is an example function which can be hooked on to
4851316697c1 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 17616
diff changeset
1236 `iswitchb-make-buflist-hook'. Any buffer matching the regexps
4851316697c1 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 17616
diff changeset
1237 `Summary' or `output\*$'are put to the end of the list."
17616
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1238 (let ((summaries (delq nil (mapcar
18776
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
1239 (lambda (x)
17616
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1240 (if (or
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1241 (string-match "Summary" x)
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1242 (string-match "output\\*$" x))
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1243 x))
22380
2645c2c3829f (iswitchb-require-match, iswitchb-temp-buflist, iswitchb-bufs-in-frame):
Stephen Eglen <stephen@gnu.org>
parents: 22354
diff changeset
1244 iswitchb-temp-buflist))))
18776
61751ba33c8f All user variables now converted to custom.
Richard M. Stallman <rms@gnu.org>
parents: 17619
diff changeset
1245 (iswitchb-to-end summaries)))
17616
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1246
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1247 ;;; HOOKS
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1248 (add-hook 'minibuffer-setup-hook 'iswitchb-minibuffer-setup)
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1249
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1250 (provide 'iswitchb)
a64126a1f870 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1251
17617
4851316697c1 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 17616
diff changeset
1252 ;;; iswitchb.el ends here