Update the list of supported language environments.
[bpt/emacs.git] / man / ebrowse.texi
1 \input texinfo @c -*-texinfo-*-
2
3 @comment %**start of header
4 @setfilename ../info/ebrowse
5 @settitle A Class Browser for C++
6 @setchapternewpage odd
7 @syncodeindex fn cp
8 @comment %**end of header
9
10 @ifinfo
11 @direntry
12 * Ebrowse:: A C++ class browser for Emacs.
13 @end direntry
14
15 This file documents Ebrowse, a C++ class browser for GNU Emacs.
16
17 Copyright @copyright{} 1992--1999, 2000 Free Software Foundation, Inc.
18
19 Permission is granted to make and distribute verbatim copies of
20 this manual provided the copyright notice and this permission notice
21 are preserved on all copies.
22
23 @ignore
24 Permission is granted to process this file through TeX and print the
25 results, provided the printed document carries copying permission
26 notice identical to this one except for the removal of this paragraph
27 (this paragraph not being relevant to the printed manual).
28
29 @end ignore
30 Permission is granted to copy and distribute modified versions of this
31 manual under the conditions for verbatim copying, provided also that the
32 sections entitled ``The GNU Manifesto'', ``Distribution'' and ``GNU
33 General Public License'' are included exactly as in the original, and
34 provided that the entire resulting derived work is distributed under the
35 terms of a permission notice identical to this one.
36
37 Permission is granted to copy and distribute translations of this manual
38 into another language, under the above conditions for modified versions,
39 except that the sections entitled ``The GNU Manifesto'',
40 ``Distribution'' and ``GNU General Public License'' may be included in a
41 translation approved by the Free Software Foundation instead of in the
42 original English.
43 @end ifinfo
44
45 @iftex
46 @titlepage
47 @title Ebrowse User's Manual
48 @sp 4
49 @subtitle Ebrowse/Emacs 21
50 @sp 1
51 @subtitle May 2000
52 @sp 5
53 @author Gerd Moellmann
54 @page
55
56 @vskip 0pt plus 1filll
57 @noindent
58 Copyright @copyright{} 2000 Free Software Foundation, Inc.
59
60 Permission is granted to make and distribute verbatim copies of
61 this manual provided the copyright notice and this permission notice
62 are preserved on all copies.
63 @end titlepage
64 @page
65 @end iftex
66
67 @node Top, Overview, (dir), (dir)
68
69 @ifnottex
70 You can browse C++ class hierarchies from within Emacs by using
71 Ebrowse.
72 @end ifnottex
73
74 @menu
75 * Overview:: What is it and now does it work?
76 * Generating browser files:: How to process C++ source files
77 * Loading a Tree:: How to start browsing
78 * Tree Buffers:: Traversing class hierarchies
79 * Member Buffers:: Looking at member information
80 * Tags-like Functions:: Finding members from source files
81 * Concept Index:: An entry for each concept defined
82 @end menu
83
84
85
86
87 @node Overview, Generating browser files, Top, Top
88 @chapter Introduction
89
90 When working in software projects using C++, I frequently missed
91 software support for two things:
92
93 @itemize @bullet
94 @item
95 When you get a new class library, or you have to work on source code you
96 haven't written yourself (or written sufficiently long ago), you need a
97 tool to let you navigate class hierarchies and investigate
98 features of the software. Without such a tool you often end up
99 @command{grep}ing through dozens or even hundreds of files.
100
101 @item
102 Once you are productive, it would be nice to have a tool that knows your
103 sources and can help you while you are editing source code. Imagine to
104 be able to jump to the definition of an identifier while you are
105 editing, or something that can complete long identifier names because it
106 knows what identifiers are defined in your program@dots{}.
107 @end itemize
108
109 The design of Ebrowse reflects these two needs.
110
111 How does it work?
112
113 @cindex parser for C++ sources
114 A fast parser written in C is used to process C++ source files.
115 The parser generates a data base containing information about classes,
116 members, global functions, defines, types etc.@: found in the sources.
117
118 The second part of Ebrowse is a Lisp program. This program reads
119 the data base generated by the parser. It displays its contents in
120 various forms and allows you to perform operations on it, or do
121 something with the help of the knowledge contained in the data base.
122
123 @cindex major modes, of Ebrowse buffers
124 @dfn{Navigational} use of Ebrowse is centered around two
125 types of buffers which define their own major modes:
126
127 @cindex tree buffer
128 @dfn{Tree buffers} are used to view class hierarchies in tree form.
129 They allow you to quickly find classes, find or view class declarations,
130 perform operations like query replace on sets of your source files, and
131 finally tree buffers are used to produce the second buffer form---member
132 buffers. @xref{Tree Buffers}.
133
134 @cindex member buffer
135 Members are displayed in @dfn{member buffers}. Ebrowse
136 distinguishes between six different types of members; each type is
137 displayed as a member list of its own:
138
139 @itemize @bullet
140 @item
141 Instance member variables;
142
143 @item
144 Instance member functions;
145
146 @item
147 Static member variables;
148
149 @item
150 Static member functions;
151
152 @item
153 Friends/Defines. The list of defines is contained in the friends
154 list of the pseudo-class @samp{*Globals*};
155
156 @item
157 Types (@code{enum}s, and @code{typedef}s defined with class
158 scope).@refill
159 @end itemize
160
161 You can switch member buffers from one list to another, or to another
162 class. You can include inherited members in the display, you can set
163 filters that remove categories of members from the display, and most
164 importantly you can find or view member declarations and definitions
165 with a keystroke. @xref{Member Buffers}.
166
167 These two buffer types and the commands they provide support the
168 navigational use of the browser. The second form resembles Emacs' Tags
169 package for C and other procedural languages. Ebrowse's commands of
170 this type are not confined to special buffers; they are most often used
171 while you are editing your source code.
172
173 To list just a subset of what you can use the Tags part of Ebrowse for:
174
175 @itemize @bullet
176 @item
177 Jump to the definition or declaration of an identifier in your source
178 code, with an electric position stack that lets you easily navigate
179 back and forth.
180
181 @item
182 Complete identifiers in your source with a completion list containing
183 identifiers from your source code only.
184
185 @item
186 Perform search and query replace operations over some or all of your
187 source files.
188
189 @item
190 Show all identifiers matching a regular expression---and jump to one of
191 them, if you like.
192 @end itemize
193
194
195
196
197 @node Generating browser files, Loading a Tree, Overview, Top
198 @comment node-name, next, previous, up
199 @chapter Processing Source Files
200
201 @cindex @command{ebrowse}, the program
202 @cindex class data base creation
203 Before you can start browsing a class hierarchy, you must run the parser
204 @command{ebrowse} on your source files in order to generate a Lisp data
205 base describing your program.
206
207 @cindex command line for @command{ebrowse}
208 The operation of @command{ebrowse} can be tailored with command line
209 options. Under normal circumstances it suffices to let the parser use
210 its default settings. If you want to do that, call it with a command
211 line like:
212
213 @example
214 ebrowse *.h *.cc
215 @end example
216
217 @noindent
218 or, if your shell doesn't allow all the file names to be specified on
219 the command line,
220
221 @example
222 ebrowse --files=@var{file}
223 @end example
224
225 @noindent
226 where @var{file} contains the names of the files to be parsed, one
227 per line.
228
229 @findex --help
230 When invoked with option @samp{--help}, @command{ebrowse} prints a list of
231 available command line options.@refill
232
233 @menu
234 * Input files:: Specifying which files to parse
235 * Output file:: Changing the output file name
236 * Structs and unions:: Omitting @code{struct}s and @code{union}s
237 * Matching:: Setting regular expression lengths
238 * Verbosity:: Getting feedback for lengthy operations
239 @end menu
240
241
242
243
244 @comment name, next, prev, up
245 @node Input files, Output file, Generating browser files, Generating browser files
246 @section Specifying Input Files
247
248 @table @samp
249 @cindex input files, for @command{ebrowse}
250 @item file
251 Each file name on the command line tells @command{ebrowse} to parse
252 that file.
253
254 @cindex response files
255 @findex --files
256 @item --files=@var{file}
257 This command line switch specifies that @var{file} contains a list of
258 file names to parse. Each line in @var{file} must contain one file
259 name. More than one option of this kind is allowed. You might, for
260 instance, want to use one file for header files, and another for source
261 files.
262
263 @cindex standard input, specifying input files
264 @item standard input
265 When @command{ebrowse} finds no file names on the command line, and no
266 @samp{--file} option is specified, it reads file names from standard
267 input. This is sometimes convenient when @command{ebrowse} is used as part
268 of a command pipe.
269
270 @findex --search-path
271 @item --search-path=@var{paths}
272 This option lets you specify search paths for your input files.
273 @var{paths} is a list of directory names, separated from each other by a
274 either a colon or a semicolon, depending on the operating system.
275 @end table
276
277 @cindex header files
278 @cindex friend functions
279 It is generally a good idea to specify input files so that header files
280 are parsed before source files. This facilitates the parser's work of
281 properly identifying friend functions of a class.
282
283
284
285 @comment name, next, prev, up
286 @node Output file, Structs and unions, Input files, Generating browser files
287 @section Changing the Output File Name
288
289 @table @samp
290 @cindex output file name
291 @findex --output-file
292 @cindex @file{BROWSE} file
293 @item --output-file=@var{file}
294 This option instructs @command{ebrowse} to generate a Lisp data base with
295 name @var{file}. By default, the data base is named @file{BROWSE}, and
296 is written in the directory in which @command{ebrowse} is invoked.
297
298 If you regularly use data base names different from the default, you
299 might want to add this to your init file:
300
301 @lisp
302 (add-to-list 'auto-mode-alist '(@var{NAME} . ebrowse-tree-mode))
303 @end lisp
304
305 @noindent
306 where @var{NAME} is the Lisp data base name you are using.
307
308 @findex --append
309 @cindex appending output to class data base
310 @item --append
311 By default, each run of @command{ebrowse} erases the old contents of the
312 output file when writing to it. You can instruct @command{ebrowse} to
313 append its output to an existing file with this command line option.
314 @end table
315
316
317
318
319 @comment name, next, prev, up
320 @node Structs and unions, Matching, Output file, Generating browser files
321 @section Structs and Unions
322 @cindex structs
323 @cindex unions
324
325 @table @samp
326 @findex --no-structs-or-unions
327 @item --no-structs-or-unions
328 This switch suppresses all classes in the data base declared as
329 @code{struct} or @code{union} in the output.
330
331 This is mainly useful when you are converting an existing
332 C program to C++, and do not want to see the old C structs in a class
333 tree.
334 @end table
335
336
337
338
339 @comment name, next, prev, up
340 @node Matching, Verbosity, Structs and unions, Generating browser files
341 @section Regular Expressions
342
343 @cindex regular expressions, recording
344 The parser @command{ebrowse} normally writes regular expressions to its
345 output file that help the Lisp part of Ebrowse to find functions,
346 variables etc.@: in their source files.
347
348 You can instruct @command{ebrowse} to omit these regular expressions by
349 calling it with the command line switch @samp{--no-regexps}.
350
351 When you do this, the Lisp part of Ebrowse tries to guess, from member
352 or class names, suitable regular expressions to locate that class or
353 member in source files. This works fine in most cases, but the
354 automatic generation of regular expressions can be too weak if unusual
355 coding styles are used.
356
357 @table @samp
358 @findex --no-regexps
359 @item --no-regexps
360 This option turns off regular expression recording.
361
362 @findex --min-regexp-length
363 @cindex minimum regexp length for recording
364 @item --min-regexp-length=@var{n}
365 The number @var{n} following this option specifies the minimum length of
366 the regular expressions recorded to match class and member declarations
367 and definitions. The default value is set at compilation time of
368 @command{ebrowse}.
369
370 The smaller the minimum length, the higher the probability that
371 Ebrowse will find a wrong match. The larger the value, the
372 larger the output file and therefore the memory consumption once the
373 file is read from Emacs.
374
375 @findex --max-regexp-length
376 @cindex maximum regexp length for recording
377 @item --max-regexp-length=@var{n}
378 The number following this option specifies the maximum length of the
379 regular expressions used to match class and member declarations and
380 definitions. The default value is set at compilation time of
381 @command{ebrowse}.
382
383 The larger the maximum length, the higher the probability that the
384 browser will find a correct match, but the larger the value the larger
385 the output file and therefore the memory consumption once the data is
386 read. As a second effect, the larger the regular expression, the higher
387 the probability that it will no longer match after editing the file.
388 @end table
389
390
391
392
393 @node Verbosity, , Matching, Generating browser files
394 @comment node-name, next, previous, up
395 @section Verbose Mode
396 @cindex verbose operation
397
398 @table @samp
399 @findex --verbose
400 @item --verbose
401 When this option is specified on the command line, @command{ebrowse} prints
402 a period for each file parsed, and it displays a @samp{+} for each
403 class written to the output file.
404
405 @findex --very-verbose
406 @item --very-verbose
407 This option makes @command{ebrowse} print out the names of the files and
408 the names of the classes seen.
409 @end table
410
411
412
413
414 @node Loading a Tree, Tree Buffers, Generating browser files, Top
415 @comment node-name, next, previous, up
416 @chapter Starting to Browse
417 @cindex loading
418 @cindex browsing
419
420 You start browsing a class hierarchy parsed by @command{ebrowse} by just
421 finding the @file{BROWSE} file with @kbd{C-x C-f}.
422
423 An example of a tree buffer display is shown below.
424
425 @example
426 | Collection
427 | IndexedCollection
428 | Array
429 | FixedArray
430 | Set
431 | Dictionary
432 @end example
433
434 @cindex mouse highlight in tree buffers
435 When you run Emacs on a display which supports colors and the mouse, you
436 will notice that that certain areas in the tree buffer are highlighted
437 when you move the mouse over them. This highlight marks mouse-sensitive
438 regions in the buffer. Please notice the help strings in the echo area
439 when the mouse moves over a sensitive region.
440
441 @cindex context menu
442 A click with @kbd{mouse-3} on a mouse-sensitive region opens a context
443 menu. In addition to this, each buffer also has a buffer-specific menu
444 that is opened with a click with @kbd{mouse-3} somewhere in the buffer
445 where no highlight is displayed.
446
447
448
449 @comment ****************************************************************
450 @comment ***
451 @comment *** TREE BUFFERS
452 @comment ***
453 @comment ****************************************************************
454
455 @node Tree Buffers, Member Buffers, Loading a Tree, Top
456 @comment node-name, next, previous, up
457 @chapter Tree Buffers
458 @cindex tree buffer mode
459 @cindex class trees
460
461 Class trees are displayed in @dfn{tree buffers} which install their own
462 major mode. Most Emacs keys work in tree buffers in the usual way,
463 e.g.@: you can move around in the buffer with the usual @kbd{C-f},
464 @kbd{C-v} etc., or you can search with @kbd{C-s}.
465
466 Tree-specific commands are bound to simple keystrokes, similar to
467 @code{Gnus}. You can take a look at the key bindings by entering
468 @kbd{?} which calls @code{M-x describe-mode} in both tree and member
469 buffers.
470
471 @menu
472 * Source Display:: Viewing and finding a class declaration
473 * Member Display:: Showing members, switching to member buffers
474 * Go to Class:: Finding a class
475 * Quitting:: Discarding and burying the tree buffer
476 * File Name Display:: Showing file names in the tree
477 * Expanding and Collapsing:: Expanding and collapsing branches
478 * Tree Indentation:: Changing the tree indentation
479 * Killing Classes:: Removing class from the tree
480 * Saving a Tree:: Saving a modified tree
481 * Statistics:: Displaying class tree statistics
482 * Marking Classes:: Marking and unmarking classes
483 @end menu
484
485
486
487 @node Source Display, Member Display, Tree Buffers, Tree Buffers
488 @comment node-name, next, previous, up
489 @section Viewing and Finding Class Declarations
490 @cindex viewing, class
491 @cindex finding a class
492 @cindex class declaration
493
494 You can view or find a class declaration when the cursor is on a class
495 name.
496
497 @table @kbd
498 @item SPC
499 This command views the class declaration if the database
500 contains informations about it. If you don't parse the entire source
501 you are working on, some classes will only be known to exist but the
502 location of their declarations and definitions will not be known.@refill
503
504 @item RET
505 Works like @kbd{SPC}, except that it finds the class
506 declaration rather than viewing it, so that it is ready for
507 editing.@refill
508 @end table
509
510 The same functionality is available from the menu opened with
511 @kbd{mouse-3} on the class name.
512
513
514
515
516 @node Member Display, Go to Class, Source Display, Tree Buffers
517 @comment node-name, next, previous, up
518 @section Displaying Members
519 @cindex @samp{*Members*} buffer
520 @cindex @samp{*Globals*}
521 @cindex freezing a member buffer
522 @cindex member lists, in tree buffers
523
524 Ebrowse distinguishes six different kinds of members, each of
525 which is displayed as a separate @dfn{member list}: instance variables,
526 instance functions, static variables, static functions, friend
527 functions, and types.
528
529 Each of these lists can be displayed in a member buffer with a command
530 starting with @kbd{L} when the cursor is on a class name. By default,
531 there is only one member buffer named @dfn{*Members*} that is reused
532 each time you display a member list---this has proven to be more
533 practical than to clutter up the buffer list with dozens of member
534 buffers.
535
536 If you want to display more than one member list at a time you can
537 @dfn{freeze} its member buffer. Freezing a member buffer prevents it
538 from being overwritten the next time you display a member list. You can
539 toggle this buffer status at any time.
540
541 Every member list display command in the tree buffer can be used with a
542 prefix argument (@kbd{C-u}). Without a prefix argument, the command will
543 pop to a member buffer displaying the member list. With prefix argument,
544 the member buffer will additionally be @dfn{frozen}.
545
546 @table @kbd
547 @cindex instance member variables, list
548 @item L v
549 This command displays the list of instance member variables.
550
551 @cindex static variables, list
552 @item L V
553 Display the list of static variables.
554
555 @cindex friend functions, list
556 @item L d
557 Display the list of friend functions. This list is used for defines if
558 you are viewing the class @samp{*Globals*} which is a place holder for
559 global symbols.
560
561 @cindex member functions, list
562 @item L f
563 Display the list of member functions.
564
565 @cindex static member functions, list
566 @item L F
567 Display the list of static member functions.
568
569 @cindex types, list
570 @item L t
571 Display a list of types.
572 @end table
573
574 These lists are also available from the class' context menu invoked with
575 @kbd{mouse-3} on the class name.
576
577
578
579
580 @node Go to Class, Quitting, Member Display, Tree Buffers
581 @comment node-name, next, previous, up
582 @section Finding a Class
583 @cindex locate class
584 @cindex expanding branches
585 @cindex class location
586
587 @table @kbd
588 @cindex search for class
589 @item /
590 This command reads a class name from the minibuffer with completion and
591 positions the cursor on the class in the class tree.
592
593 If the branch of the class tree containing the class searched for is
594 currently collapsed, the class itself and all its base classes are
595 recursively made visible. (See also @ref{Expanding and
596 Collapsing}.)@refill
597
598 This function is also available from the tree buffer's context menu.
599
600 @item n
601 Repeat the last search done with @kbd{/}. Each tree buffer has its own
602 local copy of the regular expression last searched in it.
603 @end table
604
605
606
607
608 @node Quitting, File Name Display, Go to Class, Tree Buffers
609 @comment node-name, next, previous, up
610 @section Burying a Tree Buffer
611 @cindex burying tree buffer
612
613 @table @kbd
614 @item q
615 Is a synonym for @kbd{M-x bury-buffer}.
616 @end table
617
618
619
620
621 @node File Name Display, Expanding and Collapsing, Quitting, Tree Buffers
622 @comment node-name, next, previous, up
623 @section Displaying File Names
624
625 @table @kbd
626 @cindex file names in tree buffers
627 @item T f
628 This command toggles the display of file names in a tree buffer. If
629 file name display is switched on, the names of the files containing the
630 class declaration are shown to the right of the class names. If the
631 file is not known, the string @samp{unknown} is displayed.
632
633 This command is also provided in the tree buffer's context menu.
634
635 @item s
636 Display file names for the current line, or for the number of lines
637 given by a prefix argument.
638 @end table
639
640 Here is an example of a tree buffer with file names displayed.
641
642 @example
643 | Collection (unknown)
644 | IndexedCollection (indexedcltn.h)
645 | Array (array.h)
646 | FixedArray (fixedarray.h)
647 | Set (set.h)
648 | Dictionary (dict.h)
649 @end example
650
651
652
653
654 @node Expanding and Collapsing, Tree Indentation, File Name Display, Tree Buffers
655 @comment node-name, next, previous, up
656 @section Expanding and Collapsing a Tree
657 @cindex expand tree branch
658 @cindex collapse tree branch
659 @cindex branches of class tree
660 @cindex class tree, collapse or expand
661
662 You can expand and collapse parts of a tree to reduce the complexity of
663 large class hierarchies. Expanding or collapsing branches of a tree has
664 no impact on the functionality of other commands, like @kbd{/}. (See
665 also @ref{Go to Class}.)@refill
666
667 Collapsed branches are indicated with an ellipsis following the class
668 name like in the example below.
669
670 @example
671 | Collection
672 | IndexedCollection...
673 | Set
674 | Dictionary
675 @end example
676
677 @table @kbd
678 @item -
679 This command collapses the branch of the tree starting at the class the
680 cursor is on.
681
682 @item +
683 This command expands the branch of the tree starting at the class the
684 cursor is on. Both commands for collapsing and expanding branches are
685 also available from the class' object menu.
686
687 @item *
688 This command expands all collapsed branches in the tree.
689 @end table
690
691
692
693
694 @node Tree Indentation, Killing Classes, Expanding and Collapsing, Tree Buffers
695 @comment node-name, next, previous, up
696 @section Changing the Tree Indentation
697 @cindex tree indentation
698 @cindex indentation of the tree
699
700 @table @kbd
701 @item T w
702 This command reads a new indentation width from the minibuffer and
703 redisplays the tree buffer with the new indentation It is also
704 available from the tree buffer's context menu.
705 @end table
706
707
708
709
710 @node Killing Classes, Saving a Tree, Tree Indentation, Tree Buffers
711 @comment node-name, next, previous, up
712 @section Removing Classes from the Tree
713 @cindex killing classes
714 @cindex class, remove from tree
715
716 @table @kbd
717 @item C-k
718 This command removes the class the cursor is on and all its derived
719 classes from the tree. The user is asked for confirmation before the
720 deletion is actually performed.
721 @end table
722
723
724
725
726 @node Saving a Tree, Statistics, Killing Classes, Tree Buffers
727 @comment node-name, next, previous, up
728 @comment node-name, next, previous, up
729 @section Saving a Tree
730 @cindex save tree to a file
731 @cindex tree, save to a file
732 @cindex class tree, save to a file
733
734 @table @kbd
735 @item C-x C-s
736 This command writes a class tree to the file from which it was read.
737 This is useful after classes have been deleted from a tree.
738
739 @item C-x C-w
740 Writes the tree to a file whose name is read from the minibuffer.
741 @end table
742
743
744
745
746 @node Statistics, Marking Classes, Saving a Tree, Tree Buffers
747 @comment node-name, next, previous, up
748 @cindex statistics for a tree
749 @cindex tree statistics
750 @cindex class statistics
751
752 @table @kbd
753 @item x
754 Display statistics for the tree, like number of classes in it, number of
755 member functions, etc. This command can also be found in the buffer's
756 context menu.
757 @end table
758
759
760
761
762 @node Marking Classes, , Statistics, Tree Buffers
763 @comment node-name, next, previous, up
764 @cindex marking classes
765 @cindex operations on marked classes
766
767 Classes can be marked for operations similar to the standard Emacs
768 commands @kbd{M-x tags-search} and @kbd{M-x tags-query-replace} (see
769 also @xref{Tags-like Functions}.)@refill
770
771 @table @kbd
772 @cindex toggle mark
773 @item M t
774 Toggle the mark of the line point is in or for as many lines as given by
775 a prefix command. This command can also be found in the class' context
776 menu.
777
778 @cindex unmark all
779 @item M a
780 Unmark all classes. With prefix argument @kbd{C-u}, mark all classes in
781 the tree. Since this command operates on the whole buffer, it can also be
782 found in the buffer's object menu.
783 @end table
784
785 Marked classes are displayed with an @code{>} in column one of the tree
786 display, like in the following example
787
788 @example
789 |> Collection
790 | IndexedCollection...
791 |> Set
792 | Dictionary
793 @end example
794
795
796
797
798 @c ****************************************************************
799 @c ***
800 @c *** MEMBER BUFFERS
801 @c ***
802 @c ****************************************************************
803
804 @node Member Buffers, Tags-like Functions, Tree Buffers, Top
805 @comment node-name, next, previous, up
806 @chapter Member Buffers
807 @cindex members
808 @cindex member buffer mode
809
810 @cindex class members, types
811 @cindex types of class members
812 @dfn{Member buffers} are used to operate on lists of members of a class.
813 Ebrowse distinguishes six kinds of lists:
814
815 @itemize @bullet
816 @item
817 Instance variables (normal member variables);
818 @item
819 Instance functions (normal member functions);
820 @item
821 Static variables;
822 @item
823 Static member functions;
824 @item
825 Friend functions;
826 @item
827 Types (@code{enum}s and @code{typedef}s defined with class scope.
828 Nested classes will be shown in the class tree like normal classes.
829 @end itemize
830
831 Like tree buffers, member buffers install their own major mode. Also
832 like in tree buffers, menus are provided for certain areas in the
833 buffer: members, classes, and the buffer itself.
834
835 @menu
836 * Switching Member Lists:: Choosing which members to display
837 * Finding/Viewing:: Modifying source code
838 * Inherited Members:: Display of Inherited Members
839 * Searching Members:: Finding members in member buffer
840 * Switching to Tree:: Going back to the tree buffer
841 * Filters:: Selective member display
842 * Attributes:: Display of @code{virtual} etc.
843 * Long and Short Display:: Comprehensive and verbose display
844 * Regexp Display:: Showing matching regular expressions
845 * Switching Classes:: Displaying another class
846 * Killing/Burying:: Getting rid of the member buffer
847 * Column Width:: Display style
848 * Redisplay:: Redrawing the member list
849 * Getting Help:: How to get help for key bindings
850 @end menu
851
852
853
854
855 @node Switching Member Lists, Finding/Viewing, Member Buffers, Member Buffers
856 @comment node-name, next, previous, up
857 @section Switching Member Lists
858 @cindex member lists, in member buffers
859 @cindex static members
860 @cindex friends
861 @cindex types
862 @cindex defines
863
864 @table @kbd
865 @cindex next member list
866 @item L n
867 This command switches the member buffer display to the next member list.
868
869 @cindex previous member list
870 @item L p
871 This command switches the member buffer display to the previous member
872 list.
873
874 @item L f
875 Switch to the list of member functions.
876
877 @cindex static
878 @item L F
879 Switch to the list of static member functions.
880
881 @item L v
882 Switch to the list of member variables.
883
884 @item L V
885 Switch to the list of static member variables.
886
887 @item L d
888 Switch to the list of friends or defines.
889
890 @item L t
891 Switch to the list of types.
892 @end table
893
894 Both commands cycle through the member list.
895
896 Most of the commands are also available from the member buffer's
897 context menu.
898
899
900
901
902 @node Finding/Viewing, Inherited Members, Switching Member Lists, Member Buffers
903 @comment node-name, next, previous, up
904 @section Finding and Viewing Member Source
905 @cindex finding members, in member buffers
906 @cindex viewing members, in member buffers
907 @cindex member definitions, in member buffers
908 @cindex member declarations, in member buffers
909 @cindex definition of a member, in member buffers
910 @cindex declaration of a member, in member buffers
911
912 @table @kbd
913 @item RET
914 This command finds the definition of the member the cursor is on.
915 Finding involves roughly the same as the standard Emacs tags facility
916 does---loading the file and searching for a regular expression matching
917 the member.
918
919 @item f
920 This command finds the declaration of the member the cursor is on.
921
922 @item SPC
923 This is the same command as @kbd{RET}, but views the member definition
924 instead of finding the member's source file.
925
926 @item v
927 This is the same command as @kbd{f}, but views the member's declaration
928 instead of finding the file the declaration is in.
929 @end table
930
931 You can install a hook function to perform actions after a member or
932 class declaration or definition has been found, or when it is not found.
933
934 All the commands described above can also be found in the context menu
935 displayed when clicking @kbd{mouse-2} on a member name.
936
937
938
939
940 @node Inherited Members, Searching Members, Finding/Viewing, Member Buffers
941 @comment node-name, next, previous, up
942 @section Display of Inherited Members
943 @cindex superclasses, members
944 @cindex base classes, members
945 @cindex inherited members
946
947 @table @kbd
948 @item D b
949 This command toggles the display of inherited members in the member
950 buffer. This is also in the buffer's context menu.
951 @end table
952
953
954
955
956 @node Searching Members, Switching to Tree, Inherited Members, Member Buffers
957 @comment node-name, next, previous, up
958 @section Searching Members
959 @cindex searching members
960
961 @table @kbd
962 @item G v
963 Position the cursor on a member whose name is read from the minibuffer;
964 only members shown in the current member buffer appear in the completion
965 list.
966
967 @item G m
968 Like the above command, but all members for the current class appear in
969 the completion list. If necessary, the current member list is switched
970 to the one containing the member.
971
972 With a prefix argument (@kbd{C-u}), all members in the class tree,
973 i.e.@: all members the browser knows about appear in the completion
974 list. The member display will be switched to the class and member list
975 containing the member.
976
977 @item G n
978 Repeat the last member search.
979 @end table
980
981 Look into the buffer's context menu for a convenient way to do this with
982 a mouse.
983
984
985
986 @node Switching to Tree, Filters, Searching Members, Member Buffers
987 @comment node-name, next, previous, up
988 @section Switching to Tree Buffer
989 @cindex tree buffer, switch to
990 @cindex buffer switching
991 @cindex switching buffers
992
993 @table @kbd
994 @item TAB
995 Pop up the tree buffer to which the member buffer belongs.
996
997 @item t
998 Do the same as @kbd{TAB} but also position the cursor on the class
999 displayed in the member buffer.
1000 @end table
1001
1002
1003
1004
1005 @node Filters, Attributes, Switching to Tree, Member Buffers
1006 @comment node-name, next, previous, up
1007 @section Filters
1008 @cindex filters
1009
1010 @table @kbd
1011 @cindex @code{public} members
1012 @item F a u
1013 This command toggles the display of @code{public} members. The
1014 @samp{a} stands for `access'.
1015
1016 @cindex @code{protected} members
1017 @item F a o
1018 This command toggles the display of @code{protected} members.
1019
1020 @cindex @code{private} members
1021 @item F a i
1022 This command toggles the display of @code{private} members.
1023
1024 @cindex @code{virtual} members
1025 @item F v
1026 This command toggles the display of @code{virtual} members.
1027
1028 @cindex @code{inline} members
1029 @item F i
1030 This command toggles the display of @code{inline} members.
1031
1032 @cindex @code{const} members
1033 @item F c
1034 This command toggles the display of @code{const} members.
1035
1036 @cindex pure virtual members
1037 @item F p
1038 This command toggles the display of pure virtual members.
1039
1040 @cindex remove filters
1041 @item F r
1042 This command removes all filters.
1043 @end table
1044
1045 These commands are also found in the buffer's context menu.
1046
1047
1048
1049
1050 @node Attributes, Long and Short Display, Filters, Member Buffers
1051 @comment node-name, next, previous, up
1052 @section Displaying Member Attributes
1053 @cindex attributes
1054 @cindex member attribute display
1055
1056 @table @kbd
1057 @item D a
1058 Toggle the display of member attributes (default is on).
1059
1060 The nine member attributes Ebrowse knows about are are displayed
1061 as a list a single-characters flags enclosed in angle brackets in front
1062 the of the member's name. A @samp{-} at a given position means that
1063 the attribute is false. The list of attributes from left to right is
1064
1065 @table @samp
1066 @cindex @code{template} attribute
1067 @item T
1068 The member is a template.
1069
1070 @cindex @code{extern "C"} attribute
1071 @item C
1072 The member is declared @code{extern "C"}.
1073
1074 @cindex @code{virtual} attribute
1075 @item v
1076 Means the member is declared @code{virtual}.
1077
1078 @cindex @code{inline}
1079 @item i
1080 The member is declared @code{inline}.
1081
1082 @cindex @code{const} attribute
1083 @item c
1084 The member is @code{const}.
1085
1086 @cindex pure virtual function attribute
1087 @item 0
1088 The member is a pure virtual function.
1089
1090 @cindex @code{mutable} attribute
1091 @item m
1092 The member is declared @code{mutable}.
1093
1094 @cindex @code{explicit} attribute
1095 @item e
1096 The member is declared @code{explicit}.
1097
1098 @item t
1099 The member is a function with a throw list.
1100 @end table
1101 @end table
1102
1103 This command is also in the buffer's context menu.
1104
1105
1106
1107 @node Long and Short Display, Regexp Display, Attributes, Member Buffers
1108 @comment node-name, next, previous, up
1109 @section Long and Short Member Display
1110 @cindex display form
1111 @cindex long display
1112 @cindex short display
1113
1114 @table @kbd
1115 @item D l
1116 This command toggles the member buffer between short and long display
1117 form. The short display form displays member names, only:
1118
1119 @example
1120 | isEmpty contains hasMember create
1121 | storeSize hash isEqual restoreGuts
1122 | saveGuts
1123 @end example
1124
1125 The long display shows one member per line with member name and regular
1126 expressions matching the member (if known):
1127
1128 @example
1129 | isEmpty Bool isEmpty () const...
1130 | hash unsigned hash () const...
1131 | isEqual int isEqual (...
1132 @end example
1133
1134 Regular expressions will only be displayed when the Lisp database has
1135 not been produced with the @command{ebrowse} option @samp{--no-regexps}.
1136 @xref{Matching, --no-regexps, Regular Expressions}.
1137 @end table
1138
1139
1140
1141
1142 @node Regexp Display, Switching Classes, Long and Short Display, Member Buffers
1143 @comment node-name, next, previous, up
1144 @section Display of Regular Expressions
1145 @cindex regular expression display
1146
1147 @table @kbd
1148 @item D r
1149 This command toggles the long display form from displaying the regular
1150 expressions matching the member declarations to those expressions
1151 matching member definitions.
1152 @end table
1153
1154 Regular expressions will only be displayed when the Lisp database has
1155 not been produced with the @command{ebrowse} option @samp{--no-regexps},
1156 see @ref{Matching, --no-regexps, Regular Expressions}.
1157
1158
1159
1160
1161 @node Switching Classes, Killing/Burying, Regexp Display, Member Buffers
1162 @comment node-name, next, previous, up
1163 @section Displaying Another Class
1164 @cindex base class, display
1165 @cindex derived class, display
1166 @cindex superclass, display
1167 @cindex subclass, display
1168 @cindex class display
1169
1170 @table @kbd
1171 @item C c
1172 This command lets you switch the member buffer to another class. It
1173 reads the name of the new class from the minibuffer with completion.
1174
1175 @item C b
1176 This is the same command as @kbd{C c} but restricts the classes shown in
1177 the completion list to immediate base classes, only. If only one base
1178 class exists, this one is immediately shown in the minibuffer.
1179
1180 @item C d
1181 Same as @kbd{C b}, but for derived classes.
1182
1183 @item C p
1184 Switch to the previous class in the class hierarchy on the same level as
1185 the class currently displayed.
1186
1187 @item C n
1188 Switch to the next sibling of the class in the class tree.
1189 @end table
1190
1191
1192
1193
1194 @node Killing/Burying, Column Width, Switching Classes, Member Buffers
1195 @comment node-name, next, previous, up
1196 @section Burying a Member Buffer
1197 @cindex burying member buffers
1198
1199 @table @kbd
1200 @item q
1201 This command is a synonym for @kbd{M-x bury-buffer}.
1202 @end table
1203
1204
1205
1206
1207 @node Column Width, Redisplay, Killing/Burying, Member Buffers
1208 @comment node-name, next, previous, up
1209 @section Setting the Column Width
1210 @cindex column width
1211 @cindex member indentation
1212 @cindex indentation, member
1213
1214 @table @kbd
1215 @item D w
1216 This command sets the column width depending on the display form used
1217 (long or short display).
1218 @end table
1219
1220
1221
1222
1223 @node Redisplay, Getting Help, Column Width, Member Buffers
1224 @comment node-name, next, previous, up
1225 @section Forced Redisplay
1226 @cindex redisplay of member buffers
1227
1228 @table @kbd
1229 @item C-l
1230 This command forces a redisplay of the member buffer. If the width
1231 of the window displaying the member buffer is changed this command
1232 redraws the member list with the appropriate column widths and number of
1233 columns.
1234 @end table
1235
1236
1237
1238
1239 @node Getting Help, , Redisplay, Member Buffers
1240 @comment node-name, next, previous, up
1241 @cindex help
1242
1243 @table @kbd
1244 @item ?
1245 This key is bound to @code{describe-mode}.
1246 @end table
1247
1248
1249
1250
1251 @comment **************************************************************
1252 @comment *** TAGS LIKE FUNCTIONS
1253 @comment **************************************************************
1254
1255 @node Tags-like Functions, Concept Index, Member Buffers, Top
1256 @comment node-name, next, previous, up
1257 @chapter Tags-like Functions
1258
1259 Ebrowse provides tags functions similar to those of the standard
1260 Emacs Tags facility, but better suited to the needs of C++ programmers.
1261
1262 @menu
1263 * Finding and Viewing:: Going to a member declaration/definition
1264 * Position Stack:: Moving to previous locations
1265 * Search & Replace:: Searching and replacing over class tree files
1266 * Members in Files:: Listing all members in a given file
1267 * Apropos:: Listing members matching a regular expression
1268 * Symbol Completion:: Completing names while editing
1269 * Member Buffer Display:: Quickly display a member buffer for some
1270 identifier
1271 @end menu
1272
1273
1274
1275 @node Finding and Viewing, Position Stack, Tags-like Functions, Tags-like Functions
1276 @comment node-name, next, previous, up
1277 @section Finding and Viewing Members
1278 @cindex finding class member, in C++ source
1279 @cindex viewing class member, in C++ source
1280 @cindex tags
1281 @cindex member definition, finding, in C++ source
1282 @cindex member declaration, finding, in C++ source
1283
1284 The functions in this section are similar to those described in
1285 @ref{Source Display}, and also in @ref{Finding/Viewing}, except that
1286 they work in a C++ source buffer, not in member and tree buffers created
1287 by Ebrowse.
1288
1289 @table @kbd
1290 @item C-c b f
1291 Find the definition of the member around point. If you invoke this
1292 function with a prefix argument, the declaration is searched.
1293
1294 If more than one class contains a member with the given name you can
1295 select the class with completion. If there is a scope declaration in
1296 front of the member name, this class name is used as initial input for
1297 the completion.
1298
1299 @item C-c b F
1300 Find the declaration of the member around point.
1301
1302 @item C-c b v
1303 View the definition of the member around point.
1304
1305 @item C-c b V
1306 View the declaration of the member around point.
1307
1308 @item C-c b 4 f
1309 Find a member's definition in another window.
1310
1311 @item C-c b 4 F
1312 Find a member's declaration in another window.
1313
1314 @item C-c b 4 v
1315 View a member's definition in another window.
1316
1317 @item C-c b 4 V
1318 View a member's declaration in another window.
1319
1320 @item C-c b 5 f
1321 Find a member's definition in another frame.
1322
1323 @item C-c b 5 F
1324 Find a member's declaration in another frame.
1325
1326 @item C-c b 5 v
1327 View a member's definition in another frame.
1328
1329 @item C-c b 5 V
1330 View a member's declaration in another frame.
1331 @end table
1332
1333
1334
1335 @node Position Stack, Search & Replace, Finding and Viewing, Tags-like Functions
1336 @comment node-name, next, previous, up
1337 @section The Position Stack
1338 @cindex position stack
1339
1340 When jumping to a member declaration or definition with one of
1341 Ebrowse's commands, the position from where you performed the
1342 jump and the position where you jumped to are recorded in a
1343 @dfn{position stack}. There are several ways in which you can quickly
1344 move to positions in the stack:@refill
1345
1346 @table @kbd
1347 @cindex return to original position
1348 @item C-c b -
1349 This command sets point to the previous position in the position stack.
1350 Directly after you performed a jump, this will put you back to the
1351 position where you came from.
1352
1353 The stack is not popped, i.e.@: you can always switch back and forth
1354 between positions in the stack. To avoid letting the stack grow to
1355 infinite size there is a maximum number of positions defined. When this
1356 number is reached, older positions are discarded when new positions are
1357 pushed on the stack.
1358
1359 @item C-c b +
1360 This command moves forward in the position stack, setting point to
1361 the next position stored in the position stack.
1362
1363 @item C-c b p
1364 Displays an electric buffer showing all positions saved in the stack.
1365 You can select a position by pressing @kbd{SPC} in a line. You can
1366 view a position with @kbd{v}.
1367 @end table
1368
1369
1370
1371
1372 @node Search & Replace, Members in Files, Position Stack, Tags-like Functions
1373 @comment node-name, next, previous, up
1374 @section Searching and Replacing
1375 @cindex searching multiple C++ files
1376 @cindex replacing in multiple C++ files
1377 @cindex restart tags-operation
1378
1379 Ebrowse allows you to perform operations on all or a subset of the files
1380 mentioned in a class tree. When you invoke one of the following
1381 functions and more than one class tree is loaded, you must choose a
1382 class tree to use from an electric tree menu. If the selected tree
1383 contains marked classes, the following commands operate on the files
1384 mentioned in the marked classes only. Otherwise all files in the class
1385 tree are used.
1386
1387 @table @kbd
1388 @item C-c b s
1389 This function performs a regular expression search in the chosen set of
1390 files.
1391
1392 @item C-c b u
1393 This command performs a search for calls of a given member which is
1394 selected in the usual way with completion.
1395
1396 @item C-c b %
1397 Perform a query replace over the set of files.
1398
1399 @item C-c b ,
1400 All three operations above stop when finding a match. You can restart
1401 the operation with this command.
1402
1403 @item C-c b n
1404 This restarts the last tags operation with the next file in the list.
1405 @end table
1406
1407
1408
1409
1410 @node Members in Files, Apropos, Search & Replace, Tags-like Functions
1411 @comment node-name, next, previous, up
1412 @section Members in Files
1413 @cindex files
1414 @cindex members in file, listing
1415 @cindex list class members in a file
1416 @cindex file, members
1417
1418 The command @kbd{C-c b l}, lists all members in a given file. The file
1419 name is read from the minibuffer with completion.
1420
1421
1422
1423
1424 @node Apropos, Symbol Completion, Members in Files, Tags-like Functions
1425 @comment node-name, next, previous, up
1426 @section Member Apropos
1427 @cindex apropos on class members
1428 @cindex members, matching regexp
1429
1430 The command @kbd{C-c b a} can be used to display all members matching a
1431 given regular expression. This command can be very useful if you
1432 remember only part of a member name, and not its beginning.
1433
1434 A special buffer is popped up containing all identifiers matching the
1435 regular expression, and what kind of symbol it is (e.g.@: a member
1436 function, or a type). You can then switch to this buffer, and use the
1437 command @kbd{C-c b f}, for example, to jump to a specific member.
1438
1439
1440
1441
1442 @node Symbol Completion, Member Buffer Display, Apropos, Tags-like Functions
1443 @comment node-name, next, previous, up
1444 @section Symbol Completion
1445 @cindex completion
1446 @cindex symbol completion
1447
1448 The command @kbd{C-c b TAB} completes the symbol in front of point.
1449
1450
1451
1452
1453 @node Member Buffer Display, , Symbol Completion, Tags-like Functions
1454 @section Quick Member Display
1455 @cindex member buffer, for member at point
1456
1457 You can quickly display a member buffer containing the member the cursor
1458 in on with the command @kbd{C-c b m}.
1459
1460
1461 @node Concept Index, , Tags-like Functions, Top
1462 @unnumbered Concept Index
1463 @printindex cp
1464
1465 @contents
1466 @bye