Mercurial > emacs
annotate man/speedbar.texi @ 58394:914f38aa54fd
(IT_EXPAND_MATRIX_WIDTH): New macro. Do not
expand matrix width for overflow in zero-width area.
(append_glyph, append_composite_glyph, produce_image_glyph)
(append_stretch_glyph): Use it to avoid loop in redisplay.
(note_mode_line_or_margin_highlight): Don't let help-echo from
string override help-echo from image map.
author | Kim F. Storm <storm@cua.dk> |
---|---|
date | Sun, 21 Nov 2004 12:33:35 +0000 |
parents | 4ac46dccac25 |
children | 9121d09d272a 7a0245dd1848 e24e2e78deda |
rev | line source |
---|---|
32674 | 1 \input texinfo @c -*-texinfo-*- |
2 | |
3 @setfilename ../info/speedbar | |
4 @settitle Speedbar: File/Tag summarizing utility | |
47737
0a70200bde27
use @copying instead of @ifinfo.
Karl Berry <karl@gnu.org>
parents:
43962
diff
changeset
|
5 @syncodeindex fn cp |
32674 | 6 |
47737
0a70200bde27
use @copying instead of @ifinfo.
Karl Berry <karl@gnu.org>
parents:
43962
diff
changeset
|
7 @copying |
54836
746c40973d25
Revision: miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-210
Miles Bader <miles@gnu.org>
parents:
52812
diff
changeset
|
8 Copyright @copyright{} 1999, 2000, 2002, 2004 Free Software Foundation, Inc. |
34235 | 9 |
47737
0a70200bde27
use @copying instead of @ifinfo.
Karl Berry <karl@gnu.org>
parents:
43962
diff
changeset
|
10 @quotation |
34235 | 11 Permission is granted to copy, distribute and/or modify this document |
12 under the terms of the GNU Free Documentation License, Version 1.1 or | |
13 any later version published by the Free Software Foundation; with the | |
14 Invariant Sections being ``The GNU Manifesto'', ``Distribution'' and | |
15 ``GNU GENERAL PUBLIC LICENSE'', with the Front-Cover texts being ``A GNU | |
16 Manual'', and with the Back-Cover Texts as in (a) below. A copy of the | |
17 license is included in the section entitled ``GNU Free Documentation | |
18 License'' in the Emacs manual. | |
19 | |
20 (a) The FSF's Back-Cover Text is: ``You have freedom to copy and modify | |
21 this GNU Manual, like GNU software. Copies published by the Free | |
22 Software Foundation raise funds for GNU development.'' | |
23 | |
24 This document is part of a collection distributed under the GNU Free | |
25 Documentation License. If you want to distribute this document | |
26 separately from the collection, you can do so by adding a copy of the | |
27 license to the document, as described in section 6 of the license. | |
47737
0a70200bde27
use @copying instead of @ifinfo.
Karl Berry <karl@gnu.org>
parents:
43962
diff
changeset
|
28 @end quotation |
0a70200bde27
use @copying instead of @ifinfo.
Karl Berry <karl@gnu.org>
parents:
43962
diff
changeset
|
29 @end copying |
0a70200bde27
use @copying instead of @ifinfo.
Karl Berry <karl@gnu.org>
parents:
43962
diff
changeset
|
30 |
0a70200bde27
use @copying instead of @ifinfo.
Karl Berry <karl@gnu.org>
parents:
43962
diff
changeset
|
31 @dircategory Emacs |
0a70200bde27
use @copying instead of @ifinfo.
Karl Berry <karl@gnu.org>
parents:
43962
diff
changeset
|
32 @direntry |
0a70200bde27
use @copying instead of @ifinfo.
Karl Berry <karl@gnu.org>
parents:
43962
diff
changeset
|
33 * Speedbar: (speedbar). File/Tag summarizing utility. |
0a70200bde27
use @copying instead of @ifinfo.
Karl Berry <karl@gnu.org>
parents:
43962
diff
changeset
|
34 @end direntry |
32674 | 35 |
36 @titlepage | |
37 @sp 10 | |
34235 | 38 @center @titlefont{Speedbar} |
39 @sp 2 | |
40 @center Eric Ludlam | |
32674 | 41 @vskip 0pt plus 1 fill |
34235 | 42 @page |
43 @vskip 0pt plus 1filll | |
47737
0a70200bde27
use @copying instead of @ifinfo.
Karl Berry <karl@gnu.org>
parents:
43962
diff
changeset
|
44 @insertcopying |
32674 | 45 @end titlepage |
46 | |
47 @node Top, , , (dir)Top | |
48 @comment node-name, next, previous, up | |
49 | |
50 Speedbar is a program for Emacs which can be used to summarize | |
51 information related to the current buffer. Its original inspiration | |
34238 | 52 is the `explorer' often used in modern development environments, office |
32674 | 53 packages, and web browsers. |
54 | |
55 Speedbar displays a narrow frame in which a tree view is shown. This | |
56 tree view defaults to containing a list of files and directories. Files | |
34238 | 57 can be `expanded' to list tags inside. Directories can be expanded to |
32674 | 58 list the files within itself. Each file or tag can be jumped to |
59 immediately. | |
60 | |
34238 | 61 Speedbar expands upon `explorer' windows by maintaining context with the |
32674 | 62 user. For example, when using the file view, the current buffer's file |
63 is highlighted. Speedbar also mimics the explorer windows by providing | |
64 multiple display modes. These modes come in two flavors. Major display | |
65 modes remain consistent across buffers, and minor display modes appear | |
32702
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
66 only when a buffer of the applicable type is shown. This allows |
32674 | 67 authors of other packages to provide speedbar summaries customized to |
68 the needs of that mode. | |
69 | |
34238 | 70 Throughout this manual, activities are defined as `clicking on', or |
36154 | 71 `expanding' items. Clicking means using using @kbd{Mouse-2} on a |
32674 | 72 button. Expanding refers to clicking on an expansion button to display |
32702
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
73 an expanded summary of the entry the expansion button is |
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
74 on. @xref{Basic Navigation}. |
32674 | 75 |
76 @menu | |
77 * Introduction:: Basics of speedbar. | |
78 * Basic Navigation:: Basics of speedbar common between all modes. | |
32702
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
79 * File Mode:: Summarizing files. |
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
80 * Buffer Mode:: Summarizing buffers. |
32674 | 81 * Minor Modes:: Additional minor modes such as Info and RMAIL. |
32702
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
82 * Customizing:: Changing speedbar behavior. |
32674 | 83 * Extending:: Extend speedbar for your own project. |
84 * Index:: | |
85 @end menu | |
86 | |
87 @node Introduction, Basic Navigation, , Top | |
88 @comment node-name, next, previous, up | |
89 @chapter Introduction | |
90 @cindex introduction | |
91 | |
92 To start using speedbar use the command @kbd{M-x speedbar RET} or select | |
93 it from the Tools menu in versions of Emacs with speedbar installed by | |
94 default. This command will open a new frame to summarize the local | |
32702
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
95 files. On X Window systems or on MS-Windows, speedbar's frame is twenty |
32674 | 96 characters wide, and will mimic the height of the frame from which it |
97 was started. It positions itself to the left or right of the frame you | |
98 started it from. | |
99 | |
33079 | 100 To use speedbar effectively, it is important to understand its |
32674 | 101 relationship with the frame you started it from. This frame is the |
32702
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
102 @dfn{attached frame} which speedbar will use as a reference point. Once |
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
103 started, speedbar watches the contents of this frame, and attempts to |
33079 | 104 make its contents relevant to the buffer loaded into the attached |
32674 | 105 frame. In addition, all requests made in speedbar that require the |
106 display of another buffer will display in the attached frame. | |
107 | |
108 When used in terminal mode, the new frame appears the same size as the | |
109 terminal. Since it is not visible while working in the attached frame, | |
32702
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
110 speedbar will save time by using the @dfn{slowbar mode}, where no tracking is |
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
111 done until speedbar is requested to show itself (i.e., the speedbar's |
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
112 frame becomes the selected frame). |
32674 | 113 |
32702
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
114 @cindex @code{speedbar-get-focus} |
32674 | 115 The function to use when switching between frames using the keyboard is |
116 @code{speedbar-get-focus}. This function will toggle between frames, and | |
32702
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
117 it's useful to bind it to a key in terminal mode. @xref{Customizing}. |
32674 | 118 |
119 @node Basic Navigation, File Mode, Introduction, Top | |
120 @comment node-name, next, previous, up | |
121 @chapter Basic Navigation | |
122 | |
123 Speedbar can display different types of data, and has several display | |
124 and behavior modes. These modes all have a common behavior, menu | |
125 system, and look. If one mode is learned, then the other modes are easy | |
126 to use. | |
127 | |
128 @menu | |
39267 | 129 * Basic Key Bindings:: |
32674 | 130 * Basic Visuals:: |
131 * Mouse Bindings:: | |
132 * Displays Submenu:: | |
133 @end menu | |
134 | |
39267 | 135 @node Basic Key Bindings, Basic Visuals, Basic Navigation, Basic Navigation |
32674 | 136 @comment node-name, next, previous, up |
39267 | 137 @section Basic Key Bindings |
138 @cindex key bindings | |
32674 | 139 |
39267 | 140 These key bindings are common across all modes: |
32702
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
141 |
32674 | 142 @table @kbd |
143 @item delete, SPC | |
32702
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
144 @cindex scrolling in speedbar |
32674 | 145 Scroll up and down one page. |
146 @item Q | |
32702
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
147 @cindex quitting speedbar |
32674 | 148 Quit speedbar, and kill the frame. |
149 @item q | |
150 Quit speedbar, and hide the frame. This makes it faster to restore the | |
32702
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
151 speedbar frame, than if you press @kbd{Q}. |
32674 | 152 @item g |
32702
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
153 @cindex refresh speedbar display |
32674 | 154 Refresh whatever contents are in speedbar. |
155 @item t | |
32702
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
156 @cindex slowbar mode |
32674 | 157 Toggle speedbar to and from slowbar mode. In slowbar mode, frame |
158 tracking is not done. | |
32702
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
159 @item n |
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
160 @itemx p |
32674 | 161 @cindex navigation |
32702
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
162 Move, respectively, to the next or previous item. A summary of that |
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
163 item will be displayed in the attached frame's minibuffer. |
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
164 @item M-n |
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
165 @itemx M-p |
32674 | 166 Move to the next or previous item in a restricted fashion. If a list is |
167 open, the cursor will skip over it. If the cursor is in an open list, | |
168 it will not leave it. | |
32702
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
169 @item C-M-n |
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
170 @itemx C-M-n |
32674 | 171 Move forwards and backwards across extended groups. This lets you |
32702
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
172 quickly skip over all files, directories, or other common sub-items at |
32674 | 173 the same current depth. |
174 @item C-x b | |
175 Switch buffers in the attached frame. | |
176 @end table | |
177 | |
178 Speedbar can handle multiple modes. Two are provided by default. | |
179 These modes are File mode, and Buffers mode. There are accelerators to | |
180 switch into these different modes. | |
181 | |
182 @cindex mode switching hotkeys | |
183 @table @kbd | |
184 @item b | |
32702
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
185 Switch into Quick Buffers mode (@pxref{Buffer Mode}). After one use, the |
32674 | 186 previous display mode is restored. |
187 @item f | |
32702
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
188 Switch into File mode. |
32674 | 189 @item r |
190 Switch back to the previous mode. | |
191 @end table | |
192 | |
193 Some modes provide groups, lists and tags. @xref{Basic Visuals}. When | |
32702
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
194 these are available, some additional common bindings are available. |
32674 | 195 |
196 @cindex common keys | |
197 @table @kbd | |
32702
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
198 @item RET |
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
199 @itemx e |
32674 | 200 Edit/Open the current group or tag. This behavior is dependent on the |
201 mode. In general, files or buffers are opened in the attached frame, | |
202 and directories or group nodes are expanded locally. | |
32702
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
203 @item + |
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
204 @itemx = |
32674 | 205 Expand the current group, displaying sub items. |
206 When used with a prefix argument, any data that may have been cached is | |
32702
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
207 flushed. This is similar to a power click. @xref{Mouse Bindings}. |
32674 | 208 @item - |
209 Contract the current group, hiding sub items. | |
210 @end table | |
211 | |
39267 | 212 @node Basic Visuals, Mouse Bindings, Basic Key Bindings, Basic Navigation |
32674 | 213 @comment node-name, next, previous, up |
214 @section Basic Visuals | |
215 @cindex visuals | |
216 | |
217 Speedbar has visual cues for indicating different types of data. These | |
218 cues are used consistently across the different speedbar modes to make | |
32702
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
219 them easier to interpret. |
32674 | 220 |
32702
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
221 At a high level, in File mode, there are directory buttons, sub |
32674 | 222 directory buttons, file buttons, tag buttons, and expansion buttons. |
223 This makes it easy to use the mouse to navigate a directory tree, and | |
224 quickly view files, or a summary of those files. | |
225 | |
33079 | 226 The most basic visual effect used to distinguish between these button |
32674 | 227 types is color and mouse highlighting. Anything the mouse highlights |
32702
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
228 can be clicked on and is called a button (@pxref{Mouse Bindings}). |
32674 | 229 Anything not highlighted by the mouse will not be clickable. |
230 | |
231 Text in speedbar consists of four different types of data. Knowing how | |
232 to read these textual elements will make it easier to navigate by | |
233 identifying the types of data available. | |
234 | |
235 @subsubsection Groups | |
236 @cindex groups | |
237 | |
238 Groups summarize information in a single line, and provide a high level | |
239 view of more complex systems, like a directory tree, or manual chapters. | |
240 | |
241 Groups appear at different indentation levels, and are prefixed with a | |
34238 | 242 @samp{+} in some sort of `box'. The group name will summarize the |
32674 | 243 information within it, and the expansion box will display that |
34238 | 244 information inline. In File mode, directories and files are `groups' |
32702
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
245 where the @samp{+} is surrounded by brackets like this: |
32674 | 246 |
247 @example | |
248 <+> include | |
249 <-> src | |
250 [+] foo.c | |
251 @end example | |
252 | |
253 In this example, we see both open and closed directories, in addition to | |
254 a file. The directories have a box consisting of angle brackets, and a | |
255 file uses square brackets. | |
256 | |
34238 | 257 In all modes, a group can be `edited' by pressing @kbd{RET}, meaning a |
32674 | 258 file will be opened, or a directory explicitly opened in speedbar. A |
259 group can be expanded or contracted using @kbd{+} or | |
39267 | 260 @kbd{-}. @xref{Basic Key Bindings}. |
32674 | 261 |
33079 | 262 Sometimes groups may have a @samp{?} in its indicator box. This means |
32674 | 263 that it is a group type, but there are no contents, or no known way of |
264 extracting contents of that group. | |
265 | |
266 When a group has been expanded, the indicator button changes from | |
32702
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
267 @samp{+} to @samp{-}. This indicates that the contents are being shown. |
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
268 Click the @samp{-} button to contract the group, or hide the contents |
32674 | 269 currently displayed. |
270 | |
271 @subsubsection Tags | |
272 @cindex tags | |
273 | |
274 Tags are the leaf nodes of the tree system. Tags are generally prefixed | |
32702
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
275 with a simple character, such as @samp{>}. Tags can only be jumped to using |
32674 | 276 @kbd{RET} or @kbd{e}. |
277 | |
278 @subsubsection Boolean Flags | |
279 | |
280 Sometimes a group or tag is given a boolean flag. These flags appear as | |
32702
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
281 extra text characters at the end of the line. File mode uses boolean |
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
282 flags, such as a @samp{*} to indicate that a file has been checked out |
32674 | 283 of a versioning system. |
284 | |
32702
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
285 For additional flags, see |
32674 | 286 @c Note to self, update these to sub-nodes which are more relevant. |
32702
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
287 @ref{File Mode}, and @ref{Version Control}. |
32674 | 288 |
289 @subsubsection Unadorned Text | |
290 | |
291 Unadorned text generally starts in column 0, without any special symbols | |
32702
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
292 prefixing them. In Buffers mode different buffer groups are prefixed |
32674 | 293 with a description of what the following buffers are (Files, scratch |
294 buffers, and invisible buffers.) | |
295 | |
32702
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
296 Unadorned text will generally be colorless, and not clickable. |
32674 | 297 |
298 @subsubsection Color Cues | |
299 | |
300 Each type of Group, item indicator, and label is given a different | |
32702
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
301 color. The colors chosen are dependent on whether the background color |
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
302 is light or dark. |
34238 | 303 Of important note is that the `current item', which may be a buffer or |
32674 | 304 file name, is highlighted red, and underlined. |
305 | |
306 Colors can be customized from the group @code{speedbar-faces}. Some | |
307 modes, such as for Info, will use the Info colors instead of default | |
308 speedbar colors as an indication of what is currently being displayed. | |
309 | |
310 The face naming convention mirrors the File display mode. Modes which | |
311 do not use files will attempt to use the same colors on analogous | |
312 entries. | |
313 | |
314 @node Mouse Bindings, Displays Submenu, Basic Visuals, Basic Navigation | |
315 @comment node-name, next, previous, up | |
316 @section Mouse Bindings | |
317 @cindex mouse bindings | |
318 | |
319 The mouse has become a common information navigation tool. Speedbar | |
320 will use the mouse to navigate file systems, buffer lists, and other | |
321 data. The different textual cues provide buttons which can be clicked | |
32702
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
322 on (@pxref{Basic Visuals}). Anything that highlights can be clicked on |
33079 | 323 with the mouse, or affected by the menu. |
32674 | 324 |
325 The mouse bindings are: | |
32702
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
326 |
32674 | 327 @table @kbd |
36154 | 328 @item Mouse-1 |
32702
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
329 Move cursor to that location. |
36154 | 330 @item Mouse-2 |
331 @itemx Double-Mouse-1 | |
332 Activate the current button. @kbd{Double-Mouse-1} is called a @dfn{double | |
32702
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
333 click} on other platforms, and is useful for windows users with two |
32674 | 334 button mice. |
36154 | 335 @c Isn't it true that with two-button mice, the right button is Mouse-2? |
336 @c On GNU/Linux, the right button is Mouse-3. | |
337 @item S-Mouse-2 | |
338 @itemx S-Double-Mouse-1 | |
32674 | 339 @cindex power click |
36154 | 340 This has the same effect as @kbd{Mouse-2}, except it is called a power |
32702
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
341 click. This means that if a group with an expansion button @samp{+} is |
32674 | 342 clicked, any caches are flushed, and subitems re-read. If it is a name, |
343 it will be opened in a new frame. | |
36154 | 344 @item Mouse-3 |
33079 | 345 Activate the speedbar menu. The item selected affects the line clicked, |
32674 | 346 not the line where the cursor was. |
36154 | 347 @item Mouse-1 @r{(mode line)} |
32702
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
348 Activate the menu. This affects the item the cursor is on before the |
32674 | 349 click, since the mouse was not clicked on anything. |
36154 | 350 @item C-Mouse-1 |
32674 | 351 Buffers sub-menu. The buffer in the attached frame is switched. |
352 @end table | |
353 | |
354 When the mouse moves over buttons in speedbar, details of that item | |
355 should be displayed in the minibuffer of the attached frame. Sometimes | |
356 this can contain extra information such as file permissions, or tag | |
357 location. | |
358 | |
359 @node Displays Submenu, , Mouse Bindings, Basic Navigation | |
360 @comment node-name, next, previous, up | |
361 @section Displays Submenu | |
362 @cindex displays submenu | |
363 | |
364 You can display different data by using different display modes. These | |
32702
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
365 specialized modes make it easier to navigate the relevant pieces of |
32674 | 366 information, such as files and directories, or buffers. |
367 | |
36154 | 368 In the main menu, found by clicking @kbd{Mouse-3}, there is a submenu |
369 labeled @samp{Displays}. This submenu lets you easily choose between | |
32674 | 370 different display modes. |
371 | |
372 The contents are modes currently loaded into emacs. By default, this | |
373 would include Files, Quick Buffers, and Buffers. Other major display | |
374 modes such as Info are loaded separately. | |
375 | |
376 @node File Mode, Buffer Mode, Basic Navigation, Top | |
377 @comment node-name, next, previous, up | |
378 @chapter File Mode | |
379 @cindex file mode | |
380 | |
381 File mode displays a summary of your current directory. You can display | |
382 files in the attached frame, or summarize the tags found in files. You | |
383 can even see if a file is checked out of a version control system, or | |
384 has some associated object file. | |
385 | |
32702
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
386 Advanced behavior, like copying and renaming files, is also provided. |
32674 | 387 |
388 @menu | |
389 * Directory Display:: What the display means. | |
390 * Hidden Files:: How to display hidden files. | |
39267 | 391 * File Key Bindings:: Performing file operations. |
32674 | 392 @end menu |
393 | |
394 @node Directory Display, Hidden Files, File Mode, File Mode | |
395 @comment node-name, next, previous, up | |
396 @section Directory Display | |
397 @cindex directory display | |
398 | |
399 There are three major sections in the display. The first line or two is | |
400 the root directory speedbar is currently viewing. You can jump to one | |
401 of the parent directories by clicking on the name of the directory you | |
402 wish to jump to. | |
403 | |
404 Next, directories are listed. A directory starts with the group | |
32702
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
405 indicator button @samp{<+>}. Clicking the directory name makes speedbar |
32674 | 406 load that directory as the root directory for its display. Clicking the |
32702
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
407 @samp{<+>} button will list all directories and files beneath. |
32674 | 408 |
32702
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
409 Next, files are listed. Files start with the group indicator @samp{[+]} |
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
410 or @samp{[?]}. You can jump to a file in the attached frame by clicking |
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
411 on the file name. You can expand a file and look at its tags by |
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
412 clicking on the @samp{[+]} symbol near the file name. |
32674 | 413 |
414 A typical session might look like this: | |
32702
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
415 |
32674 | 416 @example |
417 ~/lisp/ | |
418 <+> checkdoc | |
419 <+> eieio | |
420 <-> speedbar | |
421 [+] Makefile | |
422 [+] rpm.el # | |
423 [+] sb-gud.el # | |
424 [+] sb-info.el # | |
425 [+] sb-rmail.el # | |
426 [+] sb-w3.el | |
427 [-] speedbar.el *! | |
428 @{+@} Types | |
429 @{+@} Variables | |
430 @{+@} def (group) | |
431 @{+@} speedbar- | |
432 [+] speedbar.texi * | |
433 <+> testme | |
434 [+] align.el | |
435 [+] autoconf.el | |
436 @end example | |
437 | |
438 In this example, you can see several directories. The directory | |
439 @file{speedbar} has been opened inline. Inside the directory | |
32702
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
440 @file{speedbar}, the file @file{speedbar.el} has its tags exposed. |
32674 | 441 These tags are extensive, and they are summarized into tag groups. |
442 | |
443 Files get additional boolean flags associated with them. Valid flags are: | |
32702
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
444 |
32674 | 445 @cindex file flags |
446 @table @code | |
447 @item * | |
448 This file has been checked out of a version control | |
32702
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
449 system. @xref{Version Control}. |
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
450 @cindex @code{speedbar-obj-alist} |
32674 | 451 @item # |
452 This file has an up to date object file associated with it. The | |
453 variable @code{speedbar-obj-alist} defines how speedbar determines this | |
454 value. | |
455 @item ! | |
456 This file has an out of date object file associated with it. | |
457 @end table | |
458 | |
459 A Tag group is prefixed with the symbol @samp{@{+@}}. Clicking this | |
460 symbol will show all symbols that have been organized into that group. | |
461 Different types of files have unique tagging methods as defined by their | |
32702
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
462 major mode. Tags are generated with either the @code{imenu} package, or |
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
463 through the @code{etags} interface. |
32674 | 464 |
465 Tag groups are defined in multiple ways which make it easier to find the | |
466 tag you are looking for. Imenu keywords explicitly create groups, and | |
467 speedbar will automatically create groups if tag lists are too long. | |
468 | |
469 In our example, Imenu created the groups @samp{Types} and | |
470 @samp{Variables}. All remaining top-level symbols are then regrouped | |
471 based on the variable @code{speedbar-tag-hierarchy-method}. The | |
472 subgroups @samp{def} and @samp{speedbar-} are groupings where the first | |
473 few characters of the given symbols are specified in the group name. | |
474 Some group names may say something like @samp{speedbar-t to speedbar-v}, | |
475 indicating that all symbols which alphabetically fall between those | |
33079 | 476 categories are included in that sub-group. @xref{Tag Hierarchy Methods}. |
32674 | 477 |
39267 | 478 @node Hidden Files, File Key Bindings, Directory Display, File Mode |
32674 | 479 @comment node-name, next, previous, up |
480 @section Hidden Files | |
481 @cindex hidden files | |
482 | |
38865
62e02f5ae533
Avoid saying "Unix" in a way that includes GNU.
Richard M. Stallman <rms@gnu.org>
parents:
36154
diff
changeset
|
483 On GNU and Unix systems, a hidden file is a file whose name starts |
62e02f5ae533
Avoid saying "Unix" in a way that includes GNU.
Richard M. Stallman <rms@gnu.org>
parents:
36154
diff
changeset
|
484 with a period. They are hidden from a regular directory listing |
62e02f5ae533
Avoid saying "Unix" in a way that includes GNU.
Richard M. Stallman <rms@gnu.org>
parents:
36154
diff
changeset
|
485 because the user is not generally interested in them. |
32674 | 486 |
487 In speedbar, a hidden file is a file which isn't very interesting and | |
488 might prove distracting to the user. Any uninteresting files are | |
32702
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
489 removed from the File display. There are two levels of uninterest in |
32674 | 490 speedbar. The first level of uninterest are files which have no |
491 expansion method, or way of extracting tags. The second level is any | |
492 file that matches the same pattern used for completion in | |
493 @code{find-file}. This is derived from the variable | |
494 @code{completion-ignored-extensions}. | |
495 | |
496 You can toggle the display of uninteresting files from the toggle menu | |
32702
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
497 item @samp{Show All Files}. This will display all level one hidden files. |
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
498 These files will be shown with a @samp{?} indicator. Level 2 hidden |
32674 | 499 files will still not be shown. |
500 | |
32702
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
501 Object files fall into the category of level 2 hidden files. You can |
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
502 determine their presence by the @samp{#} and @samp{!} file indicators. |
32674 | 503 @xref{Directory Display}. |
504 | |
39267 | 505 @node File Key Bindings, , Hidden Files, File Mode |
32674 | 506 @comment node-name, next, previous, up |
39267 | 507 @section File Key Bindings |
508 @cindex file key bindings | |
32674 | 509 |
39267 | 510 File mode has key bindings permitting different file system operations |
32702
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
511 such as copy or rename. These commands all operate on the @dfn{current |
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
512 file}. In this case, the current file is the file at point, or clicked |
32674 | 513 on when pulling up the menu. |
514 | |
515 @table @kbd | |
516 @item U | |
517 Move the entire speedbar display up one directory. | |
518 @item I | |
519 Display information in the minibuffer about this line. This is the same | |
520 information shown when navigating with @kbd{n} and @kbd{p}, or moving | |
521 the mouse over an item. | |
522 @item B | |
523 Byte compile the Emacs Lisp file on this line. | |
524 @item L | |
32702
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
525 Load the Emacs Lisp file on this line. If a @file{.elc} file exists, |
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
526 optionally load that. |
32674 | 527 @item C |
528 Copy the current file to some other location. | |
529 @item R | |
530 Rename the current file, possibly moving it to some other location. | |
531 @item D | |
532 Delete the current file. | |
533 @item O | |
534 Delete the current file's object file. Use the symbols @samp{#} and | |
535 @samp{!} to determine if there is an object file available. | |
536 @end table | |
537 | |
538 One menu item toggles the display of all available files. By default, | |
539 only files which Emacs understands, and knows how to convert into a tag | |
32702
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
540 list, are shown. By showing all files, additional files such as text files are |
32674 | 541 also displayed, but they are prefixed with the @samp{[?]} symbol. This |
32702
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
542 means that it is a file, but Emacs doesn't know how to expand it. |
32674 | 543 |
544 @node Buffer Mode, Minor Modes, File Mode, Top | |
545 @comment node-name, next, previous, up | |
546 @chapter Buffer Mode | |
547 @cindex buffer mode | |
548 | |
32702
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
549 Buffer mode is very similar to File mode, except that instead of |
32674 | 550 tracking the current directory and all files available there, the |
32702
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
551 current list of Emacs buffers is shown. |
32674 | 552 |
32702
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
553 These buffers can have their tags expanded in the same way as files, |
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
554 and uses the same unknown file indicator (@pxref{File Mode}). |
32674 | 555 |
32702
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
556 Buffer mode does not have file operation bindings, but the following |
39267 | 557 buffer specific key bindings are available: |
32702
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
558 |
32674 | 559 @table @kbd |
560 @item k | |
32702
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
561 Kill this buffer. Do not touch its file. |
32674 | 562 @item r |
563 Revert this buffer, reloading from disk. | |
564 @end table | |
565 | |
32702
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
566 In addition to Buffer mode, there is also Quick Buffer mode. In fact, |
32674 | 567 Quick Buffers is bound to the @kbd{b} key. The only difference between |
32702
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
568 Buffers and Quick Buffers is that after one operation is performed |
33079 | 569 which affects the attached frame, the display is immediately reverted to |
32674 | 570 the last displayed mode. |
571 | |
32702
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
572 Thus, if you are in File mode, and you need quick access to a buffer, |
32674 | 573 press @kbd{b}, click on the buffer you want, and speedbar will revert |
32702
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
574 back to File mode. |
32674 | 575 |
576 @node Minor Modes, Customizing, Buffer Mode, Top | |
577 @comment node-name, next, previous, up | |
578 @chapter Minor Display Modes | |
579 @cindex minor display modes | |
580 | |
581 For some buffers, a list of files and tags makes no sense. This could | |
582 be because files are not currently in reference (such as web pages), or | |
583 that the files you might be interested have special properties (such as | |
584 email folders.) | |
585 | |
586 In these cases, a minor display mode is needed. A minor display mode | |
587 will override any major display mode currently being displayed for the | |
588 duration of the specialized buffer's use. Minor display modes | |
589 will follow the general rules of their major counterparts in terms of | |
39267 | 590 key bindings and visuals, but will have specialized behaviors. |
32674 | 591 |
592 @menu | |
593 * RMAIL:: Managing folders in speedbar | |
594 * Info:: Browsing topics in speedbar | |
595 * GDB:: Managing the current stack trace in speedbar | |
596 @end menu | |
597 | |
598 @node RMAIL, Info, Minor Modes, Minor Modes | |
599 @comment node-name, next, previous, up | |
600 @section RMAIL | |
601 @cindex RMAIL | |
602 | |
603 When using RMAIL, speedbar will display two sections. The first is a | |
604 layer one reply button. Clicking here will initialize a reply buffer | |
605 showing only this email address in the @samp{To:} field. | |
606 | |
607 The second section lists all RMAIL folders in the same directory as your | |
608 main RMAIL folder. The general rule is that RMAIL folders always appear | |
609 in all caps, or numbers. It is possible to save mail in folders with | |
32702
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
610 lower case letters, but there is no clean way of detecting such RMAIL folders |
32674 | 611 without opening them all. |
612 | |
613 Each folder can be visited by clicking the name. You can move mail from | |
614 the current RMAIL folder into a different folder by clicking the | |
32702
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
615 @samp{<M>} button. The @samp{M} stands for Move. |
32674 | 616 |
617 In this way you can manage your existing RMAIL folders fairly easily | |
618 using the mouse. | |
619 | |
620 @node Info, GDB, RMAIL, Minor Modes | |
621 @comment node-name, next, previous, up | |
622 @section Info | |
623 @cindex Info | |
624 | |
625 When browsing Info files, all local relevant information is displayed in | |
626 the info buffer and a topical high-level view is provided in speedbar. | |
627 All top-level info nodes are shown in the speedbar frame, and can be | |
628 jumped to by clicking the name. | |
629 | |
630 You can open these nodes with the @samp{[+]} button to see what sub-topics | |
631 are available. Since these sub-topics are not examined until you click | |
632 the @samp{[+]} button, sometimes a @samp{[?]} will appear when you click on | |
633 a @samp{[+]}, indicating that there are no sub-topics. | |
634 | |
635 @node GDB, , Info, Minor Modes | |
636 @comment node-name, next, previous, up | |
637 @section GDB | |
638 @cindex gdb | |
639 @cindex gud | |
640 | |
32702
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
641 If you are debugging an application with GDB in Emacs, speedbar can show |
32674 | 642 you the current stack when the current buffer is the @file{*gdb*} |
643 buffer. Usually, it will just report that there is no stack, but when | |
644 the application is stopped, the current stack will be shown. | |
645 | |
646 You can click on any stack element and gdb will move to that stack | |
647 level. You can then check variables local to that level at the GDB | |
648 prompt. | |
649 | |
650 @node Customizing, Extending, Minor Modes, Top | |
651 @comment node-name, next, previous, up | |
652 @chapter Customizing | |
653 @cindex customizing | |
654 | |
655 Speedbar is highly customizable, with a plethora of control elements. | |
656 Since speedbar is so visual and reduces so much information, this is an | |
32702
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
657 important aspect of its behavior. |
32674 | 658 |
659 In general, there are three custom groups you can use to quickly modify | |
660 speedbar's behavior. | |
661 | |
662 @table @code | |
663 @item speedbar | |
664 Basic speedbar behaviors. | |
665 @item speedbar-vc | |
666 Customizations regarding version control handling. | |
667 @item speedbar-faces | |
668 Customize speedbar's many colors and fonts. | |
669 @end table | |
670 | |
671 @menu | |
672 * Frames and Faces:: Visible behaviors. | |
673 * Tag Hierarchy Methods:: Customizing how tags are displayed. | |
674 * Version Control:: Adding new VC detection modes. | |
675 * Hooks:: The many hooks you can use. | |
676 @end menu | |
677 | |
678 @node Frames and Faces, Tag Hierarchy Methods, Customizing, Customizing | |
679 @comment node-name, next, previous, up | |
680 @section Frames and Faces | |
681 @cindex faces | |
682 @cindex frame parameters | |
683 | |
684 There are several faces speedbar generates to provide a consistent | |
32702
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
685 color scheme across display types. You can customize these faces using |
32674 | 686 your favorite method. They are: |
687 | |
688 @table @asis | |
32702
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
689 @cindex @code{speedbar-button-face} |
32674 | 690 @item speedbar-button-face |
32702
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
691 Face used on expand/contract buttons. |
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
692 @cindex @code{speedbar-file-face} |
32674 | 693 @item speedbar-file-face |
694 Face used on Files. Should also be used on non-directory like nodes. | |
32702
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
695 @cindex @code{speedbar-directory-face} |
32674 | 696 @item speedbar-directory-face |
697 Face used for directories, or nodes which consist of groups of other nodes. | |
32702
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
698 @cindex @code{speedbar-tag-face} |
32674 | 699 @item speedbar-tag-face |
32702
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
700 Face used for tags in a file, or for leaf items. |
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
701 @cindex @code{speedbar-selected-face} |
32674 | 702 @item speedbar-selected-face |
32702
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
703 Face used to highlight the selected item. This would be the current |
32674 | 704 file being edited. |
32702
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
705 @cindex @code{speedbar-highlight-face} |
32674 | 706 @item speedbar-highlight-face |
707 Face used when the mouse passes over a button. | |
708 @end table | |
709 | |
710 You can also customize speedbar's initial frame parameters. How this is | |
711 accomplished is dependent on your platform being Emacs or XEmacs. | |
712 | |
32702
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
713 @cindex @code{speedbar-frame-parameters}, Emacs |
32674 | 714 In Emacs, change the alist @code{speedbar-frame-parameters}. This |
715 variable is used to set up initial details. Height is also | |
716 automatically added when speedbar is created, though you can override | |
717 it. | |
718 | |
32702
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
719 @cindex @code{speedbar-frame-plist}, XEmacs |
32674 | 720 In XEmacs, change the plist @code{speedbar-frame-plist}. This is the |
721 XEmacs way of doing the same thing. | |
722 | |
723 @node Tag Hierarchy Methods, Version Control, Frames and Faces, Customizing | |
724 @comment node-name, next, previous, up | |
725 @section Tag Hierarchy Methods | |
726 @cindex tag hierarchy | |
727 @cindex tag groups | |
728 @cindex tag sorting | |
729 | |
730 When listing tags within a file, it is possible to get an annoyingly | |
731 long list of entries. Imenu (which generates the tag list in Emacs) | |
732 will group some classes of items automatically. Even here, however, | |
733 some tag groups can be quite large. | |
734 | |
32702
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
735 @cindex @code{speedbar-tag-hierarchy-method} |
32674 | 736 To solve this problem, tags can be grouped into logical units through a |
737 hierarchy processor. The specific variable to use is | |
738 @code{speedbar-tag-hierarchy-method}. There are several methods that | |
32702
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
739 can be applied in any order. They are: |
32674 | 740 |
741 @table @code | |
32702
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
742 @cindex @code{speedbar-trim-words-tag-hierarchy} |
32674 | 743 @item speedbar-trim-words-tag-hierarchy |
744 Find a common prefix for all elements of a group, and trim it off. | |
32702
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
745 @cindex @code{speedbar-prefix-group-tag-hierarchy} |
32674 | 746 @item speedbar-prefix-group-tag-hierarchy |
747 If a group is too large, place sets of tags into bins based on common | |
748 prefixes. | |
32702
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
749 @cindex @code{speedbar-simple-group-tag-hierarchy} |
32674 | 750 @item speedbar-simple-group-tag-hierarchy |
751 Take all items in the top level list not in a group, and stick them into | |
32702
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
752 a @samp{Tags} group. |
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
753 @cindex @code{speedbar-sort-tag-hierarchy} |
32674 | 754 @item speedbar-sort-tag-hierarchy |
755 Sort all items, leaving groups on top. | |
756 @end table | |
757 | |
758 You can also add your own functions to reorganize tags as you see fit. | |
759 | |
760 Some other control variables are: | |
761 | |
762 @table @code | |
32702
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
763 @cindex @code{speedbar-tag-group-name-minimum-length} |
32674 | 764 @item speedbar-tag-group-name-minimum-length |
32702
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
765 Default value: 4. |
32674 | 766 |
767 The minimum length of a prefix group name before expanding. Thus, if | |
768 the @code{speedbar-tag-hierarchy-method} includes | |
769 @code{speedbar-prefix-group-tag-hierarchy} and one such group's common | |
770 characters is less than this number of characters, then the group name | |
771 will be changed to the form of: | |
772 | |
773 @example | |
774 worda to wordb | |
775 @end example | |
776 | |
777 instead of just | |
778 | |
779 @example | |
780 word | |
781 @end example | |
782 | |
783 This way we won't get silly looking listings. | |
784 | |
32702
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
785 @cindex @code{speedbar-tag-split-minimum-length} |
32674 | 786 @item speedbar-tag-split-minimum-length |
32702
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
787 Default value: 20. |
32674 | 788 |
789 Minimum length before we stop trying to create sub-lists in tags. | |
790 This is used by all tag-hierarchy methods that break large lists into | |
791 sub-lists. | |
792 | |
32702
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
793 @cindex @code{speedbar-tag-regroup-maximum-length} |
32674 | 794 @item speedbar-tag-regroup-maximum-length |
32702
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
795 Default value: 10. |
32674 | 796 |
797 Maximum length of submenus that are regrouped. | |
798 If the regrouping option is used, then if two or more short subgroups | |
799 are next to each other, then they are combined until this number of | |
800 items is reached. | |
801 @end table | |
802 | |
803 @node Version Control, Hooks, Tag Hierarchy Methods, Customizing | |
804 @comment node-name, next, previous, up | |
805 @section Version Control | |
806 @cindex version control | |
807 @cindex vc extensions | |
808 | |
32702
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
809 When using the file mode in speedbar, information regarding a version |
32674 | 810 control system adds small details to the display. If a file is in a |
36154 | 811 version control system, and is ``checked out'' or ``locked'' locally, an |
812 asterisk @samp{*} appears at the end of the file name. In addition, | |
32674 | 813 the directory name for Version Control systems are left out of the |
814 speedbar display. | |
815 | |
32702
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
816 @cindex @code{speedbar-directory-unshown-regexp} |
32674 | 817 You can easily add new version control systems into speedbar's detection |
32702
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
818 scheme. To make a directory ``disappear'' from the list, use the variable |
32674 | 819 @code{speedbar-directory-unshown-regexp}. |
820 | |
32702
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
821 @cindex @code{speedbar-vc-path-enable-hook} |
32674 | 822 Next, you need to write entries for two hooks. The first is |
823 @code{speedbar-vc-path-enable-hook} which will enable a VC check in the | |
824 current directory for the group of files being checked. Your hook | |
825 function should take one parameter (the directory to check) and return | |
826 @code{t} if your VC method is in control here. | |
827 | |
32702
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
828 @cindex @code{speedbar-vc-in-control-hook} |
32674 | 829 The second function is @code{speedbar-vc-in-control-hook}. This hook |
32702
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
830 takes two parameters, the @var{path} of the file to check, and the |
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
831 @var{file} name. Return @code{t} if you want to have the asterisk |
32674 | 832 placed near this file. |
833 | |
32702
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
834 @cindex @code{speedbar-vc-indicator} |
32674 | 835 Lastly, you can change the VC indicator using the variable |
836 @code{speedbar-vc-indicator}, and specify a single character string. | |
837 | |
838 @node Hooks, , Version Control, Customizing | |
839 @comment node-name, next, previous, up | |
840 @section Hooks | |
32702
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
841 @cindex hooks |
32674 | 842 |
843 There are several hooks in speedbar allowing custom behaviors to be | |
844 added. Available hooks are: | |
845 | |
846 @table @code | |
32702
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
847 @cindex @code{speedbar-visiting-file-hook} |
32674 | 848 @item speedbar-visiting-file-hook |
849 Hooks run when speedbar visits a file in the selected frame. | |
32702
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
850 @cindex @code{speedbar-visiting-tag-hook} |
32674 | 851 @item speedbar-visiting-tag-hook |
852 Hooks run when speedbar visits a tag in the selected frame. | |
32702
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
853 @cindex @code{speedbar-load-hook} |
32674 | 854 @item speedbar-load-hook |
855 Hooks run when speedbar is loaded. | |
32702
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
856 @cindex @code{speedbar-reconfigure-keymaps-hook} |
32674 | 857 @item speedbar-reconfigure-keymaps-hook |
858 Hooks run when the keymaps are regenerated. Keymaps are reconfigured | |
39267 | 859 whenever modes change. This will let you add custom key bindings. |
32702
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
860 @cindex @code{speedbar-before-popup-hook} |
32674 | 861 @item speedbar-before-popup-hook |
862 Hooks called before popping up the speedbar frame. | |
32702
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
863 New frames are often popped up when ``power clicking'' on an item to view |
32674 | 864 it. |
32702
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
865 @cindex @code{speedbar-before-delete-hook} |
32674 | 866 @item speedbar-before-delete-hook |
867 Hooks called before deleting or hiding the speedbar frame. | |
32702
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
868 @cindex @code{speedbar-mode-hook} |
32674 | 869 @item speedbar-mode-hook |
870 Hooks called after creating a speedbar buffer. | |
32702
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
871 @cindex @code{speedbar-timer-hook} |
32674 | 872 @item speedbar-timer-hook |
873 Hooks called after running the speedbar timer function. | |
32702
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
874 @cindex @code{speedbar-scanner-reset-hook} |
32674 | 875 @item speedbar-scanner-reset-hook |
876 Hook called whenever generic scanners are reset. | |
32702
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
877 Set this to implement your own scanning or rescan safe functions with |
32674 | 878 state data. |
879 @end table | |
880 | |
881 @node Extending, Index, Customizing, Top | |
882 @comment node-name, next, previous, up | |
883 @chapter Extending | |
884 @cindex extending | |
885 | |
886 Speedbar can run different types of Major display modes such as Files | |
32702
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
887 (@pxref{File Mode}), and Buffers (@pxref{Buffer Mode}). It can also manage |
32674 | 888 different minor display modes for use with buffers handling specialized |
889 data. | |
890 | |
891 These major and minor display modes are handled through an extension | |
892 system which permits specialized keymaps and menu extensions, in | |
893 addition to a unique rendering function. You can also specify a wide | |
32702
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
894 range of tagging functions. The default uses @code{imenu}, but new |
33079 | 895 tagging methods can be easily added. In this chapter, you will |
32674 | 896 learn how to write your own major or minor display modes, and how to |
897 create specialized tagging functions. | |
898 | |
899 @menu | |
900 * Minor Display Modes:: How to create a minor display mode. | |
901 * Major Display Modes:: How to create a major display mode. | |
33079 | 902 * Tagging Extensions:: How to create your own tagging methods. |
32674 | 903 * Creating a display:: How to insert buttons and hierarchies. |
904 @end menu | |
905 | |
906 @node Minor Display Modes, Major Display Modes, Extending, Extending | |
907 @section Minor Display Modes | |
908 @cindex create minor display mode | |
909 | |
32702
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
910 A @dfn{minor display mode} is a mode useful when using a specific type of |
32674 | 911 buffer. This mode might not be useful for any other kind of data or |
912 mode, or may just be more useful that a files or buffers based mode when | |
913 working with a specialized mode. | |
914 | |
915 Examples that already exist for speedbar include RMAIL, Info, and gdb. | |
916 These modes display information specific to the major mode shown in the | |
917 attached frame. | |
918 | |
919 To enable a minor display mode in your favorite Major mode, follow these | |
32702
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
920 steps. The string @samp{@var{name}} is the name of the major mode being |
32674 | 921 augmented with speedbar. |
922 | |
923 @enumerate | |
924 @item | |
32702
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
925 Create the keymap variable @code{@var{name}-speedbar-key-map}. |
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
926 |
32674 | 927 @item |
32702
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
928 Create a function, named whatever you like, which assigns values into your |
32674 | 929 keymap. Use this command to create the keymap before assigning |
930 bindings: | |
32702
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
931 |
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
932 @smallexample |
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
933 (setq @var{name}-speedbar-key-map (speedbar-make-specialized-keymap)) |
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
934 @end smallexample |
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
935 |
32674 | 936 This function creates a special keymap for use in speedbar. |
32702
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
937 |
32674 | 938 @item |
939 Call your install function, or assign it to a hook like this: | |
32702
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
940 |
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
941 @smallexample |
32674 | 942 (if (featurep 'speedbar) |
32702
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
943 (@var{name}-install-speedbar-variables) |
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
944 (add-hook 'speedbar-load-hook '@var{name}-install-speedbar-variables)) |
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
945 @end smallexample |
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
946 |
32674 | 947 @item |
32702
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
948 Create an easymenu compatible vector named |
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
949 @code{@var{name}-speedbar-menu-items}. This will be spliced into |
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
950 speedbar's control menu. |
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
951 |
32674 | 952 @item |
32702
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
953 Create a function called @code{@var{name}-speedbar-buttons}. This function |
32674 | 954 should take one variable, which is the buffer for which it will create |
955 buttons. At this time @code{(current-buffer)} will point to the | |
956 uncleared speedbar buffer. | |
957 @end enumerate | |
958 | |
32702
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
959 When writing @code{@var{name}-speedbar-buttons}, the first thing you will |
32674 | 960 want to do is execute a check to see if you need to re-create your |
961 display. If it needs to be cleared, you need to erase the speedbar | |
32702
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
962 buffer yourself, and start drawing buttons. @xref{Creating a display}. |
32674 | 963 |
33079 | 964 @node Major Display Modes, Tagging Extensions, Minor Display Modes, Extending |
32674 | 965 @section Major Display Modes |
966 @cindex create major display mode | |
967 | |
32702
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
968 Creating a @dfn{Major Display Mode} for speedbar requires authoring a keymap, |
32674 | 969 an easy-menu segment, and writing several functions. These items can be |
970 given any name, and are made the same way as in a minor display mode | |
32702
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
971 (@pxref{Minor Display Modes}). Once this is done, these items need to be |
32674 | 972 registered. |
973 | |
974 Because this setup activity may or may not have speedbar available when | |
975 it is being loaded, it is necessary to create an install function. This | |
976 function should create and initialize the keymap, and add your | |
977 expansions into the customization tables. | |
978 | |
32702
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
979 @cindex @code{speedbar-make-specialized-keymap} |
32674 | 980 When creating the keymap, use the function |
981 @code{speedbar-make-specialized-keymap} instead of other keymap making | |
982 functions. This will provide you with the initial bindings needed. | |
983 Some common speedbar functions you might want to bind are: | |
984 | |
985 @table @code | |
32702
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
986 @cindex @code{speedbar-edit-line} |
32674 | 987 @item speedbar-edit-line |
988 Edit the item on the current line. | |
32702
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
989 @cindex @code{speedbar-expand-line} |
32674 | 990 @item speedbar-expand-line |
991 Expand the item under the cursor. | |
32702
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
992 With a numeric argument (@kbd{C-u}), flush cached data before expanding. |
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
993 @cindex @code{speedbar-contract-line} |
32674 | 994 @item speedbar-contract-line |
995 Contract the item under the cursor. | |
996 @end table | |
997 | |
32702
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
998 @cindex @code{speedbar-line-path} |
32674 | 999 These function require that function @code{speedbar-line-path} be |
1000 correctly overloaded to work. | |
1001 | |
1002 Next, register your extension like this; | |
1003 | |
1004 @example | |
1005 (speedbar-add-expansion-list '("MyExtension" | |
1006 MyExtension-speedbar-menu-items | |
1007 MyExtension-speedbar-key-map | |
1008 MyExtension-speedbar-buttons)) | |
1009 @end example | |
1010 | |
1011 There are no limitations to the names you use. | |
1012 | |
1013 The first parameter is the string representing your display mode. | |
1014 The second parameter is a variable name containing an easymenu compatible | |
1015 menu definition. This will be stuck in the middle of speedbar's menu. | |
1016 The third parameter is the variable name containing the keymap we | |
1017 discussed earlier. | |
1018 The last parameter is a function which draws buttons for your mode. | |
1019 This function must take two parameters. The directory currently being | |
1020 displayed, and the depth at which you should start rendering buttons. | |
1021 The function will then draw (starting at the current cursor position) | |
1022 any buttons deemed necessary based on the input parameters. | |
1023 @xref{Creating a display}. | |
1024 | |
1025 Next, you need to register function overrides. This may look something | |
1026 like this: | |
1027 | |
1028 @example | |
1029 (speedbar-add-mode-functions-list | |
1030 '("MYEXTENSION" | |
1031 (speedbar-item-info . MyExtension-speedbar-item-info) | |
1032 (speedbar-line-path . MyExtension-speedbar-line-path))) | |
1033 @end example | |
1034 | |
1035 The first element in the list is the name of you extension. The second | |
1036 is an alist of functions to overload. The function to overload is | |
1037 first, followed by what you want called instead. | |
1038 | |
1039 For @code{speedbar-line-path} your function should take an optional DEPTH | |
1040 parameter. This is the starting depth for heavily indented lines. If | |
1041 it is not provided, you can derive it like this: | |
1042 | |
1043 @example | |
1044 (save-match-data | |
1045 (if (not depth) | |
1046 (progn | |
1047 (beginning-of-line) | |
1048 (looking-at "^\\([0-9]+\\):") | |
1049 (setq depth (string-to-int (match-string 1))))) | |
1050 @end example | |
1051 | |
32702
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
1052 @noindent |
32674 | 1053 where the depth is stored as invisible text at the beginning of each |
1054 line. | |
1055 | |
1056 The path returned should be the full path name of the file associated | |
1057 with that line. If the cursor is on a tag, then the file containing | |
1058 that tag should be returned. This is critical for built in file based | |
1059 functions to work (meaning less code for you to write). If your display | |
1060 does not deal in files, you do not need to overload this function. | |
1061 | |
32702
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
1062 @cindex @code{speedbar-item-info} |
32674 | 1063 The function @code{speedbar-item-info}, however, is very likely to need |
1064 overloading. This function takes no parameters and must derive a text | |
1065 summary to display in the minibuffer. | |
1066 | |
1067 There are several helper functions you can use if you are going to use | |
1068 built in tagging. These functions can be @code{or}ed since each one | |
57912
4ac46dccac25
Replace non-nil with non-@code{nil}.
Jan Djärv <jan.h.d@swipnet.se>
parents:
54836
diff
changeset
|
1069 returns non-@code{nil} if it displays a message. They are: |
32674 | 1070 |
1071 @table @code | |
32702
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
1072 @cindex @code{speedbar-item-info-file-helper} |
32674 | 1073 @item speedbar-item-info-file-helper |
32702
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
1074 This takes an optional @var{filename} parameter. You can derive your own |
32674 | 1075 filename, or it will derive it using a (possibly overloaded) function |
1076 @code{speedbar-line-file}. It shows details about a file. | |
32702
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
1077 @cindex @code{speedbar-item-info-tag-helper} |
32674 | 1078 @item speedbar-item-info-tag-helper |
1079 If the current line is a tag, then display information about that tag, | |
32702
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
1080 such as its parent file, and location. |
32674 | 1081 @end table |
1082 | |
1083 Your custom function might look like this: | |
1084 | |
32702
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
1085 @example |
32674 | 1086 (defun MyExtension-item-info () |
1087 "Display information about the current line." | |
1088 (or (speedbar-item-info-tag-helper) | |
1089 (message "Interesting detail."))) | |
32702
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
1090 @end example |
32674 | 1091 |
1092 Once you have done all this, speedbar will show an entry in the | |
32702
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
1093 @samp{Displays} menu declaring that your extension is available. |
32674 | 1094 |
33079 | 1095 @node Tagging Extensions, Creating a display, Major Display Modes, Extending |
1096 @section Tagging Extensions | |
32674 | 1097 |
1098 It is possible to create new methods for tagging files in speedbar. | |
32702
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
1099 To do this, you need two basic functions, one function to fetch the |
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
1100 tags from a buffer, the other to insert them below the filename. |
32674 | 1101 |
1102 @defun my-fetch-dynamic-tags file | |
32702
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
1103 Parse @var{file} for a list of tags. Return the list, or @code{t} if there was |
32674 | 1104 an error. |
1105 @end defun | |
1106 | |
1107 The non-error return value can be anything, as long as it can be | |
33079 | 1108 inserted by its paired function: |
32674 | 1109 |
1110 @defun my-insert-tag-list level lst | |
1111 Insert a list of tags @var{lst} started at indentation level | |
1112 @var{level}. Creates buttons for each tag, and provides any other | |
33079 | 1113 display information required. |
32674 | 1114 @end defun |
1115 | |
32702
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
1116 @cindex @code{speedbar-create-tag-hierarchy} |
32674 | 1117 It is often useful to use @code{speedbar-create-tag-hierarchy} on your |
32702
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
1118 token list. See that function's documentation for details on what it |
32674 | 1119 requires. |
1120 | |
32702
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
1121 @cindex @code{speedbar-dynamic-tags-function-list} |
32674 | 1122 Once these two functions are written, modify the variable |
1123 @code{speedbar-dynamic-tags-function-list} to include your parser at the | |
1124 beginning, like this: | |
1125 | |
1126 @example | |
1127 (add-to-list 'speedbar-dynamic-tags-function-list | |
1128 '(my-fetch-dynamic-tags . my-insert-tag-list)) | |
1129 @end example | |
1130 | |
1131 If your parser is only good for a few types of files, make sure that it | |
1132 is either a buffer local modification, or that the tag generator returns | |
32702
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
1133 @code{t} for non valid buffers. |
32674 | 1134 |
33079 | 1135 @node Creating a display, , Tagging Extensions, Extending |
32674 | 1136 @section Creating a display |
1137 @cindex creating a display | |
1138 | |
1139 Rendering a display in speedbar is completely flexible. When your | |
32702
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
1140 button function is called, see @ref{Minor Display Modes}, and @ref{Major |
32674 | 1141 Display Modes}, you have control to @code{insert} anything you want. |
1142 | |
1143 The conventions allow almost anything to be inserted, but several helper | |
1144 functions are provided to make it easy to create the standardized | |
1145 buttons. | |
1146 | |
34238 | 1147 To understand the built in functions, each `button' in speedbar consists |
32674 | 1148 of four important pieces of data. The text to be displayed, token |
1149 data to be associated with the text, a function to call, and some face to | |
1150 display it in. | |
1151 | |
1152 When a function is provided, then that text becomes mouse activated, | |
1153 meaning the mouse will highlight the text. | |
1154 | |
1155 Additionally, for data which can form deep trees, each line is given a | |
1156 depth which indicates how far down the tree it is. This information is | |
1157 stored in invisible text at the beginning of each line, and is used by | |
1158 the navigation commands. | |
1159 | |
32702
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
1160 @defun speedbar-insert-button text face mouse function &optional token prevline |
32674 | 1161 This function inserts one button into the current location. |
1162 @var{text} is the text to insert. @var{face} is the face in which it | |
1163 will be displayed. @var{mouse} is the face to display over the text | |
1164 when the mouse passes over it. @var{function} is called whenever the | |
1165 user clicks on the text. | |
1166 | |
1167 The optional argument @var{token} is extra data to associated with the | |
57912
4ac46dccac25
Replace non-nil with non-@code{nil}.
Jan Djärv <jan.h.d@swipnet.se>
parents:
54836
diff
changeset
|
1168 text. Lastly @var{prevline} should be non-@code{nil} if you want this line to |
32674 | 1169 appear directly after the last button which was created instead of on |
1170 the next line. | |
1171 @end defun | |
1172 | |
1173 @defun speedbar-make-tag-line exp-button-type exp-button-char exp-button-function exp-button-data tag-button tag-button-function tag-button-data tag-button-face depth | |
1174 | |
1175 Create a tag line with @var{exp-button-type} for the small expansion | |
1176 button. This is the button that expands or contracts a node (if | |
32702
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
1177 applicable), and @var{exp-button-char} the character in it (@samp{+}, |
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
1178 @samp{-}, @samp{?}, |
32674 | 1179 etc). @var{exp-button-function} is the function to call if it's clicked |
1180 on. Button types are @code{'bracket}, @code{'angle}, @code{'curly}, | |
1181 @code{'expandtag}, @code{'statictag}, or nil. @var{exp-button-data} is | |
1182 extra data attached to the text forming the expansion button. | |
1183 | |
1184 Next, @var{tag-button} is the text of the tag. | |
1185 @var{tag-button-function} is the function to call if clicked on, and | |
1186 @var{tag-button-data} is the data to attach to the text field (such a | |
1187 tag positioning, etc). @var{tag-button-face} is a face used for this | |
1188 type of tag. | |
1189 | |
1190 Lastly, @var{depth} shows the depth of expansion. | |
1191 | |
1192 This function assumes that the cursor is in the speedbar window at the | |
33079 | 1193 position to insert a new item, and that the new item will end with a CR. |
32674 | 1194 @end defun |
1195 | |
1196 @defun speedbar-insert-generic-list level list expand-fun find-fun | |
1197 | |
32702
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
1198 At @var{level}, (the current indentation level desired) insert a generic |
32674 | 1199 multi-level alist @var{list}. Associations with lists get @samp{@{+@}} |
1200 tags (to expand into more nodes) and those with positions or other data | |
32702
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
1201 just get a @samp{>} as the indicator. @samp{@{+@}} buttons will have the |
32674 | 1202 function @var{expand-fun} and the token is the @code{cdr} list. The |
1203 token name will have the function @var{find-fun} and not token. | |
1204 | |
1205 Each element of the list can have one of these forms: | |
32702
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
1206 |
32674 | 1207 @table @code |
32702
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
1208 @item (@var{name} . marker-or-number) |
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
1209 One tag at this level. |
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
1210 @item (@var{name} (@var{name} . marker-or-number) (@var{name} . marker-or-number) ... ) |
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
1211 One group of tags. |
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
1212 @item (@var{name} marker-or-number (@var{name} . marker-or-number) ... ) |
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
1213 One Group of tags where the group has a starting position. |
32674 | 1214 @end table |
1215 | |
1216 When you use @code{speedbar-insert-generic-list}, there are some | |
1217 variables you can set buffer-locally to change the behavior. The most | |
1218 obvious is @code{speedbar-tag-hierarchy-method}. | |
1219 @xref{Tag Hierarchy Methods}. | |
1220 | |
1221 @defvar speedbar-generic-list-group-expand-button-type | |
32702
788c194fbcd1
Correct typos, fix markup, add index entries.
Eli Zaretskii <eliz@gnu.org>
parents:
32674
diff
changeset
|
1222 This is the button type used for groups of tags, whether expanded |
32674 | 1223 or added in via a hierarchy method. Two good values are |
1224 @code{'curly} and @code{'expandtag}. Curly is the default button, and | |
1225 @code{'expandtag} is useful if the groups also has a position. | |
1226 @end defvar | |
1227 | |
1228 @defvar speedbar-generic-list-tag-button-type | |
1229 This is the button type used for a single tag. | |
1230 Two good values are @code{nil} and @code{'statictag}. | |
1231 @code{nil} is the default, and @code{'statictag} has the same width as | |
1232 @code{'expandtag}. | |
1233 @end defvar | |
1234 | |
1235 @end defun | |
1236 | |
1237 @node Index, , Extending, Top | |
1238 @comment node-name, next, previous, up | |
1239 @unnumbered Concept Index | |
1240 @printindex cp | |
1241 | |
1242 @bye | |
39267 | 1243 @c LocalWords: speedbar's xref slowbar kbd subsubsection |
32674 | 1244 @c LocalWords: keybindings |
52401 | 1245 |
1246 @ignore | |
1247 arch-tag: e1fc85f0-1eeb-489f-a8d4-a2bfe711fa02 | |
1248 @end ignore |