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