1 \input texinfo @c -*-texinfo-*-
3 @comment %**start of header
4 @setfilename ../../info/ebrowse
5 @settitle A Class Browser for C++
8 @comment %**end of header
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, 2009, 2010 Free Software Foundation, Inc.
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.''
32 * Ebrowse: (ebrowse). A C++ class browser for Emacs.
36 @title Ebrowse User's Manual
38 @subtitle Ebrowse/Emacs
40 @author Gerd Moellmann
42 @vskip 0pt plus 1filll
49 @node Top, Overview, (dir), (dir)
51 You can browse C++ class hierarchies from within Emacs by using
58 * Overview:: What is it and how does it work?
59 * Generating browser files:: How to process C++ source files
60 * Loading a Tree:: How to start browsing
61 * Tree Buffers:: Traversing class hierarchies
62 * Member Buffers:: Looking at member information
63 * Tags-like Functions:: Finding members from source files
64 * GNU Free Documentation License:: The license for this documentation.
65 * Concept Index:: An entry for each concept defined
71 @node Overview, Generating browser files, Top, Top
74 When working in software projects using C++, I frequently missed
75 software support for two things:
79 When you get a new class library, or you have to work on source code you
80 haven't written yourself (or written sufficiently long ago), you need a
81 tool to let you navigate class hierarchies and investigate
82 features of the software. Without such a tool you often end up
83 @command{grep}ing through dozens or even hundreds of files.
86 Once you are productive, it would be nice to have a tool that knows your
87 sources and can help you while you are editing source code. Imagine to
88 be able to jump to the definition of an identifier while you are
89 editing, or something that can complete long identifier names because it
90 knows what identifiers are defined in your program@dots{}.
93 The design of Ebrowse reflects these two needs.
97 @cindex parser for C++ sources
98 A fast parser written in C is used to process C++ source files.
99 The parser generates a data base containing information about classes,
100 members, global functions, defines, types etc.@: found in the sources.
102 The second part of Ebrowse is a Lisp program. This program reads
103 the data base generated by the parser. It displays its contents in
104 various forms and allows you to perform operations on it, or do
105 something with the help of the knowledge contained in the data base.
107 @cindex major modes, of Ebrowse buffers
108 @dfn{Navigational} use of Ebrowse is centered around two
109 types of buffers which define their own major modes:
112 @dfn{Tree buffers} are used to view class hierarchies in tree form.
113 They allow you to quickly find classes, find or view class declarations,
114 perform operations like query replace on sets of your source files, and
115 finally tree buffers are used to produce the second buffer form---member
116 buffers. @xref{Tree Buffers}.
118 @cindex member buffer
119 Members are displayed in @dfn{member buffers}. Ebrowse
120 distinguishes between six different types of members; each type is
121 displayed as a member list of its own:
125 Instance member variables;
128 Instance member functions;
131 Static member variables;
134 Static member functions;
137 Friends/Defines. The list of defines is contained in the friends
138 list of the pseudo-class @samp{*Globals*};
141 Types (@code{enum}s, and @code{typedef}s defined with class
145 You can switch member buffers from one list to another, or to another
146 class. You can include inherited members in the display, you can set
147 filters that remove categories of members from the display, and most
148 importantly you can find or view member declarations and definitions
149 with a keystroke. @xref{Member Buffers}.
151 These two buffer types and the commands they provide support the
152 navigational use of the browser. The second form resembles Emacs' Tags
153 package for C and other procedural languages. Ebrowse's commands of
154 this type are not confined to special buffers; they are most often used
155 while you are editing your source code.
157 To list just a subset of what you can use the Tags part of Ebrowse for:
161 Jump to the definition or declaration of an identifier in your source
162 code, with an electric position stack that lets you easily navigate
166 Complete identifiers in your source with a completion list containing
167 identifiers from your source code only.
170 Perform search and query replace operations over some or all of your
174 Show all identifiers matching a regular expression---and jump to one of
181 @node Generating browser files, Loading a Tree, Overview, Top
182 @comment node-name, next, previous, up
183 @chapter Processing Source Files
185 @cindex @command{ebrowse}, the program
186 @cindex class data base creation
187 Before you can start browsing a class hierarchy, you must run the parser
188 @command{ebrowse} on your source files in order to generate a Lisp data
189 base describing your program.
191 @cindex command line for @command{ebrowse}
192 The operation of @command{ebrowse} can be tailored with command line
193 options. Under normal circumstances it suffices to let the parser use
194 its default settings. If you want to do that, call it with a command
202 or, if your shell doesn't allow all the file names to be specified on
206 ebrowse --files=@var{file}
210 where @var{file} contains the names of the files to be parsed, one
214 When invoked with option @samp{--help}, @command{ebrowse} prints a list of
215 available command line options.@refill
218 * Input files:: Specifying which files to parse
219 * Output file:: Changing the output file name
220 * Structs and unions:: Omitting @code{struct}s and @code{union}s
221 * Matching:: Setting regular expression lengths
222 * Verbosity:: Getting feedback for lengthy operations
228 @comment name, next, prev, up
229 @node Input files, Output file, Generating browser files, Generating browser files
230 @section Specifying Input Files
233 @cindex input files, for @command{ebrowse}
235 Each file name on the command line tells @command{ebrowse} to parse
238 @cindex response files
240 @item --files=@var{file}
241 This command line switch specifies that @var{file} contains a list of
242 file names to parse. Each line in @var{file} must contain one file
243 name. More than one option of this kind is allowed. You might, for
244 instance, want to use one file for header files, and another for source
247 @cindex standard input, specifying input files
249 When @command{ebrowse} finds no file names on the command line, and no
250 @samp{--file} option is specified, it reads file names from standard
251 input. This is sometimes convenient when @command{ebrowse} is used as part
254 @findex --search-path
255 @item --search-path=@var{paths}
256 This option lets you specify search paths for your input files.
257 @var{paths} is a list of directory names, separated from each other by a
258 either a colon or a semicolon, depending on the operating system.
262 @cindex friend functions
263 It is generally a good idea to specify input files so that header files
264 are parsed before source files. This facilitates the parser's work of
265 properly identifying friend functions of a class.
269 @comment name, next, prev, up
270 @node Output file, Structs and unions, Input files, Generating browser files
271 @section Changing the Output File Name
274 @cindex output file name
275 @findex --output-file
276 @cindex @file{BROWSE} file
277 @item --output-file=@var{file}
278 This option instructs @command{ebrowse} to generate a Lisp data base with
279 name @var{file}. By default, the data base is named @file{BROWSE}, and
280 is written in the directory in which @command{ebrowse} is invoked.
282 If you regularly use data base names different from the default, you
283 might want to add this to your init file:
286 (add-to-list 'auto-mode-alist '(@var{NAME} . ebrowse-tree-mode))
290 where @var{NAME} is the Lisp data base name you are using.
293 @cindex appending output to class data base
295 By default, each run of @command{ebrowse} erases the old contents of the
296 output file when writing to it. You can instruct @command{ebrowse} to
297 append its output to an existing file produced by @command{ebrowse}
298 with this command line option.
304 @comment name, next, prev, up
305 @node Structs and unions, Matching, Output file, Generating browser files
306 @section Structs and Unions
311 @findex --no-structs-or-unions
312 @item --no-structs-or-unions
313 This switch suppresses all classes in the data base declared as
314 @code{struct} or @code{union} in the output.
316 This is mainly useful when you are converting an existing
317 C program to C++, and do not want to see the old C structs in a class
324 @comment name, next, prev, up
325 @node Matching, Verbosity, Structs and unions, Generating browser files
326 @section Regular Expressions
328 @cindex regular expressions, recording
329 The parser @command{ebrowse} normally writes regular expressions to its
330 output file that help the Lisp part of Ebrowse to find functions,
331 variables etc.@: in their source files.
333 You can instruct @command{ebrowse} to omit these regular expressions by
334 calling it with the command line switch @samp{--no-regexps}.
336 When you do this, the Lisp part of Ebrowse tries to guess, from member
337 or class names, suitable regular expressions to locate that class or
338 member in source files. This works fine in most cases, but the
339 automatic generation of regular expressions can be too weak if unusual
340 coding styles are used.
345 This option turns off regular expression recording.
347 @findex --min-regexp-length
348 @cindex minimum regexp length for recording
349 @item --min-regexp-length=@var{n}
350 The number @var{n} following this option specifies the minimum length of
351 the regular expressions recorded to match class and member declarations
352 and definitions. The default value is set at compilation time of
355 The smaller the minimum length, the higher the probability that
356 Ebrowse will find a wrong match. The larger the value, the
357 larger the output file and therefore the memory consumption once the
358 file is read from Emacs.
360 @findex --max-regexp-length
361 @cindex maximum regexp length for recording
362 @item --max-regexp-length=@var{n}
363 The number following this option specifies the maximum length of the
364 regular expressions used to match class and member declarations and
365 definitions. The default value is set at compilation time of
368 The larger the maximum length, the higher the probability that the
369 browser will find a correct match, but the larger the value the larger
370 the output file and therefore the memory consumption once the data is
371 read. As a second effect, the larger the regular expression, the higher
372 the probability that it will no longer match after editing the file.
378 @node Verbosity, , Matching, Generating browser files
379 @comment node-name, next, previous, up
380 @section Verbose Mode
381 @cindex verbose operation
386 When this option is specified on the command line, @command{ebrowse} prints
387 a period for each file parsed, and it displays a @samp{+} for each
388 class written to the output file.
390 @findex --very-verbose
392 This option makes @command{ebrowse} print out the names of the files and
393 the names of the classes seen.
399 @node Loading a Tree, Tree Buffers, Generating browser files, Top
400 @comment node-name, next, previous, up
401 @chapter Starting to Browse
405 You start browsing a class hierarchy parsed by @command{ebrowse} by just
406 finding the @file{BROWSE} file with @kbd{C-x C-f}.
408 An example of a tree buffer display is shown below.
419 @cindex mouse highlight in tree buffers
420 When you run Emacs on a display which supports colors and the mouse, you
421 will notice that certain areas in the tree buffer are highlighted
422 when you move the mouse over them. This highlight marks mouse-sensitive
423 regions in the buffer. Please notice the help strings in the echo area
424 when the mouse moves over a sensitive region.
427 A click with @kbd{Mouse-3} on a mouse-sensitive region opens a context
428 menu. In addition to this, each buffer also has a buffer-specific menu
429 that is opened with a click with @kbd{Mouse-3} somewhere in the buffer
430 where no highlight is displayed.
434 @comment ****************************************************************
436 @comment *** TREE BUFFERS
438 @comment ****************************************************************
440 @node Tree Buffers, Member Buffers, Loading a Tree, Top
441 @comment node-name, next, previous, up
442 @chapter Tree Buffers
443 @cindex tree buffer mode
446 Class trees are displayed in @dfn{tree buffers} which install their own
447 major mode. Most Emacs keys work in tree buffers in the usual way,
448 e.g.@: you can move around in the buffer with the usual @kbd{C-f},
449 @kbd{C-v} etc., or you can search with @kbd{C-s}.
451 Tree-specific commands are bound to simple keystrokes, similar to
452 @code{Gnus}. You can take a look at the key bindings by entering
453 @kbd{?} which calls @code{M-x describe-mode} in both tree and member
457 * Source Display:: Viewing and finding a class declaration
458 * Member Display:: Showing members, switching to member buffers
459 * Go to Class:: Finding a class
460 * Quitting:: Discarding and burying the tree buffer
461 * File Name Display:: Showing file names in the tree
462 * Expanding and Collapsing:: Expanding and collapsing branches
463 * Tree Indentation:: Changing the tree indentation
464 * Killing Classes:: Removing class from the tree
465 * Saving a Tree:: Saving a modified tree
466 * Statistics:: Displaying class tree statistics
467 * Marking Classes:: Marking and unmarking classes
472 @node Source Display, Member Display, Tree Buffers, Tree Buffers
473 @comment node-name, next, previous, up
474 @section Viewing and Finding Class Declarations
475 @cindex viewing, class
476 @cindex finding a class
477 @cindex class declaration
479 You can view or find a class declaration when the cursor is on a class
484 This command views the class declaration if the database
485 contains informations about it. If you don't parse the entire source
486 you are working on, some classes will only be known to exist but the
487 location of their declarations and definitions will not be known.@refill
490 Works like @kbd{SPC}, except that it finds the class
491 declaration rather than viewing it, so that it is ready for
495 The same functionality is available from the menu opened with
496 @kbd{Mouse-3} on the class name.
501 @node Member Display, Go to Class, Source Display, Tree Buffers
502 @comment node-name, next, previous, up
503 @section Displaying Members
504 @cindex @samp{*Members*} buffer
505 @cindex @samp{*Globals*}
506 @cindex freezing a member buffer
507 @cindex member lists, in tree buffers
509 Ebrowse distinguishes six different kinds of members, each of
510 which is displayed as a separate @dfn{member list}: instance variables,
511 instance functions, static variables, static functions, friend
512 functions, and types.
514 Each of these lists can be displayed in a member buffer with a command
515 starting with @kbd{L} when the cursor is on a class name. By default,
516 there is only one member buffer named @dfn{*Members*} that is reused
517 each time you display a member list---this has proven to be more
518 practical than to clutter up the buffer list with dozens of member
521 If you want to display more than one member list at a time you can
522 @dfn{freeze} its member buffer. Freezing a member buffer prevents it
523 from being overwritten the next time you display a member list. You can
524 toggle this buffer status at any time.
526 Every member list display command in the tree buffer can be used with a
527 prefix argument (@kbd{C-u}). Without a prefix argument, the command will
528 pop to a member buffer displaying the member list. With prefix argument,
529 the member buffer will additionally be @dfn{frozen}.
532 @cindex instance member variables, list
534 This command displays the list of instance member variables.
536 @cindex static variables, list
538 Display the list of static variables.
540 @cindex friend functions, list
542 Display the list of friend functions. This list is used for defines if
543 you are viewing the class @samp{*Globals*} which is a place holder for
546 @cindex member functions, list
548 Display the list of member functions.
550 @cindex static member functions, list
552 Display the list of static member functions.
556 Display a list of types.
559 These lists are also available from the class' context menu invoked with
560 @kbd{Mouse-3} on the class name.
565 @node Go to Class, Quitting, Member Display, Tree Buffers
566 @comment node-name, next, previous, up
567 @section Finding a Class
569 @cindex expanding branches
570 @cindex class location
573 @cindex search for class
575 This command reads a class name from the minibuffer with completion and
576 positions the cursor on the class in the class tree.
578 If the branch of the class tree containing the class searched for is
579 currently collapsed, the class itself and all its base classes are
580 recursively made visible. (See also @ref{Expanding and
583 This function is also available from the tree buffer's context menu.
586 Repeat the last search done with @kbd{/}. Each tree buffer has its own
587 local copy of the regular expression last searched in it.
593 @node Quitting, File Name Display, Go to Class, Tree Buffers
594 @comment node-name, next, previous, up
595 @section Burying a Tree Buffer
596 @cindex burying tree buffer
600 Is a synonym for @kbd{M-x bury-buffer}.
606 @node File Name Display, Expanding and Collapsing, Quitting, Tree Buffers
607 @comment node-name, next, previous, up
608 @section Displaying File Names
611 @cindex file names in tree buffers
613 This command toggles the display of file names in a tree buffer. If
614 file name display is switched on, the names of the files containing the
615 class declaration are shown to the right of the class names. If the
616 file is not known, the string @samp{unknown} is displayed.
618 This command is also provided in the tree buffer's context menu.
621 Display file names for the current line, or for the number of lines
622 given by a prefix argument.
625 Here is an example of a tree buffer with file names displayed.
628 | Collection (unknown)
629 | IndexedCollection (indexedcltn.h)
631 | FixedArray (fixedarray.h)
633 | Dictionary (dict.h)
639 @node Expanding and Collapsing, Tree Indentation, File Name Display, Tree Buffers
640 @comment node-name, next, previous, up
641 @section Expanding and Collapsing a Tree
642 @cindex expand tree branch
643 @cindex collapse tree branch
644 @cindex branches of class tree
645 @cindex class tree, collapse or expand
647 You can expand and collapse parts of a tree to reduce the complexity of
648 large class hierarchies. Expanding or collapsing branches of a tree has
649 no impact on the functionality of other commands, like @kbd{/}. (See
650 also @ref{Go to Class}.)@refill
652 Collapsed branches are indicated with an ellipsis following the class
653 name like in the example below.
657 | IndexedCollection...
664 This command collapses the branch of the tree starting at the class the
668 This command expands the branch of the tree starting at the class the
669 cursor is on. Both commands for collapsing and expanding branches are
670 also available from the class' object menu.
673 This command expands all collapsed branches in the tree.
679 @node Tree Indentation, Killing Classes, Expanding and Collapsing, Tree Buffers
680 @comment node-name, next, previous, up
681 @section Changing the Tree Indentation
682 @cindex tree indentation
683 @cindex indentation of the tree
687 This command reads a new indentation width from the minibuffer and
688 redisplays the tree buffer with the new indentation It is also
689 available from the tree buffer's context menu.
695 @node Killing Classes, Saving a Tree, Tree Indentation, Tree Buffers
696 @comment node-name, next, previous, up
697 @section Removing Classes from the Tree
698 @cindex killing classes
699 @cindex class, remove from tree
703 This command removes the class the cursor is on and all its derived
704 classes from the tree. The user is asked for confirmation before the
705 deletion is actually performed.
711 @node Saving a Tree, Statistics, Killing Classes, Tree Buffers
712 @comment node-name, next, previous, up
713 @comment node-name, next, previous, up
714 @section Saving a Tree
715 @cindex save tree to a file
716 @cindex tree, save to a file
717 @cindex class tree, save to a file
721 This command writes a class tree to the file from which it was read.
722 This is useful after classes have been deleted from a tree.
725 Writes the tree to a file whose name is read from the minibuffer.
731 @node Statistics, Marking Classes, Saving a Tree, Tree Buffers
732 @comment node-name, next, previous, up
733 @cindex statistics for a tree
734 @cindex tree statistics
735 @cindex class statistics
739 Display statistics for the tree, like number of classes in it, number of
740 member functions, etc. This command can also be found in the buffer's
747 @node Marking Classes, , Statistics, Tree Buffers
748 @comment node-name, next, previous, up
749 @cindex marking classes
750 @cindex operations on marked classes
752 Classes can be marked for operations similar to the standard Emacs
753 commands @kbd{M-x tags-search} and @kbd{M-x tags-query-replace} (see
754 also @xref{Tags-like Functions}.)@refill
759 Toggle the mark of the line point is in or for as many lines as given by
760 a prefix command. This command can also be found in the class' context
765 Unmark all classes. With prefix argument @kbd{C-u}, mark all classes in
766 the tree. Since this command operates on the whole buffer, it can also be
767 found in the buffer's object menu.
770 Marked classes are displayed with an @code{>} in column one of the tree
771 display, like in the following example
775 | IndexedCollection...
783 @c ****************************************************************
785 @c *** MEMBER BUFFERS
787 @c ****************************************************************
789 @node Member Buffers, Tags-like Functions, Tree Buffers, Top
790 @comment node-name, next, previous, up
791 @chapter Member Buffers
793 @cindex member buffer mode
795 @cindex class members, types
796 @cindex types of class members
797 @dfn{Member buffers} are used to operate on lists of members of a class.
798 Ebrowse distinguishes six kinds of lists:
802 Instance variables (normal member variables);
804 Instance functions (normal member functions);
808 Static member functions;
812 Types (@code{enum}s and @code{typedef}s defined with class scope.
813 Nested classes will be shown in the class tree like normal classes.
816 Like tree buffers, member buffers install their own major mode. Also
817 like in tree buffers, menus are provided for certain areas in the
818 buffer: members, classes, and the buffer itself.
821 * Switching Member Lists:: Choosing which members to display
822 * Finding/Viewing:: Modifying source code
823 * Inherited Members:: Display of Inherited Members
824 * Searching Members:: Finding members in member buffer
825 * Switching to Tree:: Going back to the tree buffer
826 * Filters:: Selective member display
827 * Attributes:: Display of @code{virtual} etc.
828 * Long and Short Display:: Comprehensive and verbose display
829 * Regexp Display:: Showing matching regular expressions
830 * Switching Classes:: Displaying another class
831 * Killing/Burying:: Getting rid of the member buffer
832 * Column Width:: Display style
833 * Redisplay:: Redrawing the member list
834 * Getting Help:: How to get help for key bindings
840 @node Switching Member Lists, Finding/Viewing, Member Buffers, Member Buffers
841 @comment node-name, next, previous, up
842 @section Switching Member Lists
843 @cindex member lists, in member buffers
844 @cindex static members
850 @cindex next member list
852 This command switches the member buffer display to the next member list.
854 @cindex previous member list
856 This command switches the member buffer display to the previous member
860 Switch to the list of member functions.
864 Switch to the list of static member functions.
867 Switch to the list of member variables.
870 Switch to the list of static member variables.
873 Switch to the list of friends or defines.
876 Switch to the list of types.
879 Both commands cycle through the member list.
881 Most of the commands are also available from the member buffer's
887 @node Finding/Viewing, Inherited Members, Switching Member Lists, Member Buffers
888 @comment node-name, next, previous, up
889 @section Finding and Viewing Member Source
890 @cindex finding members, in member buffers
891 @cindex viewing members, in member buffers
892 @cindex member definitions, in member buffers
893 @cindex member declarations, in member buffers
894 @cindex definition of a member, in member buffers
895 @cindex declaration of a member, in member buffers
899 This command finds the definition of the member the cursor is on.
900 Finding involves roughly the same as the standard Emacs tags facility
901 does---loading the file and searching for a regular expression matching
905 This command finds the declaration of the member the cursor is on.
908 This is the same command as @kbd{RET}, but views the member definition
909 instead of finding the member's source file.
912 This is the same command as @kbd{f}, but views the member's declaration
913 instead of finding the file the declaration is in.
916 You can install a hook function to perform actions after a member or
917 class declaration or definition has been found, or when it is not found.
919 All the commands described above can also be found in the context menu
920 displayed when clicking @kbd{Mouse-2} on a member name.
925 @node Inherited Members, Searching Members, Finding/Viewing, Member Buffers
926 @comment node-name, next, previous, up
927 @section Display of Inherited Members
928 @cindex superclasses, members
929 @cindex base classes, members
930 @cindex inherited members
934 This command toggles the display of inherited members in the member
935 buffer. This is also in the buffer's context menu.
941 @node Searching Members, Switching to Tree, Inherited Members, Member Buffers
942 @comment node-name, next, previous, up
943 @section Searching Members
944 @cindex searching members
948 Position the cursor on a member whose name is read from the minibuffer;
949 only members shown in the current member buffer appear in the completion
953 Like the above command, but all members for the current class appear in
954 the completion list. If necessary, the current member list is switched
955 to the one containing the member.
957 With a prefix argument (@kbd{C-u}), all members in the class tree,
958 i.e.@: all members the browser knows about appear in the completion
959 list. The member display will be switched to the class and member list
960 containing the member.
963 Repeat the last member search.
966 Look into the buffer's context menu for a convenient way to do this with
971 @node Switching to Tree, Filters, Searching Members, Member Buffers
972 @comment node-name, next, previous, up
973 @section Switching to Tree Buffer
974 @cindex tree buffer, switch to
975 @cindex buffer switching
976 @cindex switching buffers
980 Pop up the tree buffer to which the member buffer belongs.
983 Do the same as @key{TAB} but also position the cursor on the class
984 displayed in the member buffer.
990 @node Filters, Attributes, Switching to Tree, Member Buffers
991 @comment node-name, next, previous, up
996 @cindex @code{public} members
998 This command toggles the display of @code{public} members. The
999 @samp{a} stands for `access'.
1001 @cindex @code{protected} members
1003 This command toggles the display of @code{protected} members.
1005 @cindex @code{private} members
1007 This command toggles the display of @code{private} members.
1009 @cindex @code{virtual} members
1011 This command toggles the display of @code{virtual} members.
1013 @cindex @code{inline} members
1015 This command toggles the display of @code{inline} members.
1017 @cindex @code{const} members
1019 This command toggles the display of @code{const} members.
1021 @cindex pure virtual members
1023 This command toggles the display of pure virtual members.
1025 @cindex remove filters
1027 This command removes all filters.
1030 These commands are also found in the buffer's context menu.
1035 @node Attributes, Long and Short Display, Filters, Member Buffers
1036 @comment node-name, next, previous, up
1037 @section Displaying Member Attributes
1039 @cindex member attribute display
1043 Toggle the display of member attributes (default is on).
1045 The nine member attributes Ebrowse knows about are displayed
1046 as a list a single-characters flags enclosed in angle brackets in front
1047 the of the member's name. A @samp{-} at a given position means that
1048 the attribute is false. The list of attributes from left to right is
1051 @cindex @code{template} attribute
1053 The member is a template.
1055 @cindex @code{extern "C"} attribute
1057 The member is declared @code{extern "C"}.
1059 @cindex @code{virtual} attribute
1061 Means the member is declared @code{virtual}.
1063 @cindex @code{inline}
1065 The member is declared @code{inline}.
1067 @cindex @code{const} attribute
1069 The member is @code{const}.
1071 @cindex pure virtual function attribute
1073 The member is a pure virtual function.
1075 @cindex @code{mutable} attribute
1077 The member is declared @code{mutable}.
1079 @cindex @code{explicit} attribute
1081 The member is declared @code{explicit}.
1084 The member is a function with a throw list.
1088 This command is also in the buffer's context menu.
1092 @node Long and Short Display, Regexp Display, Attributes, Member Buffers
1093 @comment node-name, next, previous, up
1094 @section Long and Short Member Display
1095 @cindex display form
1096 @cindex long display
1097 @cindex short display
1101 This command toggles the member buffer between short and long display
1102 form. The short display form displays member names, only:
1105 | isEmpty contains hasMember create
1106 | storeSize hash isEqual restoreGuts
1110 The long display shows one member per line with member name and regular
1111 expressions matching the member (if known):
1114 | isEmpty Bool isEmpty () const...
1115 | hash unsigned hash () const...
1116 | isEqual int isEqual (...
1119 Regular expressions will only be displayed when the Lisp database has
1120 not been produced with the @command{ebrowse} option @samp{--no-regexps}.
1121 @xref{Matching, --no-regexps, Regular Expressions}.
1127 @node Regexp Display, Switching Classes, Long and Short Display, Member Buffers
1128 @comment node-name, next, previous, up
1129 @section Display of Regular Expressions
1130 @cindex regular expression display
1134 This command toggles the long display form from displaying the regular
1135 expressions matching the member declarations to those expressions
1136 matching member definitions.
1139 Regular expressions will only be displayed when the Lisp database has
1140 not been produced with the @command{ebrowse} option @samp{--no-regexps},
1141 see @ref{Matching, --no-regexps, Regular Expressions}.
1146 @node Switching Classes, Killing/Burying, Regexp Display, Member Buffers
1147 @comment node-name, next, previous, up
1148 @section Displaying Another Class
1149 @cindex base class, display
1150 @cindex derived class, display
1151 @cindex superclass, display
1152 @cindex subclass, display
1153 @cindex class display
1157 This command lets you switch the member buffer to another class. It
1158 reads the name of the new class from the minibuffer with completion.
1161 This is the same command as @kbd{C c} but restricts the classes shown in
1162 the completion list to immediate base classes, only. If only one base
1163 class exists, this one is immediately shown in the minibuffer.
1166 Same as @kbd{C b}, but for derived classes.
1169 Switch to the previous class in the class hierarchy on the same level as
1170 the class currently displayed.
1173 Switch to the next sibling of the class in the class tree.
1179 @node Killing/Burying, Column Width, Switching Classes, Member Buffers
1180 @comment node-name, next, previous, up
1181 @section Burying a Member Buffer
1182 @cindex burying member buffers
1186 This command is a synonym for @kbd{M-x bury-buffer}.
1192 @node Column Width, Redisplay, Killing/Burying, Member Buffers
1193 @comment node-name, next, previous, up
1194 @section Setting the Column Width
1195 @cindex column width
1196 @cindex member indentation
1197 @cindex indentation, member
1201 This command sets the column width depending on the display form used
1202 (long or short display).
1208 @node Redisplay, Getting Help, Column Width, Member Buffers
1209 @comment node-name, next, previous, up
1210 @section Forced Redisplay
1211 @cindex redisplay of member buffers
1215 This command forces a redisplay of the member buffer. If the width
1216 of the window displaying the member buffer is changed this command
1217 redraws the member list with the appropriate column widths and number of
1224 @node Getting Help, , Redisplay, Member Buffers
1225 @comment node-name, next, previous, up
1230 This key is bound to @code{describe-mode}.
1236 @comment **************************************************************
1237 @comment *** TAGS LIKE FUNCTIONS
1238 @comment **************************************************************
1240 @node Tags-like Functions, GNU Free Documentation License, Member Buffers, Top
1241 @comment node-name, next, previous, up
1242 @chapter Tags-like Functions
1244 Ebrowse provides tags functions similar to those of the standard
1245 Emacs Tags facility, but better suited to the needs of C++ programmers.
1248 * Finding and Viewing:: Going to a member declaration/definition
1249 * Position Stack:: Moving to previous locations
1250 * Search & Replace:: Searching and replacing over class tree files
1251 * Members in Files:: Listing all members in a given file
1252 * Apropos:: Listing members matching a regular expression
1253 * Symbol Completion:: Completing names while editing
1254 * Member Buffer Display:: Quickly display a member buffer for some
1260 @node Finding and Viewing, Position Stack, Tags-like Functions, Tags-like Functions
1261 @comment node-name, next, previous, up
1262 @section Finding and Viewing Members
1263 @cindex finding class member, in C++ source
1264 @cindex viewing class member, in C++ source
1266 @cindex member definition, finding, in C++ source
1267 @cindex member declaration, finding, in C++ source
1269 The functions in this section are similar to those described in
1270 @ref{Source Display}, and also in @ref{Finding/Viewing}, except that
1271 they work in a C++ source buffer, not in member and tree buffers created
1276 Find the definition of the member around point. If you invoke this
1277 function with a prefix argument, the declaration is searched.
1279 If more than one class contains a member with the given name you can
1280 select the class with completion. If there is a scope declaration in
1281 front of the member name, this class name is used as initial input for
1285 Find the declaration of the member around point.
1288 View the definition of the member around point.
1291 View the declaration of the member around point.
1294 Find a member's definition in another window.
1297 Find a member's declaration in another window.
1300 View a member's definition in another window.
1303 View a member's declaration in another window.
1306 Find a member's definition in another frame.
1309 Find a member's declaration in another frame.
1312 View a member's definition in another frame.
1315 View a member's declaration in another frame.
1320 @node Position Stack, Search & Replace, Finding and Viewing, Tags-like Functions
1321 @comment node-name, next, previous, up
1322 @section The Position Stack
1323 @cindex position stack
1325 When jumping to a member declaration or definition with one of
1326 Ebrowse's commands, the position from where you performed the
1327 jump and the position where you jumped to are recorded in a
1328 @dfn{position stack}. There are several ways in which you can quickly
1329 move to positions in the stack:@refill
1332 @cindex return to original position
1334 This command sets point to the previous position in the position stack.
1335 Directly after you performed a jump, this will put you back to the
1336 position where you came from.
1338 The stack is not popped, i.e.@: you can always switch back and forth
1339 between positions in the stack. To avoid letting the stack grow to
1340 infinite size there is a maximum number of positions defined. When this
1341 number is reached, older positions are discarded when new positions are
1342 pushed on the stack.
1345 This command moves forward in the position stack, setting point to
1346 the next position stored in the position stack.
1349 Displays an electric buffer showing all positions saved in the stack.
1350 You can select a position by pressing @kbd{SPC} in a line. You can
1351 view a position with @kbd{v}.
1357 @node Search & Replace, Members in Files, Position Stack, Tags-like Functions
1358 @comment node-name, next, previous, up
1359 @section Searching and Replacing
1360 @cindex searching multiple C++ files
1361 @cindex replacing in multiple C++ files
1362 @cindex restart tags-operation
1364 Ebrowse allows you to perform operations on all or a subset of the files
1365 mentioned in a class tree. When you invoke one of the following
1366 functions and more than one class tree is loaded, you must choose a
1367 class tree to use from an electric tree menu. If the selected tree
1368 contains marked classes, the following commands operate on the files
1369 mentioned in the marked classes only. Otherwise all files in the class
1374 This function performs a regular expression search in the chosen set of
1378 This command performs a search for calls of a given member which is
1379 selected in the usual way with completion.
1382 Perform a query replace over the set of files.
1385 All three operations above stop when finding a match. You can restart
1386 the operation with this command.
1389 This restarts the last tags operation with the next file in the list.
1395 @node Members in Files, Apropos, Search & Replace, Tags-like Functions
1396 @comment node-name, next, previous, up
1397 @section Members in Files
1399 @cindex members in file, listing
1400 @cindex list class members in a file
1401 @cindex file, members
1403 The command @kbd{C-c C-m l}, lists all members in a given file. The file
1404 name is read from the minibuffer with completion.
1409 @node Apropos, Symbol Completion, Members in Files, Tags-like Functions
1410 @comment node-name, next, previous, up
1411 @section Member Apropos
1412 @cindex apropos on class members
1413 @cindex members, matching regexp
1415 The command @kbd{C-c C-m a} can be used to display all members matching a
1416 given regular expression. This command can be very useful if you
1417 remember only part of a member name, and not its beginning.
1419 A special buffer is popped up containing all identifiers matching the
1420 regular expression, and what kind of symbol it is (e.g.@: a member
1421 function, or a type). You can then switch to this buffer, and use the
1422 command @kbd{C-c C-m f}, for example, to jump to a specific member.
1427 @node Symbol Completion, Member Buffer Display, Apropos, Tags-like Functions
1428 @comment node-name, next, previous, up
1429 @section Symbol Completion
1431 @cindex symbol completion
1433 The command @kbd{C-c C-m @key{TAB}} completes the symbol in front of point.
1438 @node Member Buffer Display, , Symbol Completion, Tags-like Functions
1439 @section Quick Member Display
1440 @cindex member buffer, for member at point
1442 You can quickly display a member buffer containing the member the cursor
1443 in on with the command @kbd{C-c C-m m}.
1446 @node GNU Free Documentation License, Concept Index, Tags-like Functions, Top
1447 @appendix GNU Free Documentation License
1448 @include doclicense.texi
1451 @node Concept Index, , GNU Free Documentation License, Top
1452 @unnumbered Concept Index
1458 arch-tag: 52fe78ac-a1c4-48e7-815e-0a31acfad4bf