Mercurial > emacs
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 |
rev | line source |
---|---|
17617 | 1 ;;; iswitchb.el --- switch between buffers using substrings |
17616 | 2 |
3 ;; Copyright (C) 1996, 1997 Free Software Foundation, Inc. | |
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 | 9 |
17617 | 10 ;; This file is part of GNU Emacs. |
11 | |
12 ;; GNU Emacs is free software; you can redistribute it and/or modify | |
17616 | 13 ;; it under the terms of the GNU General Public License as published by |
14 ;; the Free Software Foundation; either version 2, or (at your option) | |
15 ;; any later version. | |
16 | |
17617 | 17 ;; GNU Emacs is distributed in the hope that it will be useful, |
17616 | 18 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of |
19 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
20 ;; GNU General Public License for more details. | |
21 | |
22 ;; You should have received a copy of the GNU General Public License | |
23 ;; along with GNU Emacs; see the file COPYING. If not, write to the | |
24 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, | |
25 ;; Boston, MA 02111-1307, USA. | |
26 | |
21058
f2c4ac206a48
(iswitchb-default-method): Remove :tag entries.
Stephen Eglen <stephen@gnu.org>
parents:
20470
diff
changeset
|
27 ;;; Commentary: |
17616 | 28 |
21058
f2c4ac206a48
(iswitchb-default-method): Remove :tag entries.
Stephen Eglen <stephen@gnu.org>
parents:
20470
diff
changeset
|
29 ;; Installation: |
17616 | 30 ;; To get the functions in this package bound to keys, do |
31 ;; (iswitchb-default-keybindings) | |
32 | |
33 ;; As you type in a substring, the list of buffers currently matching | |
34 ;; the substring are displayed as you type. The list is ordered so | |
35 ;; that the most recent buffers visited come at the start of the list. | |
36 ;; The buffer at the start of the list will be the one visited when | |
37 ;; you press return. By typing more of the substring, the list is | |
38 ;; narrowed down so that gradually the buffer you want will be at the | |
39 ;; top of the list. Alternatively, you can use C-s an C-r to rotate | |
40 ;; buffer names in the list until the one you want is at the top of | |
41 ;; the list. Completion is also available so that you can see what is | |
42 ;; common to all of the matching buffers as you type. | |
43 | |
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 | 46 ;; does exact matching rather than substring matching on buffer names. |
47 ;; I also modified a couple of functions from icomplete.el to provide | |
48 ;; the completion feedback in the minibuffer. | |
49 | |
50 ;;; Example | |
51 | |
52 ;;If I have two buffers called "123456" and "123", with "123456" the | |
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 | 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 | 57 ;; |
58 ;; If I then press 2: | |
59 ;; iswitch 2[3]{123456,123} | |
60 ;; | |
61 ;; The list in {} are the matching buffers, most recent first (buffers | |
62 ;; visible in the current frame are put at the end of the list by | |
63 ;; default). At any time I can select the item at the head of the | |
64 ;; list by pressing RET. I can also bring the put the first element | |
65 ;; at the end of the list by pressing C-s, or put the last element at | |
66 ;; the head of the list by pressing C-r. The item in [] indicates | |
67 ;; what can be added to my input by pressing TAB. In this case, I | |
68 ;; will get "3" added to my input. So, press TAB: | |
69 ;; iswitch 23{123456,123} | |
70 ;; | |
71 ;; At this point, I still have two matching buffers. | |
72 ;; If I want the first buffer in the list, I simply press RET. If I | |
73 ;; wanted the second in the list, I could press C-s to move it to the | |
74 ;; top of the list and then RET to select it. | |
75 ;; | |
76 ;;However, If I type 4, I only have one match left: | |
77 ;; iswitch 234[123456] [Matched] | |
78 ;; | |
79 ;;Since there is only one matching buffer left, it is given in [] and we | |
80 ;;see the text [Matched] afterwards. I can now press TAB or RET to go | |
81 ;;to that buffer. | |
82 ;; | |
83 ;; If however, I now type "a": | |
84 ;; iswitch 234a [No match] | |
85 ;; There are no matching buffers. If I press RET or TAB, I can be | |
86 ;; prompted to create a new buffer called "234a". | |
87 ;; | |
88 ;; Of course, where this function comes in really useful is when you | |
89 ;; can specify the buffer using only a few keystrokes. In the above | |
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 | 92 ;; with 4 in its name). |
93 | |
94 ;; To see a full list of all matching buffers in a separate buffer, | |
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 | 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 | 106 ;; |
107 ;; See the doc string of iswitchb for full keybindings and features. | |
108 ;; (describe-function 'iswitchb) | |
109 | |
110 ;;; Customisation | |
111 | |
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 | 115 ;; To modify the keybindings, use the hook provided. For example: |
116 ;;(add-hook 'iswitchb-define-mode-map-hook | |
117 ;; 'iswitchb-my-keys) | |
118 ;; | |
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 | 121 ;; (define-key iswitchb-mode-map " " 'iswitchb-next-match) |
122 ;; ) | |
123 ;; | |
21326 | 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 | 126 ;; If you have many matching buffers, they may not all fit onto one |
127 ;; line of the minibuffer. In this case, you should use rsz-mini | |
128 ;; (resize-minibuffer-mode). You can also limit iswitchb so that it | |
129 ;; only shows a certain number of lines -- see the documentation for | |
130 ;; `iswitchb-minibuffer-setup-hook'. | |
131 | |
21326 | 132 ;; Changing the list of buffers |
17616 | 133 |
134 ;; By default, the list of current buffers is most recent first, | |
135 ;; oldest last, with the exception that the buffers visible in the | |
136 ;; current frame are put at the end of the list. A hook exists to | |
137 ;; allow other functions to order the list. For example, if you add: | |
138 ;; | |
139 ;; (add-hook 'iswitchb-make-buflist-hook 'iswitchb-summaries-to-end) | |
140 ;; | |
141 ;; then all buffers matching "Summary" are moved to the end of the | |
142 ;; list. (I find this handy for keeping the INBOX Summary and so on | |
143 ;; out of the way.) It also moves buffers matching "output\*$" to the | |
144 ;; end of the list (these are created by AUC TeX when compiling.) | |
145 ;; Other functions could be made available which alter the list of | |
146 ;; matching buffers (either deleting or rearranging elements.) | |
147 | |
148 ;; Font-Lock | |
149 | |
150 ;; If you have font-lock loaded, the first matching buffer is | |
151 ;; highlighted. To switch this off, set (setq iswitchb-use-fonts nil) | |
152 ;; I don't use font-lock that much, so I've hardcoded the faces. If | |
153 ;; this is too harsh, let me know. Colouring of the matching buffer | |
154 ;; name was suggested by Carsten Dominik (dominik@strw.leidenuniv.nl) | |
155 | |
21326 | 156 ;; Replacement for read-buffer |
17616 | 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 | 166 |
21326 | 167 ;; Regexp matching |
168 | |
169 ;; There is limited provision for regexp matching within iswitchb, | |
170 ;; enabled through `iswitchb-regexp'. This allows you to type `c$' | |
171 ;; for example and see all buffer names ending in `c'. This facility | |
172 ;; is quite limited though in two respects. First, you can't | |
173 ;; currently type in expressions like `[0-9]' directly -- you have to | |
174 ;; type them in when iswitchb-regexp is nil and then toggle on the | |
175 ;; regexp functionality. Likewise, don't enter an expression | |
176 ;; containing `\' in regexp mode. If you try, iswitchb gets confused, | |
177 ;; so just hit C-g and try again. Secondly, no completion mechanism | |
178 ;; is currently offered when regexp searching. | |
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 | 182 ;;; Acknowledgements |
183 | |
184 ;; Thanks to Jari Aalto <jari.aalto@poboxes.com> for help with the | |
185 ;; first version of this package, iswitch-buffer. Thanks also to many | |
186 ;; others for testing earlier versions. | |
187 | |
188 ;;; Code: | |
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 | 209 ;;; User Variables |
210 ;; | |
211 ;; These are some things you might want to change. | |
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 | 228 '("^ ") |
17617 | 229 "*List of regexps or functions matching buffer names to ignore. |
230 For example, traditional behavior is not to list buffers whose names begin | |
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 | 236 ;;; Examples for setting the value of iswitchb-buffer-ignore |
21326 | 237 ;(defun iswitchb-ignore-c-mode (name) |
17616 | 238 ; "Ignore all c mode buffers -- example function for iswitchb." |
239 ; (save-excursion | |
240 ; (set-buffer name) | |
241 ; (string-match "^C$" mode-name))) | |
242 | |
21326 | 243 ;(setq iswitchb-buffer-ignore '("^ " iswitchb-ignore-c-mode)) |
17616 | 244 ;(setq iswitchb-buffer-ignore '("^ " "\\.c$" "\\.h$")) |
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 | 247 "*How to switch to new buffer when using `iswitchb-buffer'. |
17616 | 248 Possible values: |
249 `samewindow' Show new buffer in same window | |
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 | 252 `otherframe' Show new buffer in another frame |
253 `maybe-frame' If a buffer is visible in another frame, prompt to ask if you | |
254 you want to see the buffer in the same window of the current | |
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 | 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 | 267 "*Non-nil means that `iswitchb' will do regexp matching. |
21326 | 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 | 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 | 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 | 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 | 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 | 299 (defvar iswitchb-all-frames 'visible |
300 "*Argument to pass to `walk-windows' when finding visible buffers. | |
301 See documentation of `walk-windows' for useful values.") | |
302 | |
21326 | 303 (defcustom iswitchb-minibuffer-setup-hook nil |
304 "*Iswitchb-specific customization of minibuffer setup. | |
17616 | 305 |
17617 | 306 This hook is run during minibuffer setup iff `iswitchb' will be active. |
17616 | 307 It is intended for use in customizing iswitchb for interoperation |
308 with other packages. For instance: | |
309 | |
310 \(add-hook 'iswitchb-minibuffer-setup-hook | |
311 \(function | |
312 \(lambda () | |
313 \(make-local-variable 'resize-minibuffer-window-max-height) | |
314 \(setq resize-minibuffer-window-max-height 3)))) | |
315 | |
316 will constrain rsz-mini to a maximum minibuffer height of 3 lines when | |
21326 | 317 iswitchb is running. Copied from `icomplete-minibuffer-setup-hook'." |
318 :type 'hook | |
319 :group 'iswitchb) | |
320 | |
321 ;; Do we need the variable iswitchb-use-mycompletion? | |
322 | |
323 ;;; Internal Variables | |
324 | |
325 (defvar iswitchb-method nil | |
326 "Stores the method for viewing the selected buffer. | |
327 Its value is one of `samewindow', `otherwindow', `display', `otherframe', | |
328 `maybe-frame' or `always-frame'. See `iswitchb-default-method' for | |
329 details of values.") | |
17616 | 330 |
331 (defvar iswitchb-eoinput 1 | |
332 "Point where minibuffer input ends and completion info begins. | |
17617 | 333 Copied from `icomplete-eoinput'.") |
17616 | 334 (make-variable-buffer-local 'iswitchb-eoinput) |
335 | |
336 (defvar iswitchb-buflist nil | |
337 "Stores the current list of buffers that will be searched through. | |
338 The list is ordered, so that the most recent buffers come first, | |
339 although by default, the buffers visible in the current frame are put | |
340 at the end of the list. Created by `iswitchb-make-buflist'.") | |
341 | |
342 ;; todo -- is this necessary? | |
343 | |
344 (defvar iswitchb-use-mycompletion nil | |
17617 | 345 "Non-nil means use `iswitchb-buffer' completion feedback. |
346 Should only be set to t by iswitchb functions, so that it doesn't | |
347 interfere with other minibuffer usage.") | |
17616 | 348 |
349 (defvar iswitchb-change-word-sub nil | |
350 "Private variable used by `iswitchb-word-matching-substring'.") | |
351 | |
352 (defvar iswitchb-common-match-string nil | |
353 "Stores the string that is common to all matching buffers.") | |
354 | |
355 (defvar iswitchb-rescan nil | |
356 "Non-nil means we need to regenerate the list of matching buffers.") | |
357 | |
358 (defvar iswitchb-text nil | |
359 "Stores the users string as it is typed in.") | |
360 | |
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 | 363 |
364 (defvar iswitchb-mode-map nil | |
17617 | 365 "Keymap for `iswitchb-buffer'.") |
17616 | 366 |
367 (defvar iswitchb-history nil | |
17617 | 368 "History of buffers selected using `iswitchb-buffer'.") |
17616 | 369 |
370 (defvar iswitchb-exit nil | |
17617 | 371 "Flag to monitor how `iswitchb-buffer' exits. |
372 If equal to `takeprompt', we use the prompt as the buffer name to be | |
373 selected.") | |
17616 | 374 |
375 (defvar iswitchb-buffer-ignore-orig nil | |
376 "Stores original value of `iswitchb-buffer-ignore'.") | |
377 | |
378 (defvar iswitchb-xemacs (string-match "XEmacs" (emacs-version)) | |
379 "Non-nil if we are running XEmacs. Otherwise, assume we are running Emacs.") | |
380 | |
21326 | 381 (defvar iswitchb-default nil |
382 "Default buffer for iswitchb.") | |
17616 | 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 | 394 ;;; FUNCTIONS |
395 | |
396 ;;; ISWITCHB KEYMAP | |
397 (defun iswitchb-define-mode-map () | |
17617 | 398 "Set up the keymap for `iswitchb-buffer'." |
17616 | 399 (interactive) |
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 | 402 ;;(or iswitchb-mode-map |
403 | |
404 (setq map (copy-keymap minibuffer-local-map)) | |
405 (define-key map "?" 'iswitchb-completion-help) | |
406 (define-key map "\C-s" 'iswitchb-next-match) | |
407 (define-key map "\C-r" 'iswitchb-prev-match) | |
408 (define-key map "\t" 'iswitchb-complete) | |
409 (define-key map "\C-j" 'iswitchb-select-buffer-text) | |
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 | 412 ;;(define-key map "\C-a" 'iswitchb-toggle-ignore) |
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 | 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 | 418 |
419 ;;; MAIN FUNCTION | |
420 (defun iswitchb () | |
421 "Switch to buffer matching a substring. | |
422 As you type in a string, all of the buffers matching the string are | |
423 displayed. When you have found the buffer you want, it can then be | |
424 selected. As you type, most keys have their normal keybindings, | |
425 except for the following: | |
426 \\<iswitchb-mode-map> | |
427 | |
428 RET Select the buffer at the front of the list of matches. If the | |
17617 | 429 list is empty, possibly prompt to create new buffer. |
17616 | 430 |
431 \\[iswitchb-select-buffer-text] Select the current prompt as the buffer. | |
432 If no buffer is found, prompt for a new one. | |
433 | |
434 \\[iswitchb-next-match] Put the first element at the end of the list. | |
435 \\[iswitchb-prev-match] Put the last element at the start of the list. | |
436 \\[iswitchb-complete] Complete a common suffix to the current string that | |
437 matches all buffers. If there is only one match, select that buffer. | |
438 If there is no common suffix, show a list of all matching buffers | |
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 | 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 | 445 ;;\\[iswitchb-toggle-ignore] Toggle ignoring certain buffers (see \ |
446 ;;`iswitchb-buffer-ignore') | |
447 | |
448 (let | |
20470
4d8e07123564
(iswitchb-completion-help): Multiple TAB presses
Karl Heuer <kwzh@gnu.org>
parents:
18929
diff
changeset
|
449 (prompt buf) |
17616 | 450 |
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 | 455 ;;(message "chosen text %s" iswitchb-final-text) |
456 ;; Choose the buffer name: either the text typed in, or the head | |
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 | 495 (setq iswitchb-default |
496 (if (bufferp default) | |
497 (buffer-name default) | |
498 default)) | |
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 | 535 ;;; COMPLETION CODE |
536 | |
537 (defun iswitchb-set-common-completion () | |
17617 | 538 "Find common completion of `iswitchb-text' in `iswitchb-matches'. |
539 The result is stored in `iswitchb-common-match-string'." | |
17616 | 540 |
541 (let* (val) | |
542 (setq iswitchb-common-match-string nil) | |
543 (if (and iswitchb-matches | |
21326 | 544 (not iswitchb-regexp) ;; testing |
17616 | 545 (stringp iswitchb-text) |
546 (> (length iswitchb-text) 0)) | |
547 (if (setq val (iswitchb-find-common-substring | |
548 iswitchb-matches iswitchb-text)) | |
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 | 551 |
552 (defun iswitchb-complete () | |
553 "Try and complete the current pattern amongst the buffer names." | |
554 (interactive) | |
555 (let (res) | |
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 | 558 |
20470
4d8e07123564
(iswitchb-completion-help): Multiple TAB presses
Karl Heuer <kwzh@gnu.org>
parents:
18929
diff
changeset
|
559 ((= 1 (length iswitchb-matches)) |
17616 | 560 ;; only one choice, so select it. |
561 (exit-minibuffer)) | |
562 | |
563 (t | |
564 ;; else there could be some completions | |
21326 | 565 (setq res iswitchb-common-match-string) |
17616 | 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 | 569 (progn |
570 (setq iswitchb-rescan nil) | |
571 (delete-region (point-min) (point)) | |
572 (insert res)) | |
573 ;; else nothing to complete | |
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 | 576 |
577 ;;; TOGGLE FUNCTIONS | |
578 | |
579 (defun iswitchb-toggle-case () | |
580 "Toggle the value of `iswitchb-case'." | |
581 (interactive) | |
582 (setq iswitchb-case (not iswitchb-case)) | |
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 | 585 |
586 (defun iswitchb-toggle-regexp () | |
587 "Toggle the value of `iswitchb-regexp'." | |
588 (interactive) | |
589 (setq iswitchb-regexp (not iswitchb-regexp)) | |
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 | 592 |
593 (defun iswitchb-toggle-ignore () | |
594 "Toggle ignoring buffers specified with `iswitchb-buffer-ignore'." | |
595 (interactive) | |
596 (if iswitchb-buffer-ignore | |
597 (progn | |
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 | 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 | 602 (iswitchb-make-buflist iswitchb-default) |
17616 | 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 | 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 | 612 |
613 (defun iswitchb-select-buffer-text () | |
17617 | 614 "Select the buffer named by the prompt. |
615 If no buffer exactly matching the prompt exists, maybe create a new one." | |
17616 | 616 (interactive) |
617 (setq iswitchb-exit 'takeprompt) | |
618 (exit-minibuffer)) | |
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 | 626 (defun iswitchb-next-match () |
627 "Put first element of `iswitchb-matches' at the end of the list." | |
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 | 632 |
633 (defun iswitchb-prev-match () | |
634 "Put last element of `iswitchb-matches' at the front of the list." | |
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 | 654 |
655 ;;; CREATE LIST OF ALL CURRENT BUFFERS | |
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 | 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 | 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 | 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 | 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 | 696 |
697 (defun iswitchb-get-buffers-in-frames (&optional current) | |
698 "Return the list of buffers that are visible in the current frame. | |
699 If optional argument `current' is given, restrict searching to the | |
700 current frame, rather than all frames, regardless of value of | |
701 `iswitchb-all-frames'." | |
702 (let ((iswitchb-bufs-in-frame nil)) | |
703 (walk-windows 'iswitchb-get-bufname nil | |
704 (if current | |
705 nil | |
706 iswitchb-all-frames)) | |
707 iswitchb-bufs-in-frame)) | |
708 | |
709 (defun iswitchb-get-bufname (win) | |
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 | 718 |
719 ;;; FIND MATCHING BUFFERS | |
720 | |
721 (defun iswitchb-set-matches () | |
722 "Set `iswitchb-matches' to the list of buffers matching prompt." | |
723 (if iswitchb-rescan | |
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 | 727 buflist))))) |
17616 | 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 | 731 "Return buffers matching REGEXP. |
732 If STRING-FORMAT is nil, consider REGEXP as just a string. | |
17617 | 733 BUFFER-LIST can be list of buffers or list of strings." |
17616 | 734 (let* ((case-fold-search iswitchb-case) |
735 ;; need reverse since we are building up list backwards | |
736 (list (reverse buffer-list)) | |
21326 | 737 (do-string (stringp (car list))) |
17616 | 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 | 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 | 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 | 757 |
758 (defun iswitchb-ignore-buffername-p (bufname) | |
759 "Return t if the buffer BUFNAME should be ignored." | |
760 (let ((data (match-data)) | |
761 (re-list iswitchb-buffer-ignore) | |
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 | 764 (while re-list |
765 (setq nextstr (car re-list)) | |
766 (cond | |
767 ((stringp nextstr) | |
768 (if (string-match nextstr bufname) | |
769 (progn | |
770 (setq ignorep t) | |
771 (setq re-list nil)))) | |
772 ((fboundp nextstr) | |
773 (if (funcall nextstr bufname) | |
774 (progn | |
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 | 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 | 779 |
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 | 782 |
783 (defun iswitchb-word-matching-substring (word) | |
784 "Return part of WORD before 1st match to `iswitchb-change-word-sub'. | |
785 If `iswitchb-change-word-sub' cannot be found in WORD, return nil." | |
786 (let ((case-fold-search iswitchb-case)) | |
787 (let ((m (string-match iswitchb-change-word-sub word))) | |
788 (if m | |
789 (substring word m) | |
790 ;; else no match | |
791 nil)))) | |
792 | |
793 (defun iswitchb-find-common-substring (lis subs) | |
794 "Return common string following SUBS in each element of LIS." | |
795 (let (res | |
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 | 798 (setq iswitchb-change-word-sub |
799 (if iswitchb-regexp | |
800 subs | |
801 (regexp-quote subs))) | |
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 | 804 (setq alist (mapcar 'iswitchb-makealist res)) ;; could use an OBARRAY |
805 | |
806 ;; try-completion returns t if there is an exact match. | |
807 (let ((completion-ignore-case iswitchb-case)) | |
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 | 810 |
811 (defun iswitchb-makealist (res) | |
812 "Return dotted pair (RES . 1)." | |
813 (cons res 1)) | |
814 | |
815 ;; from Wayne Mesard <wmesard@esd.sgi.com> | |
816 (defun iswitchb-rotate-list (lis) | |
817 "Destructively removes the last element from LIS. | |
818 Return the modified list with the last element prepended to it." | |
819 (if (<= (length lis) 1) | |
820 lis | |
821 (let ((las lis) | |
822 (prev lis)) | |
823 (while (consp (cdr las)) | |
824 (setq prev las | |
825 las (cdr las))) | |
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 | 828 |
829 (defun iswitchb-completion-help () | |
830 "Show possible completions in a *Buffer Completions* buffer." | |
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 | 833 ;; choice with out any previous input. |
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 | 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 | 861 :activate-callback |
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 | 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 | 893 ;;; VISIT CHOSEN BUFFER |
894 (defun iswitchb-visit-buffer (buffer) | |
895 "Visit buffer named BUFFER according to `iswitchb-method'." | |
896 (let* (win newframe) | |
897 (cond | |
898 ((eq iswitchb-method 'samewindow) | |
899 (switch-to-buffer buffer)) | |
900 | |
901 ((memq iswitchb-method '(always-frame maybe-frame)) | |
902 (cond | |
903 ((and (setq win (iswitchb-window-buffer-p buffer)) | |
904 (or (eq iswitchb-method 'always-frame) | |
905 (y-or-n-p "Jump to frame? "))) | |
906 (setq newframe (window-frame win)) | |
907 (raise-frame newframe) | |
908 (select-frame newframe) | |
909 (select-window win) | |
910 (if (not iswitchb-xemacs) | |
911 ;; reposition mouse to make frame active. not needed in XEmacs | |
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 | 914 (t |
915 ;; No buffer in other frames... | |
916 (switch-to-buffer buffer) | |
917 ))) | |
918 | |
919 ((eq iswitchb-method 'otherwindow) | |
920 (switch-to-buffer-other-window buffer)) | |
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 | 925 ((eq iswitchb-method 'otherframe) |
926 (progn | |
927 (switch-to-buffer-other-frame buffer) | |
928 (if (not iswitchb-xemacs) | |
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 | 931 |
932 (defun iswitchb-possible-new-buffer (buf) | |
933 "Possibly create and visit a new buffer called BUF." | |
934 | |
935 (let ((newbufcreated)) | |
936 (if (and iswitchb-newbuffer | |
937 (or | |
938 (not iswitchb-prompt-newbuffer) | |
939 | |
940 (and iswitchb-prompt-newbuffer | |
941 (y-or-n-p | |
942 (format | |
943 "No buffer matching `%s', create one? " | |
944 buf))))) | |
945 ;; then create a new buffer | |
946 (progn | |
947 (setq newbufcreated (get-buffer-create buf)) | |
948 (if (fboundp 'set-buffer-major-mode) | |
949 (set-buffer-major-mode newbufcreated)) | |
950 (iswitchb-visit-buffer newbufcreated)) | |
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 | 953 |
954 (defun iswitchb-window-buffer-p (buffer) | |
17617 | 955 "Return window pointer if BUFFER is visible in another frame. |
956 If BUFFER is visible in the current frame, return nil." | |
17616 | 957 (interactive) |
958 (let ((blist (iswitchb-get-buffers-in-frames 'current))) | |
959 ;;If the buffer is visible in current frame, return nil | |
960 (if (memq buffer blist) | |
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 | 964 ))) |
965 | |
17617 | 966 ;;;###autoload |
17616 | 967 (defun iswitchb-default-keybindings () |
17617 | 968 "Set up default keybindings for `iswitchb-buffer'. |
17616 | 969 Call this function to override the normal bindings." |
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 | 975 |
976 ;;;###autoload | |
977 (defun iswitchb-buffer () | |
978 "Switch to another buffer. | |
979 | |
980 The buffer name is selected interactively by typing a substring. The | |
981 buffer is displayed according to `iswitchb-default-method' -- the | |
982 default is to show it in the same window, unless it is already visible | |
17617 | 983 in another frame. |
984 For details of keybindings, do `\\[describe-function] iswitchb'." | |
17616 | 985 (interactive) |
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 | 988 |
989 ;;;###autoload | |
990 (defun iswitchb-buffer-other-window () | |
991 "Switch to another buffer and show it in another window. | |
992 The buffer name is selected interactively by typing a substring. | |
17617 | 993 For details of keybindings, do `\\[describe-function] iswitchb'." |
17616 | 994 (interactive) |
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 | 997 |
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 | 1008 (defun iswitchb-buffer-other-frame () |
1009 "Switch to another buffer and show it in another frame. | |
1010 The buffer name is selected interactively by typing a substring. | |
17617 | 1011 For details of keybindings, do `\\[describe-function] iswitchb'." |
17616 | 1012 (interactive) |
1013 (setq iswitchb-method 'otherframe) | |
1014 (iswitchb)) | |
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 | 1017 |
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 | 1025 |
21326 | 1026 (defun iswitchb-init-XEmacs-trick () |
17617 | 1027 "Display default buffer when first entering minibuffer. |
1028 This is a hack for XEmacs, and should really be handled by `iswitchb-exhibit'." | |
17616 | 1029 (if (iswitchb-entryfn-p) |
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 | 1032 (goto-char (point-min))))) |
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 | 1035 (if iswitchb-xemacs |
1036 (add-hook 'iswitchb-minibuffer-setup-hook | |
21326 | 1037 'iswitchb-init-XEmacs-trick)) |
17616 | 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 | 1041 ;; line gets confused, so I've added a simple key definition to make |
1042 ;; backspace act like the normal delete key. | |
1043 | |
1044 (defun iswitchb-xemacs-backspacekey () | |
1045 "Bind backspace to `backward-delete-char'." | |
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 | 1048 |
1049 (if iswitchb-xemacs | |
1050 (add-hook 'iswitchb-define-mode-map-hook | |
1051 'iswitchb-xemacs-backspacekey)) | |
1052 | |
1053 ;;; ICOMPLETE TYPE CODE | |
1054 | |
1055 (defun iswitchb-exhibit () | |
17617 | 1056 "Find matching buffers and display a list in the minibuffer. |
17616 | 1057 Copied from `icomplete-exhibit' with two changes: |
1058 1. It prints a default buffer name when there is no text yet entered. | |
1059 2. It calls my completion routine rather than the standard completion." | |
1060 | |
1061 (if iswitchb-use-mycompletion | |
1062 (let ((contents (buffer-substring (point-min)(point-max))) | |
1063 (buffer-undo-list t)) | |
1064 (save-excursion | |
1065 (goto-char (point-max)) | |
1066 ; Register the end of input, so we | |
1067 ; know where the extra stuff | |
1068 ; (match-status info) begins: | |
1069 (if (not (boundp 'iswitchb-eoinput)) | |
1070 ;; In case it got wiped out by major mode business: | |
1071 (make-local-variable 'iswitchb-eoinput)) | |
1072 (setq iswitchb-eoinput (point)) | |
1073 ;; Update the list of matches | |
1074 (setq iswitchb-text contents) | |
1075 (iswitchb-set-matches) | |
1076 (setq iswitchb-rescan t) | |
1077 (iswitchb-set-common-completion) | |
1078 | |
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 | 1086 )))) |
1087 | |
1088 (defun iswitchb-completions | |
1089 (name candidates predicate require-match) | |
1090 "Return the string that is displayed after the user's text. | |
1091 Modified from `icomplete-completions'." | |
1092 | |
1093 (let ((comps iswitchb-matches) | |
1094 ; "-determined" - only one candidate | |
1095 (open-bracket-determined (if require-match "(" "[")) | |
1096 (close-bracket-determined (if require-match ")" "]")) | |
1097 ;"-prospects" - more than one candidate | |
1098 (open-bracket-prospects "{") | |
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 | 1101 |
1102 (if (and iswitchb-use-fonts comps) | |
1103 (progn | |
1104 (setq first (car comps)) | |
1105 (setq first (format "%s" first)) | |
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 | 1108 'font-lock-comment-face |
1109 'font-lock-function-name-face) | |
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 | 1112 |
1113 (cond ((null comps) (format " %sNo match%s" | |
1114 open-bracket-determined | |
1115 close-bracket-determined)) | |
1116 | |
1117 ((null (cdr comps)) ;one match | |
1118 (concat (if (and (> (length (car comps)) | |
1119 (length name))) | |
1120 (concat open-bracket-determined | |
1121 ;; when there is one match, show the | |
1122 ;; matching buffer name in full | |
1123 (car comps) | |
1124 close-bracket-determined) | |
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 | 1127 (t ;multiple matches |
1128 (let* ( | |
1129 ;;(most (try-completion name candidates predicate)) | |
1130 (most nil) | |
1131 (most-len (length most)) | |
1132 most-is-exact | |
1133 first | |
1134 (alternatives | |
1135 (apply | |
1136 (function concat) | |
1137 (cdr (apply | |
1138 (function nconc) | |
1139 (mapcar '(lambda (com) | |
1140 (if (= (length com) most-len) | |
1141 ;; Most is one exact match, | |
1142 ;; note that and leave out | |
1143 ;; for later indication: | |
1144 (progn | |
1145 (setq most-is-exact t) | |
1146 ()) | |
1147 (list "," | |
1148 (substring com | |
1149 most-len)))) | |
1150 comps)))))) | |
1151 | |
1152 (concat | |
1153 | |
1154 ;; put in common completion item -- what you get by | |
1155 ;; pressing tab | |
1156 (if (> (length iswitchb-common-match-string) (length name)) | |
1157 (concat open-bracket-determined | |
1158 (substring iswitchb-common-match-string | |
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 | 1161 ;; end of partial matches... |
1162 | |
1163 ;; think this bit can be ignored. | |
1164 (and (> most-len (length name)) | |
1165 (concat open-bracket-determined | |
1166 (substring most (length name)) | |
1167 close-bracket-determined)) | |
1168 | |
1169 ;; list all alternatives | |
1170 open-bracket-prospects | |
1171 (if most-is-exact | |
1172 (concat "," alternatives) | |
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 | 1175 |
1176 (defun iswitchb-minibuffer-setup () | |
17617 | 1177 "Set up minibuffer for `iswitchb-buffer'. |
1178 Copied from `icomplete-minibuffer-setup-hook'." | |
17616 | 1179 (if (iswitchb-entryfn-p) |
1180 (progn | |
1181 | |
1182 (make-local-variable 'iswitchb-use-mycompletion) | |
1183 (setq iswitchb-use-mycompletion t) | |
1184 (make-local-hook 'pre-command-hook) | |
1185 (add-hook 'pre-command-hook | |
1186 'iswitchb-pre-command | |
1187 nil t) | |
1188 (make-local-hook 'post-command-hook) | |
1189 (add-hook 'post-command-hook | |
1190 'iswitchb-post-command | |
1191 nil t) | |
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 | 1194 |
1195 (defun iswitchb-pre-command () | |
17617 | 1196 "Run before command in `iswitchb-buffer'." |
17616 | 1197 (iswitchb-tidy)) |
1198 | |
1199 (defun iswitchb-post-command () | |
17617 | 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 | 1202 |
1203 (defun iswitchb-tidy () | |
1204 "Remove completions display, if any, prior to new user input. | |
1205 Copied from `icomplete-tidy'." | |
1206 | |
1207 (if (and (boundp 'iswitchb-eoinput) | |
1208 iswitchb-eoinput) | |
1209 | |
1210 (if (> iswitchb-eoinput (point-max)) | |
1211 ;; Oops, got rug pulled out from under us - reinit: | |
1212 (setq iswitchb-eoinput (point-max)) | |
1213 (let ((buffer-undo-list buffer-undo-list )) ; prevent entry | |
1214 (delete-region iswitchb-eoinput (point-max)))) | |
1215 | |
1216 ;; Reestablish the local variable 'cause minibuffer-setup is weird: | |
1217 (make-local-variable 'iswitchb-eoinput) | |
1218 (setq iswitchb-eoinput 1))) | |
1219 | |
1220 (defun iswitchb-entryfn-p () | |
17617 | 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 | 1233 (defun iswitchb-summaries-to-end () |
17617 | 1234 "Move the summaries to the end of the list. |
1235 This is an example function which can be hooked on to | |
1236 `iswitchb-make-buflist-hook'. Any buffer matching the regexps | |
1237 `Summary' or `output\*$'are put to the end of the list." | |
17616 | 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 | 1240 (if (or |
1241 (string-match "Summary" x) | |
1242 (string-match "output\\*$" x)) | |
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 | 1246 |
1247 ;;; HOOKS | |
1248 (add-hook 'minibuffer-setup-hook 'iswitchb-minibuffer-setup) | |
1249 | |
1250 (provide 'iswitchb) | |
1251 | |
17617 | 1252 ;;; iswitchb.el ends here |