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,
14 2005, 2006, 2007 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.2 or
19 any later version published by the Free Software Foundation; with no
20 Invariant Sections, with the Front-Cover texts being ``A GNU
21 Manual,'' and with the Back-Cover Texts as in (a) below. A copy of the
22 license is included in the section entitled ``GNU Free Documentation
23 License'' in the Emacs manual.
25 (a) The FSF's Back-Cover Text is: ``You have freedom to copy and modify
26 this GNU Manual, like GNU software. Copies published by the Free
27 Software Foundation raise funds for GNU development.''
29 This document is part of a collection distributed under the GNU Free
30 Documentation License. If you want to distribute this document
31 separately from the collection, you can do so by adding a copy of the
32 license to the document, as described in section 6 of the license.
38 * Ebrowse: (ebrowse). A C++ class browser for Emacs.
42 @title Ebrowse User's Manual
44 @subtitle Ebrowse/Emacs
48 @author Gerd Moellmann
50 @vskip 0pt plus 1filll
54 @node Top, Overview, (dir), (dir)
57 You can browse C++ class hierarchies from within Emacs by using
62 * Overview:: What is it and how does it work?
63 * Generating browser files:: How to process C++ source files
64 * Loading a Tree:: How to start browsing
65 * Tree Buffers:: Traversing class hierarchies
66 * Member Buffers:: Looking at member information
67 * Tags-like Functions:: Finding members from source files
68 * Concept Index:: An entry for each concept defined
74 @node Overview, Generating browser files, Top, Top
77 When working in software projects using C++, I frequently missed
78 software support for two things:
82 When you get a new class library, or you have to work on source code you
83 haven't written yourself (or written sufficiently long ago), you need a
84 tool to let you navigate class hierarchies and investigate
85 features of the software. Without such a tool you often end up
86 @command{grep}ing through dozens or even hundreds of files.
89 Once you are productive, it would be nice to have a tool that knows your
90 sources and can help you while you are editing source code. Imagine to
91 be able to jump to the definition of an identifier while you are
92 editing, or something that can complete long identifier names because it
93 knows what identifiers are defined in your program@dots{}.
96 The design of Ebrowse reflects these two needs.
100 @cindex parser for C++ sources
101 A fast parser written in C is used to process C++ source files.
102 The parser generates a data base containing information about classes,
103 members, global functions, defines, types etc.@: found in the sources.
105 The second part of Ebrowse is a Lisp program. This program reads
106 the data base generated by the parser. It displays its contents in
107 various forms and allows you to perform operations on it, or do
108 something with the help of the knowledge contained in the data base.
110 @cindex major modes, of Ebrowse buffers
111 @dfn{Navigational} use of Ebrowse is centered around two
112 types of buffers which define their own major modes:
115 @dfn{Tree buffers} are used to view class hierarchies in tree form.
116 They allow you to quickly find classes, find or view class declarations,
117 perform operations like query replace on sets of your source files, and
118 finally tree buffers are used to produce the second buffer form---member
119 buffers. @xref{Tree Buffers}.
121 @cindex member buffer
122 Members are displayed in @dfn{member buffers}. Ebrowse
123 distinguishes between six different types of members; each type is
124 displayed as a member list of its own:
128 Instance member variables;
131 Instance member functions;
134 Static member variables;
137 Static member functions;
140 Friends/Defines. The list of defines is contained in the friends
141 list of the pseudo-class @samp{*Globals*};
144 Types (@code{enum}s, and @code{typedef}s defined with class
148 You can switch member buffers from one list to another, or to another
149 class. You can include inherited members in the display, you can set
150 filters that remove categories of members from the display, and most
151 importantly you can find or view member declarations and definitions
152 with a keystroke. @xref{Member Buffers}.
154 These two buffer types and the commands they provide support the
155 navigational use of the browser. The second form resembles Emacs' Tags
156 package for C and other procedural languages. Ebrowse's commands of
157 this type are not confined to special buffers; they are most often used
158 while you are editing your source code.
160 To list just a subset of what you can use the Tags part of Ebrowse for:
164 Jump to the definition or declaration of an identifier in your source
165 code, with an electric position stack that lets you easily navigate
169 Complete identifiers in your source with a completion list containing
170 identifiers from your source code only.
173 Perform search and query replace operations over some or all of your
177 Show all identifiers matching a regular expression---and jump to one of
184 @node Generating browser files, Loading a Tree, Overview, Top
185 @comment node-name, next, previous, up
186 @chapter Processing Source Files
188 @cindex @command{ebrowse}, the program
189 @cindex class data base creation
190 Before you can start browsing a class hierarchy, you must run the parser
191 @command{ebrowse} on your source files in order to generate a Lisp data
192 base describing your program.
194 @cindex command line for @command{ebrowse}
195 The operation of @command{ebrowse} can be tailored with command line
196 options. Under normal circumstances it suffices to let the parser use
197 its default settings. If you want to do that, call it with a command
205 or, if your shell doesn't allow all the file names to be specified on
209 ebrowse --files=@var{file}
213 where @var{file} contains the names of the files to be parsed, one
217 When invoked with option @samp{--help}, @command{ebrowse} prints a list of
218 available command line options.@refill
221 * Input files:: Specifying which files to parse
222 * Output file:: Changing the output file name
223 * Structs and unions:: Omitting @code{struct}s and @code{union}s
224 * Matching:: Setting regular expression lengths
225 * Verbosity:: Getting feedback for lengthy operations
231 @comment name, next, prev, up
232 @node Input files, Output file, Generating browser files, Generating browser files
233 @section Specifying Input Files
236 @cindex input files, for @command{ebrowse}
238 Each file name on the command line tells @command{ebrowse} to parse
241 @cindex response files
243 @item --files=@var{file}
244 This command line switch specifies that @var{file} contains a list of
245 file names to parse. Each line in @var{file} must contain one file
246 name. More than one option of this kind is allowed. You might, for
247 instance, want to use one file for header files, and another for source
250 @cindex standard input, specifying input files
252 When @command{ebrowse} finds no file names on the command line, and no
253 @samp{--file} option is specified, it reads file names from standard
254 input. This is sometimes convenient when @command{ebrowse} is used as part
257 @findex --search-path
258 @item --search-path=@var{paths}
259 This option lets you specify search paths for your input files.
260 @var{paths} is a list of directory names, separated from each other by a
261 either a colon or a semicolon, depending on the operating system.
265 @cindex friend functions
266 It is generally a good idea to specify input files so that header files
267 are parsed before source files. This facilitates the parser's work of
268 properly identifying friend functions of a class.
272 @comment name, next, prev, up
273 @node Output file, Structs and unions, Input files, Generating browser files
274 @section Changing the Output File Name
277 @cindex output file name
278 @findex --output-file
279 @cindex @file{BROWSE} file
280 @item --output-file=@var{file}
281 This option instructs @command{ebrowse} to generate a Lisp data base with
282 name @var{file}. By default, the data base is named @file{BROWSE}, and
283 is written in the directory in which @command{ebrowse} is invoked.
285 If you regularly use data base names different from the default, you
286 might want to add this to your init file:
289 (add-to-list 'auto-mode-alist '(@var{NAME} . ebrowse-tree-mode))
293 where @var{NAME} is the Lisp data base name you are using.
296 @cindex appending output to class data base
298 By default, each run of @command{ebrowse} erases the old contents of the
299 output file when writing to it. You can instruct @command{ebrowse} to
300 append its output to an existing file produced by @command{ebrowse}
301 with this command line option.
307 @comment name, next, prev, up
308 @node Structs and unions, Matching, Output file, Generating browser files
309 @section Structs and Unions
314 @findex --no-structs-or-unions
315 @item --no-structs-or-unions
316 This switch suppresses all classes in the data base declared as
317 @code{struct} or @code{union} in the output.
319 This is mainly useful when you are converting an existing
320 C program to C++, and do not want to see the old C structs in a class
327 @comment name, next, prev, up
328 @node Matching, Verbosity, Structs and unions, Generating browser files
329 @section Regular Expressions
331 @cindex regular expressions, recording
332 The parser @command{ebrowse} normally writes regular expressions to its
333 output file that help the Lisp part of Ebrowse to find functions,
334 variables etc.@: in their source files.
336 You can instruct @command{ebrowse} to omit these regular expressions by
337 calling it with the command line switch @samp{--no-regexps}.
339 When you do this, the Lisp part of Ebrowse tries to guess, from member
340 or class names, suitable regular expressions to locate that class or
341 member in source files. This works fine in most cases, but the
342 automatic generation of regular expressions can be too weak if unusual
343 coding styles are used.
348 This option turns off regular expression recording.
350 @findex --min-regexp-length
351 @cindex minimum regexp length for recording
352 @item --min-regexp-length=@var{n}
353 The number @var{n} following this option specifies the minimum length of
354 the regular expressions recorded to match class and member declarations
355 and definitions. The default value is set at compilation time of
358 The smaller the minimum length, the higher the probability that
359 Ebrowse will find a wrong match. The larger the value, the
360 larger the output file and therefore the memory consumption once the
361 file is read from Emacs.
363 @findex --max-regexp-length
364 @cindex maximum regexp length for recording
365 @item --max-regexp-length=@var{n}
366 The number following this option specifies the maximum length of the
367 regular expressions used to match class and member declarations and
368 definitions. The default value is set at compilation time of
371 The larger the maximum length, the higher the probability that the
372 browser will find a correct match, but the larger the value the larger
373 the output file and therefore the memory consumption once the data is
374 read. As a second effect, the larger the regular expression, the higher
375 the probability that it will no longer match after editing the file.
381 @node Verbosity, , Matching, Generating browser files
382 @comment node-name, next, previous, up
383 @section Verbose Mode
384 @cindex verbose operation
389 When this option is specified on the command line, @command{ebrowse} prints
390 a period for each file parsed, and it displays a @samp{+} for each
391 class written to the output file.
393 @findex --very-verbose
395 This option makes @command{ebrowse} print out the names of the files and
396 the names of the classes seen.
402 @node Loading a Tree, Tree Buffers, Generating browser files, Top
403 @comment node-name, next, previous, up
404 @chapter Starting to Browse
408 You start browsing a class hierarchy parsed by @command{ebrowse} by just
409 finding the @file{BROWSE} file with @kbd{C-x C-f}.
411 An example of a tree buffer display is shown below.
422 @cindex mouse highlight in tree buffers
423 When you run Emacs on a display which supports colors and the mouse, you
424 will notice that certain areas in the tree buffer are highlighted
425 when you move the mouse over them. This highlight marks mouse-sensitive
426 regions in the buffer. Please notice the help strings in the echo area
427 when the mouse moves over a sensitive region.
430 A click with @kbd{Mouse-3} on a mouse-sensitive region opens a context
431 menu. In addition to this, each buffer also has a buffer-specific menu
432 that is opened with a click with @kbd{Mouse-3} somewhere in the buffer
433 where no highlight is displayed.
437 @comment ****************************************************************
439 @comment *** TREE BUFFERS
441 @comment ****************************************************************
443 @node Tree Buffers, Member Buffers, Loading a Tree, Top
444 @comment node-name, next, previous, up
445 @chapter Tree Buffers
446 @cindex tree buffer mode
449 Class trees are displayed in @dfn{tree buffers} which install their own
450 major mode. Most Emacs keys work in tree buffers in the usual way,
451 e.g.@: you can move around in the buffer with the usual @kbd{C-f},
452 @kbd{C-v} etc., or you can search with @kbd{C-s}.
454 Tree-specific commands are bound to simple keystrokes, similar to
455 @code{Gnus}. You can take a look at the key bindings by entering
456 @kbd{?} which calls @code{M-x describe-mode} in both tree and member
460 * Source Display:: Viewing and finding a class declaration
461 * Member Display:: Showing members, switching to member buffers
462 * Go to Class:: Finding a class
463 * Quitting:: Discarding and burying the tree buffer
464 * File Name Display:: Showing file names in the tree
465 * Expanding and Collapsing:: Expanding and collapsing branches
466 * Tree Indentation:: Changing the tree indentation
467 * Killing Classes:: Removing class from the tree
468 * Saving a Tree:: Saving a modified tree
469 * Statistics:: Displaying class tree statistics
470 * Marking Classes:: Marking and unmarking classes
475 @node Source Display, Member Display, Tree Buffers, Tree Buffers
476 @comment node-name, next, previous, up
477 @section Viewing and Finding Class Declarations
478 @cindex viewing, class
479 @cindex finding a class
480 @cindex class declaration
482 You can view or find a class declaration when the cursor is on a class
487 This command views the class declaration if the database
488 contains informations about it. If you don't parse the entire source
489 you are working on, some classes will only be known to exist but the
490 location of their declarations and definitions will not be known.@refill
493 Works like @kbd{SPC}, except that it finds the class
494 declaration rather than viewing it, so that it is ready for
498 The same functionality is available from the menu opened with
499 @kbd{Mouse-3} on the class name.
504 @node Member Display, Go to Class, Source Display, Tree Buffers
505 @comment node-name, next, previous, up
506 @section Displaying Members
507 @cindex @samp{*Members*} buffer
508 @cindex @samp{*Globals*}
509 @cindex freezing a member buffer
510 @cindex member lists, in tree buffers
512 Ebrowse distinguishes six different kinds of members, each of
513 which is displayed as a separate @dfn{member list}: instance variables,
514 instance functions, static variables, static functions, friend
515 functions, and types.
517 Each of these lists can be displayed in a member buffer with a command
518 starting with @kbd{L} when the cursor is on a class name. By default,
519 there is only one member buffer named @dfn{*Members*} that is reused
520 each time you display a member list---this has proven to be more
521 practical than to clutter up the buffer list with dozens of member
524 If you want to display more than one member list at a time you can
525 @dfn{freeze} its member buffer. Freezing a member buffer prevents it
526 from being overwritten the next time you display a member list. You can
527 toggle this buffer status at any time.
529 Every member list display command in the tree buffer can be used with a
530 prefix argument (@kbd{C-u}). Without a prefix argument, the command will
531 pop to a member buffer displaying the member list. With prefix argument,
532 the member buffer will additionally be @dfn{frozen}.
535 @cindex instance member variables, list
537 This command displays the list of instance member variables.
539 @cindex static variables, list
541 Display the list of static variables.
543 @cindex friend functions, list
545 Display the list of friend functions. This list is used for defines if
546 you are viewing the class @samp{*Globals*} which is a place holder for
549 @cindex member functions, list
551 Display the list of member functions.
553 @cindex static member functions, list
555 Display the list of static member functions.
559 Display a list of types.
562 These lists are also available from the class' context menu invoked with
563 @kbd{Mouse-3} on the class name.
568 @node Go to Class, Quitting, Member Display, Tree Buffers
569 @comment node-name, next, previous, up
570 @section Finding a Class
572 @cindex expanding branches
573 @cindex class location
576 @cindex search for class
578 This command reads a class name from the minibuffer with completion and
579 positions the cursor on the class in the class tree.
581 If the branch of the class tree containing the class searched for is
582 currently collapsed, the class itself and all its base classes are
583 recursively made visible. (See also @ref{Expanding and
586 This function is also available from the tree buffer's context menu.
589 Repeat the last search done with @kbd{/}. Each tree buffer has its own
590 local copy of the regular expression last searched in it.
596 @node Quitting, File Name Display, Go to Class, Tree Buffers
597 @comment node-name, next, previous, up
598 @section Burying a Tree Buffer
599 @cindex burying tree buffer
603 Is a synonym for @kbd{M-x bury-buffer}.
609 @node File Name Display, Expanding and Collapsing, Quitting, Tree Buffers
610 @comment node-name, next, previous, up
611 @section Displaying File Names
614 @cindex file names in tree buffers
616 This command toggles the display of file names in a tree buffer. If
617 file name display is switched on, the names of the files containing the
618 class declaration are shown to the right of the class names. If the
619 file is not known, the string @samp{unknown} is displayed.
621 This command is also provided in the tree buffer's context menu.
624 Display file names for the current line, or for the number of lines
625 given by a prefix argument.
628 Here is an example of a tree buffer with file names displayed.
631 | Collection (unknown)
632 | IndexedCollection (indexedcltn.h)
634 | FixedArray (fixedarray.h)
636 | Dictionary (dict.h)
642 @node Expanding and Collapsing, Tree Indentation, File Name Display, Tree Buffers
643 @comment node-name, next, previous, up
644 @section Expanding and Collapsing a Tree
645 @cindex expand tree branch
646 @cindex collapse tree branch
647 @cindex branches of class tree
648 @cindex class tree, collapse or expand
650 You can expand and collapse parts of a tree to reduce the complexity of
651 large class hierarchies. Expanding or collapsing branches of a tree has
652 no impact on the functionality of other commands, like @kbd{/}. (See
653 also @ref{Go to Class}.)@refill
655 Collapsed branches are indicated with an ellipsis following the class
656 name like in the example below.
660 | IndexedCollection...
667 This command collapses the branch of the tree starting at the class the
671 This command expands the branch of the tree starting at the class the
672 cursor is on. Both commands for collapsing and expanding branches are
673 also available from the class' object menu.
676 This command expands all collapsed branches in the tree.
682 @node Tree Indentation, Killing Classes, Expanding and Collapsing, Tree Buffers
683 @comment node-name, next, previous, up
684 @section Changing the Tree Indentation
685 @cindex tree indentation
686 @cindex indentation of the tree
690 This command reads a new indentation width from the minibuffer and
691 redisplays the tree buffer with the new indentation It is also
692 available from the tree buffer's context menu.
698 @node Killing Classes, Saving a Tree, Tree Indentation, Tree Buffers
699 @comment node-name, next, previous, up
700 @section Removing Classes from the Tree
701 @cindex killing classes
702 @cindex class, remove from tree
706 This command removes the class the cursor is on and all its derived
707 classes from the tree. The user is asked for confirmation before the
708 deletion is actually performed.
714 @node Saving a Tree, Statistics, Killing Classes, Tree Buffers
715 @comment node-name, next, previous, up
716 @comment node-name, next, previous, up
717 @section Saving a Tree
718 @cindex save tree to a file
719 @cindex tree, save to a file
720 @cindex class tree, save to a file
724 This command writes a class tree to the file from which it was read.
725 This is useful after classes have been deleted from a tree.
728 Writes the tree to a file whose name is read from the minibuffer.
734 @node Statistics, Marking Classes, Saving a Tree, Tree Buffers
735 @comment node-name, next, previous, up
736 @cindex statistics for a tree
737 @cindex tree statistics
738 @cindex class statistics
742 Display statistics for the tree, like number of classes in it, number of
743 member functions, etc. This command can also be found in the buffer's
750 @node Marking Classes, , Statistics, Tree Buffers
751 @comment node-name, next, previous, up
752 @cindex marking classes
753 @cindex operations on marked classes
755 Classes can be marked for operations similar to the standard Emacs
756 commands @kbd{M-x tags-search} and @kbd{M-x tags-query-replace} (see
757 also @xref{Tags-like Functions}.)@refill
762 Toggle the mark of the line point is in or for as many lines as given by
763 a prefix command. This command can also be found in the class' context
768 Unmark all classes. With prefix argument @kbd{C-u}, mark all classes in
769 the tree. Since this command operates on the whole buffer, it can also be
770 found in the buffer's object menu.
773 Marked classes are displayed with an @code{>} in column one of the tree
774 display, like in the following example
778 | IndexedCollection...
786 @c ****************************************************************
788 @c *** MEMBER BUFFERS
790 @c ****************************************************************
792 @node Member Buffers, Tags-like Functions, Tree Buffers, Top
793 @comment node-name, next, previous, up
794 @chapter Member Buffers
796 @cindex member buffer mode
798 @cindex class members, types
799 @cindex types of class members
800 @dfn{Member buffers} are used to operate on lists of members of a class.
801 Ebrowse distinguishes six kinds of lists:
805 Instance variables (normal member variables);
807 Instance functions (normal member functions);
811 Static member functions;
815 Types (@code{enum}s and @code{typedef}s defined with class scope.
816 Nested classes will be shown in the class tree like normal classes.
819 Like tree buffers, member buffers install their own major mode. Also
820 like in tree buffers, menus are provided for certain areas in the
821 buffer: members, classes, and the buffer itself.
824 * Switching Member Lists:: Choosing which members to display
825 * Finding/Viewing:: Modifying source code
826 * Inherited Members:: Display of Inherited Members
827 * Searching Members:: Finding members in member buffer
828 * Switching to Tree:: Going back to the tree buffer
829 * Filters:: Selective member display
830 * Attributes:: Display of @code{virtual} etc.
831 * Long and Short Display:: Comprehensive and verbose display
832 * Regexp Display:: Showing matching regular expressions
833 * Switching Classes:: Displaying another class
834 * Killing/Burying:: Getting rid of the member buffer
835 * Column Width:: Display style
836 * Redisplay:: Redrawing the member list
837 * Getting Help:: How to get help for key bindings
843 @node Switching Member Lists, Finding/Viewing, Member Buffers, Member Buffers
844 @comment node-name, next, previous, up
845 @section Switching Member Lists
846 @cindex member lists, in member buffers
847 @cindex static members
853 @cindex next member list
855 This command switches the member buffer display to the next member list.
857 @cindex previous member list
859 This command switches the member buffer display to the previous member
863 Switch to the list of member functions.
867 Switch to the list of static member functions.
870 Switch to the list of member variables.
873 Switch to the list of static member variables.
876 Switch to the list of friends or defines.
879 Switch to the list of types.
882 Both commands cycle through the member list.
884 Most of the commands are also available from the member buffer's
890 @node Finding/Viewing, Inherited Members, Switching Member Lists, Member Buffers
891 @comment node-name, next, previous, up
892 @section Finding and Viewing Member Source
893 @cindex finding members, in member buffers
894 @cindex viewing members, in member buffers
895 @cindex member definitions, in member buffers
896 @cindex member declarations, in member buffers
897 @cindex definition of a member, in member buffers
898 @cindex declaration of a member, in member buffers
902 This command finds the definition of the member the cursor is on.
903 Finding involves roughly the same as the standard Emacs tags facility
904 does---loading the file and searching for a regular expression matching
908 This command finds the declaration of the member the cursor is on.
911 This is the same command as @kbd{RET}, but views the member definition
912 instead of finding the member's source file.
915 This is the same command as @kbd{f}, but views the member's declaration
916 instead of finding the file the declaration is in.
919 You can install a hook function to perform actions after a member or
920 class declaration or definition has been found, or when it is not found.
922 All the commands described above can also be found in the context menu
923 displayed when clicking @kbd{Mouse-2} on a member name.
928 @node Inherited Members, Searching Members, Finding/Viewing, Member Buffers
929 @comment node-name, next, previous, up
930 @section Display of Inherited Members
931 @cindex superclasses, members
932 @cindex base classes, members
933 @cindex inherited members
937 This command toggles the display of inherited members in the member
938 buffer. This is also in the buffer's context menu.
944 @node Searching Members, Switching to Tree, Inherited Members, Member Buffers
945 @comment node-name, next, previous, up
946 @section Searching Members
947 @cindex searching members
951 Position the cursor on a member whose name is read from the minibuffer;
952 only members shown in the current member buffer appear in the completion
956 Like the above command, but all members for the current class appear in
957 the completion list. If necessary, the current member list is switched
958 to the one containing the member.
960 With a prefix argument (@kbd{C-u}), all members in the class tree,
961 i.e.@: all members the browser knows about appear in the completion
962 list. The member display will be switched to the class and member list
963 containing the member.
966 Repeat the last member search.
969 Look into the buffer's context menu for a convenient way to do this with
974 @node Switching to Tree, Filters, Searching Members, Member Buffers
975 @comment node-name, next, previous, up
976 @section Switching to Tree Buffer
977 @cindex tree buffer, switch to
978 @cindex buffer switching
979 @cindex switching buffers
983 Pop up the tree buffer to which the member buffer belongs.
986 Do the same as @key{TAB} but also position the cursor on the class
987 displayed in the member buffer.
993 @node Filters, Attributes, Switching to Tree, Member Buffers
994 @comment node-name, next, previous, up
999 @cindex @code{public} members
1001 This command toggles the display of @code{public} members. The
1002 @samp{a} stands for `access'.
1004 @cindex @code{protected} members
1006 This command toggles the display of @code{protected} members.
1008 @cindex @code{private} members
1010 This command toggles the display of @code{private} members.
1012 @cindex @code{virtual} members
1014 This command toggles the display of @code{virtual} members.
1016 @cindex @code{inline} members
1018 This command toggles the display of @code{inline} members.
1020 @cindex @code{const} members
1022 This command toggles the display of @code{const} members.
1024 @cindex pure virtual members
1026 This command toggles the display of pure virtual members.
1028 @cindex remove filters
1030 This command removes all filters.
1033 These commands are also found in the buffer's context menu.
1038 @node Attributes, Long and Short Display, Filters, Member Buffers
1039 @comment node-name, next, previous, up
1040 @section Displaying Member Attributes
1042 @cindex member attribute display
1046 Toggle the display of member attributes (default is on).
1048 The nine member attributes Ebrowse knows about are displayed
1049 as a list a single-characters flags enclosed in angle brackets in front
1050 the of the member's name. A @samp{-} at a given position means that
1051 the attribute is false. The list of attributes from left to right is
1054 @cindex @code{template} attribute
1056 The member is a template.
1058 @cindex @code{extern "C"} attribute
1060 The member is declared @code{extern "C"}.
1062 @cindex @code{virtual} attribute
1064 Means the member is declared @code{virtual}.
1066 @cindex @code{inline}
1068 The member is declared @code{inline}.
1070 @cindex @code{const} attribute
1072 The member is @code{const}.
1074 @cindex pure virtual function attribute
1076 The member is a pure virtual function.
1078 @cindex @code{mutable} attribute
1080 The member is declared @code{mutable}.
1082 @cindex @code{explicit} attribute
1084 The member is declared @code{explicit}.
1087 The member is a function with a throw list.
1091 This command is also in the buffer's context menu.
1095 @node Long and Short Display, Regexp Display, Attributes, Member Buffers
1096 @comment node-name, next, previous, up
1097 @section Long and Short Member Display
1098 @cindex display form
1099 @cindex long display
1100 @cindex short display
1104 This command toggles the member buffer between short and long display
1105 form. The short display form displays member names, only:
1108 | isEmpty contains hasMember create
1109 | storeSize hash isEqual restoreGuts
1113 The long display shows one member per line with member name and regular
1114 expressions matching the member (if known):
1117 | isEmpty Bool isEmpty () const...
1118 | hash unsigned hash () const...
1119 | isEqual int isEqual (...
1122 Regular expressions will only be displayed when the Lisp database has
1123 not been produced with the @command{ebrowse} option @samp{--no-regexps}.
1124 @xref{Matching, --no-regexps, Regular Expressions}.
1130 @node Regexp Display, Switching Classes, Long and Short Display, Member Buffers
1131 @comment node-name, next, previous, up
1132 @section Display of Regular Expressions
1133 @cindex regular expression display
1137 This command toggles the long display form from displaying the regular
1138 expressions matching the member declarations to those expressions
1139 matching member definitions.
1142 Regular expressions will only be displayed when the Lisp database has
1143 not been produced with the @command{ebrowse} option @samp{--no-regexps},
1144 see @ref{Matching, --no-regexps, Regular Expressions}.
1149 @node Switching Classes, Killing/Burying, Regexp Display, Member Buffers
1150 @comment node-name, next, previous, up
1151 @section Displaying Another Class
1152 @cindex base class, display
1153 @cindex derived class, display
1154 @cindex superclass, display
1155 @cindex subclass, display
1156 @cindex class display
1160 This command lets you switch the member buffer to another class. It
1161 reads the name of the new class from the minibuffer with completion.
1164 This is the same command as @kbd{C c} but restricts the classes shown in
1165 the completion list to immediate base classes, only. If only one base
1166 class exists, this one is immediately shown in the minibuffer.
1169 Same as @kbd{C b}, but for derived classes.
1172 Switch to the previous class in the class hierarchy on the same level as
1173 the class currently displayed.
1176 Switch to the next sibling of the class in the class tree.
1182 @node Killing/Burying, Column Width, Switching Classes, Member Buffers
1183 @comment node-name, next, previous, up
1184 @section Burying a Member Buffer
1185 @cindex burying member buffers
1189 This command is a synonym for @kbd{M-x bury-buffer}.
1195 @node Column Width, Redisplay, Killing/Burying, Member Buffers
1196 @comment node-name, next, previous, up
1197 @section Setting the Column Width
1198 @cindex column width
1199 @cindex member indentation
1200 @cindex indentation, member
1204 This command sets the column width depending on the display form used
1205 (long or short display).
1211 @node Redisplay, Getting Help, Column Width, Member Buffers
1212 @comment node-name, next, previous, up
1213 @section Forced Redisplay
1214 @cindex redisplay of member buffers
1218 This command forces a redisplay of the member buffer. If the width
1219 of the window displaying the member buffer is changed this command
1220 redraws the member list with the appropriate column widths and number of
1227 @node Getting Help, , Redisplay, Member Buffers
1228 @comment node-name, next, previous, up
1233 This key is bound to @code{describe-mode}.
1239 @comment **************************************************************
1240 @comment *** TAGS LIKE FUNCTIONS
1241 @comment **************************************************************
1243 @node Tags-like Functions, Concept Index, Member Buffers, Top
1244 @comment node-name, next, previous, up
1245 @chapter Tags-like Functions
1247 Ebrowse provides tags functions similar to those of the standard
1248 Emacs Tags facility, but better suited to the needs of C++ programmers.
1251 * Finding and Viewing:: Going to a member declaration/definition
1252 * Position Stack:: Moving to previous locations
1253 * Search & Replace:: Searching and replacing over class tree files
1254 * Members in Files:: Listing all members in a given file
1255 * Apropos:: Listing members matching a regular expression
1256 * Symbol Completion:: Completing names while editing
1257 * Member Buffer Display:: Quickly display a member buffer for some
1263 @node Finding and Viewing, Position Stack, Tags-like Functions, Tags-like Functions
1264 @comment node-name, next, previous, up
1265 @section Finding and Viewing Members
1266 @cindex finding class member, in C++ source
1267 @cindex viewing class member, in C++ source
1269 @cindex member definition, finding, in C++ source
1270 @cindex member declaration, finding, in C++ source
1272 The functions in this section are similar to those described in
1273 @ref{Source Display}, and also in @ref{Finding/Viewing}, except that
1274 they work in a C++ source buffer, not in member and tree buffers created
1279 Find the definition of the member around point. If you invoke this
1280 function with a prefix argument, the declaration is searched.
1282 If more than one class contains a member with the given name you can
1283 select the class with completion. If there is a scope declaration in
1284 front of the member name, this class name is used as initial input for
1288 Find the declaration of the member around point.
1291 View the definition of the member around point.
1294 View the declaration of the member around point.
1297 Find a member's definition in another window.
1300 Find a member's declaration in another window.
1303 View a member's definition in another window.
1306 View a member's declaration in another window.
1309 Find a member's definition in another frame.
1312 Find a member's declaration in another frame.
1315 View a member's definition in another frame.
1318 View a member's declaration in another frame.
1323 @node Position Stack, Search & Replace, Finding and Viewing, Tags-like Functions
1324 @comment node-name, next, previous, up
1325 @section The Position Stack
1326 @cindex position stack
1328 When jumping to a member declaration or definition with one of
1329 Ebrowse's commands, the position from where you performed the
1330 jump and the position where you jumped to are recorded in a
1331 @dfn{position stack}. There are several ways in which you can quickly
1332 move to positions in the stack:@refill
1335 @cindex return to original position
1337 This command sets point to the previous position in the position stack.
1338 Directly after you performed a jump, this will put you back to the
1339 position where you came from.
1341 The stack is not popped, i.e.@: you can always switch back and forth
1342 between positions in the stack. To avoid letting the stack grow to
1343 infinite size there is a maximum number of positions defined. When this
1344 number is reached, older positions are discarded when new positions are
1345 pushed on the stack.
1348 This command moves forward in the position stack, setting point to
1349 the next position stored in the position stack.
1352 Displays an electric buffer showing all positions saved in the stack.
1353 You can select a position by pressing @kbd{SPC} in a line. You can
1354 view a position with @kbd{v}.
1360 @node Search & Replace, Members in Files, Position Stack, Tags-like Functions
1361 @comment node-name, next, previous, up
1362 @section Searching and Replacing
1363 @cindex searching multiple C++ files
1364 @cindex replacing in multiple C++ files
1365 @cindex restart tags-operation
1367 Ebrowse allows you to perform operations on all or a subset of the files
1368 mentioned in a class tree. When you invoke one of the following
1369 functions and more than one class tree is loaded, you must choose a
1370 class tree to use from an electric tree menu. If the selected tree
1371 contains marked classes, the following commands operate on the files
1372 mentioned in the marked classes only. Otherwise all files in the class
1377 This function performs a regular expression search in the chosen set of
1381 This command performs a search for calls of a given member which is
1382 selected in the usual way with completion.
1385 Perform a query replace over the set of files.
1388 All three operations above stop when finding a match. You can restart
1389 the operation with this command.
1392 This restarts the last tags operation with the next file in the list.
1398 @node Members in Files, Apropos, Search & Replace, Tags-like Functions
1399 @comment node-name, next, previous, up
1400 @section Members in Files
1402 @cindex members in file, listing
1403 @cindex list class members in a file
1404 @cindex file, members
1406 The command @kbd{C-c C-m l}, lists all members in a given file. The file
1407 name is read from the minibuffer with completion.
1412 @node Apropos, Symbol Completion, Members in Files, Tags-like Functions
1413 @comment node-name, next, previous, up
1414 @section Member Apropos
1415 @cindex apropos on class members
1416 @cindex members, matching regexp
1418 The command @kbd{C-c C-m a} can be used to display all members matching a
1419 given regular expression. This command can be very useful if you
1420 remember only part of a member name, and not its beginning.
1422 A special buffer is popped up containing all identifiers matching the
1423 regular expression, and what kind of symbol it is (e.g.@: a member
1424 function, or a type). You can then switch to this buffer, and use the
1425 command @kbd{C-c C-m f}, for example, to jump to a specific member.
1430 @node Symbol Completion, Member Buffer Display, Apropos, Tags-like Functions
1431 @comment node-name, next, previous, up
1432 @section Symbol Completion
1434 @cindex symbol completion
1436 The command @kbd{C-c C-m @key{TAB}} completes the symbol in front of point.
1441 @node Member Buffer Display, , Symbol Completion, Tags-like Functions
1442 @section Quick Member Display
1443 @cindex member buffer, for member at point
1445 You can quickly display a member buffer containing the member the cursor
1446 in on with the command @kbd{C-c C-m m}.
1449 @node Concept Index, , Tags-like Functions, Top
1450 @unnumbered Concept Index
1457 arch-tag: 52fe78ac-a1c4-48e7-815e-0a31acfad4bf