*** empty log message ***
[emacs.git] / man / ebrowse.texi
blob187046ce603dfed085575faca96fbd0330ebd0da
1 \input texinfo   @c -*-texinfo-*-
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
10 @ifinfo
11 @direntry 
12 * Ebrowse::   A C++ class browser for Emacs.
13 @end direntry
15 This file documents Ebrowse, a C++ class browser for GNU Emacs.
17 Copyright @copyright{} 1992--1999, 2000 Free Software Foundation, Inc.
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.
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).
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.
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
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
56 @vskip 0pt plus 1filll
57 @noindent
58 Copyright @copyright{} 2000 Free Software Foundation, Inc.
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
67 @node Top, Overview, (dir), (dir)
69 @ifnottex
70 You can browse C++ class hierarchies from within Emacs by using
71 Ebrowse.
72 @end ifnottex
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
87 @node Overview, Generating browser files, Top, Top
88 @chapter Introduction
90 When working in software projects using C++, I frequently missed
91 software support for two things:
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.
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
109 The design of Ebrowse reflects these two needs.
111 How does it work? 
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.
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.
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:
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}.
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:
139 @itemize @bullet
140 @item
141 Instance member variables;
143 @item
144 Instance member functions;
146 @item
147 Static member variables;
149 @item
150 Static member functions;
152 @item
153 Friends/Defines.  The list of defines is contained in the friends
154 list of the pseudo-class @samp{*Globals*};
156 @item
157 Types (@code{enum}s, and @code{typedef}s defined with class
158 scope).@refill
159 @end itemize
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}.
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.
173 To list just a subset of what you can use the Tags part of Ebrowse for:
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.
181 @item
182 Complete identifiers in your source with a completion list containing
183 identifiers from your source code only.
185 @item
186 Perform search and query replace operations over some or all of your
187 source files.
189 @item
190 Show all identifiers matching a regular expression---and jump to one of
191 them, if you like.
192 @end itemize
197 @node Generating browser files, Loading a Tree, Overview, Top
198 @comment node-name,  next,  previous,  up
199 @chapter Processing Source Files
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.
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:
213 @example
214 ebrowse *.h *.cc
215 @end example
217 @noindent
218 or, if your shell doesn't allow all the file names to be specified on
219 the command line,
221 @example
222 ebrowse --files=@var{file}
223 @end example
225 @noindent
226 where @var{file} contains the names of the files to be parsed, one
227 per line.
229 @findex --help
230 When invoked with option @samp{--help}, @command{ebrowse} prints a list of
231 available command line options.@refill
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
244 @comment name,     next,        prev,                     up
245 @node Input files, Output file, Generating browser files, Generating browser files
246 @section Specifying Input Files
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.
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.
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.
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
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.
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
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.
298 If you regularly use data base names different from the default, you
299 might want to add this to your init file:
301 @lisp
302 (add-to-list 'auto-mode-alist '(@var{NAME} . ebrowse-tree-mode))
303 @end lisp
305 @noindent 
306 where @var{NAME} is the Lisp data base name you are using.
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
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
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.
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
339 @comment name,  next,      prev,               up
340 @node Matching, Verbosity, Structs and unions, Generating browser files
341 @section Regular Expressions
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.
348 You can instruct @command{ebrowse} to omit these regular expressions by
349 calling it with the command line switch @samp{--no-regexps}.
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.
357 @table @samp
358 @findex --no-regexps
359 @item --no-regexps
360 This option turns off regular expression recording.
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}.
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.
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}.
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
393 @node Verbosity, , Matching, Generating browser files
394 @comment  node-name,  next,  previous,  up
395 @section Verbose Mode
396 @cindex verbose operation
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.
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
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
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}.
423 An example of a tree buffer display is shown below.
425 @example
426 |  Collection
427 |    IndexedCollection
428 |      Array
429 |        FixedArray
430 |    Set
431 |    Dictionary
432 @end example
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.
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.
449 @comment ****************************************************************
450 @comment ***
451 @comment ***                 TREE BUFFERS
452 @comment ***
453 @comment ****************************************************************
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
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}.
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.
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
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
494 You can view or find a class declaration when the cursor is on a class
495 name.
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
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
510 The same functionality is available from the menu opened with
511 @kbd{mouse-3} on the class name.
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
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.
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.
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.
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}.
546 @table @kbd
547 @cindex instance member variables, list
548 @item L v
549 This command displays the list of instance member variables.
551 @cindex static variables, list
552 @item L V
553 Display the list of static variables.
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.
561 @cindex member functions, list
562 @item L f
563 Display the list of member functions.
565 @cindex static member functions, list
566 @item L F
567 Display the list of static member functions.
569 @cindex types, list
570 @item L t
571 Display a list of types.
572 @end table
574 These lists are also available from the class' context menu invoked with
575 @kbd{mouse-3} on the class name.
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
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.
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
598 This function is also available from the tree buffer's context menu.
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
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
613 @table @kbd
614 @item q
615 Is a synonym for @kbd{M-x bury-buffer}.
616 @end table
621 @node File Name Display, Expanding and Collapsing, Quitting, Tree Buffers
622 @comment  node-name,  next,  previous,  up
623 @section Displaying File Names
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.
633 This command is also provided in the tree buffer's context menu.
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
640 Here is an example of a tree buffer with file names displayed.
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
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
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
667 Collapsed branches are indicated with an ellipsis following the class
668 name like in the example below.
670 @example
671 |  Collection
672 |    IndexedCollection...
673 |    Set
674 |    Dictionary
675 @end example
677 @table @kbd
678 @item -
679 This command collapses the branch of the tree starting at the class the
680 cursor is on. 
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.
687 @item *
688 This command expands all collapsed branches in the tree.
689 @end table
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
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
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
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
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
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.
739 @item  C-x C-w
740 Writes the tree to a file whose name is read from the minibuffer.
741 @end table
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
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
762 @node     Marking Classes, , Statistics, Tree Buffers
763 @comment  node-name,       next,       previous,      up
764 @cindex marking classes
765 @cindex operations on marked classes
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
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. 
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
785 Marked classes are displayed with an @code{>} in column one of the tree
786 display, like in the following example
788 @example
789 |> Collection
790 |    IndexedCollection...
791 |>   Set
792 |    Dictionary
793 @end example
798 @c ****************************************************************
799 @c ***
800 @c ***                 MEMBER BUFFERS
801 @c ***
802 @c ****************************************************************
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
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:
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
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.
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
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
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.
869 @cindex previous member list
870 @item L p
871 This command switches the member buffer display to the previous member
872 list.
874 @item L f
875 Switch to the list of member functions.
877 @cindex static 
878 @item L F
879 Switch to the list of static member functions.
881 @item L v
882 Switch to the list of member variables.
884 @item L V
885 Switch to the list of static member variables.
887 @item L d
888 Switch to the list of friends or defines.
890 @item L t
891 Switch to the list of types.
892 @end table
894 Both commands cycle through the member list.
896 Most of the commands are also available from the member buffer's 
897 context menu.
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
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.
919 @item f
920 This command finds the declaration of the member the cursor is on.
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.
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
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.
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.
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
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
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
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.
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.
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.
977 @item G n
978 Repeat the last member search.
979 @end table
981 Look into the buffer's context menu for a convenient way to do this with
982 a mouse.
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
993 @table @kbd
994 @item TAB
995 Pop up the tree buffer to which the member buffer belongs.
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
1005 @node Filters, Attributes, Switching to Tree, Member Buffers
1006 @comment  node-name,       next,       previous,      up
1007 @section Filters
1008 @cindex filters
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'.
1016 @cindex @code{protected} members
1017 @item F a o
1018 This command toggles the display of @code{protected} members.
1020 @cindex @code{private} members
1021 @item F a i
1022 This command toggles the display of @code{private} members.
1024 @cindex @code{virtual} members
1025 @item F v
1026 This command toggles the display of @code{virtual} members.
1028 @cindex @code{inline} members
1029 @item F i
1030 This command toggles the display of @code{inline} members.
1032 @cindex @code{const} members
1033 @item F c
1034 This command toggles the display of @code{const} members.
1036 @cindex pure virtual members
1037 @item F p
1038 This command toggles the display of pure virtual members.
1040 @cindex remove filters
1041 @item F r
1042 This command removes all filters.
1043 @end table
1045 These commands are also found in the buffer's context menu.
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
1056 @table @kbd
1057 @item D a
1058 Toggle the display of member attributes (default is on).
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
1065 @table @samp
1066 @cindex @code{template} attribute
1067 @item T
1068 The member is a template.
1070 @cindex @code{extern "C"} attribute
1071 @item C
1072 The member is declared @code{extern "C"}.
1074 @cindex @code{virtual} attribute
1075 @item v
1076 Means the member is declared @code{virtual}.
1078 @cindex @code{inline}
1079 @item i
1080 The member is declared @code{inline}.
1082 @cindex @code{const} attribute
1083 @item c
1084 The member is @code{const}.
1086 @cindex pure virtual function attribute
1087 @item 0
1088 The member is a pure virtual function.
1090 @cindex @code{mutable} attribute
1091 @item m
1092 The member is declared @code{mutable}.
1094 @cindex @code{explicit} attribute
1095 @item e
1096 The member is declared @code{explicit}.
1098 @item t
1099 The member is a function with a throw list.
1100 @end table
1101 @end table
1103 This command is also in the buffer's context menu.
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
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:
1119 @example
1120 | isEmpty        contains       hasMember      create
1121 | storeSize      hash           isEqual        restoreGuts
1122 | saveGuts
1123 @end example
1125 The long display shows one member per line with member name and regular
1126 expressions matching the member (if known):
1128 @example
1129 | isEmpty               Bool isEmpty () const...
1130 | hash                  unsigned hash () const...
1131 | isEqual               int isEqual (...
1132 @end example
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
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
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
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}.
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
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.
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.
1180 @item C d
1181 Same as @kbd{C b}, but for derived classes.
1183 @item C p
1184 Switch to the previous class in the class hierarchy on the same level as
1185 the class currently displayed.
1187 @item C n
1188 Switch to the next sibling of the class in the class tree.
1189 @end table
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
1199 @table @kbd
1200 @item q
1201 This command is a synonym for @kbd{M-x bury-buffer}.
1202 @end table
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
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
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
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
1239 @node Getting Help, , Redisplay, Member Buffers
1240 @comment  node-name,  next,  previous,  up
1241 @cindex help
1243 @table @kbd
1244 @item ?
1245 This key is bound to @code{describe-mode}.
1246 @end table
1251 @comment **************************************************************
1252 @comment ***                TAGS LIKE FUNCTIONS
1253 @comment **************************************************************
1255 @node Tags-like Functions, Concept Index, Member Buffers, Top
1256 @comment  node-name,       next,       previous,      up
1257 @chapter Tags-like Functions
1259 Ebrowse provides tags functions similar to those of the standard
1260 Emacs Tags facility, but better suited to the needs of C++ programmers.
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
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
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.
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.
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.
1299 @item C-c b F
1300 Find the declaration of the member around point.
1302 @item C-c b v
1303 View the definition of the member around point.
1305 @item C-c b V
1306 View the declaration of the member around point.
1308 @item C-c b 4 f
1309 Find a member's definition in another window.
1311 @item C-c b 4 F
1312 Find a member's declaration in another window.
1314 @item C-c b 4 v
1315 View a member's definition in another window.
1317 @item C-c b 4 V
1318 View a member's declaration in another window.
1320 @item C-c b 5 f
1321 Find a member's definition in another frame.
1323 @item C-c b 5 F
1324 Find a member's declaration in another frame.
1326 @item C-c b 5 v
1327 View a member's definition in another frame.
1329 @item C-c b 5 V
1330 View a member's declaration in another frame.
1331 @end table
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
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
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.
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.
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.
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
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
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.
1387 @table @kbd
1388 @item C-c b s
1389 This function performs a regular expression search in the chosen set of
1390 files.
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.
1396 @item C-c b %
1397 Perform a query replace over the set of files.
1399 @item C-c b ,
1400 All three operations above stop when finding a match.  You can restart
1401 the operation with this command.
1403 @item C-c b n
1404 This restarts the last tags operation with the next file in the list. 
1405 @end table
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
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.
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
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.
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.
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
1448 The command @kbd{C-c b TAB} completes the symbol in front of point.
1453 @node Member Buffer Display,  , Symbol Completion, Tags-like Functions
1454 @section Quick Member Display
1455 @cindex member buffer, for member at point
1457 You can quickly display a member buffer containing the member the cursor
1458 in on with the command @kbd{C-c b m}.
1461 @node Concept Index, , Tags-like Functions, Top
1462 @unnumbered Concept Index
1463 @printindex cp
1465 @contents
1466 @bye