\input texinfo @c -*-texinfo-*-@comment %**start of header@setfilename ../info/ebrowse@settitle A Class Browser for C++@setchapternewpage odd@syncodeindex fn cp@comment %**end of header@copyingThis file documents Ebrowse, a C++ class browser for GNU Emacs.Copyright @copyright{} 2000, 2002 Free Software Foundation, Inc.@quotationPermission is granted to copy, distribute and/or modify this documentunder the terms of the GNU Free Documentation License, Version 1.1 orany later version published by the Free Software Foundation; with noInvariant Sections, with the Front-Cover texts being ``A GNUManual,'' and with the Back-Cover Texts as in (a) below. A copy of thelicense is included in the section entitled ``GNU Free DocumentationLicense'' in the Emacs manual.(a) The FSF's Back-Cover Text is: ``You have freedom to copy and modifythis GNU Manual, like GNU software. Copies published by the FreeSoftware Foundation raise funds for GNU development.''This document is part of a collection distributed under the GNU FreeDocumentation License. If you want to distribute this documentseparately from the collection, you can do so by adding a copy of thelicense to the document, as described in section 6 of the license.@end quotation@end copying@dircategory Emacs@direntry* Ebrowse: (ebrowse). A C++ class browser for Emacs.@end direntry@titlepage@title Ebrowse User's Manual@sp 4@subtitle Ebrowse/Emacs 21@sp 1@subtitle May 2000@sp 5@author Gerd Moellmann@page@vskip 0pt plus 1filll@insertcopying@end titlepage@node Top, Overview, (dir), (dir)@ifnottexYou can browse C++ class hierarchies from within Emacs by usingEbrowse.@end ifnottex@menu* Overview:: What is it and now does it work?* Generating browser files:: How to process C++ source files* Loading a Tree:: How to start browsing* Tree Buffers:: Traversing class hierarchies* Member Buffers:: Looking at member information* Tags-like Functions:: Finding members from source files* Concept Index:: An entry for each concept defined@end menu@node Overview, Generating browser files, Top, Top@chapter IntroductionWhen working in software projects using C++, I frequently missedsoftware support for two things:@itemize @bullet@itemWhen you get a new class library, or you have to work on source code youhaven't written yourself (or written sufficiently long ago), you need atool to let you navigate class hierarchies and investigatefeatures of the software. Without such a tool you often end up@command{grep}ing through dozens or even hundreds of files.@itemOnce you are productive, it would be nice to have a tool that knows yoursources and can help you while you are editing source code. Imagine tobe able to jump to the definition of an identifier while you areediting, or something that can complete long identifier names because itknows what identifiers are defined in your program@dots{}.@end itemizeThe design of Ebrowse reflects these two needs.How does it work?@cindex parser for C++ sourcesA fast parser written in C is used to process C++ source files.The parser generates a data base containing information about classes,members, global functions, defines, types etc.@: found in the sources.The second part of Ebrowse is a Lisp program. This program readsthe data base generated by the parser. It displays its contents invarious forms and allows you to perform operations on it, or dosomething with the help of the knowledge contained in the data base.@cindex major modes, of Ebrowse buffers@dfn{Navigational} use of Ebrowse is centered around twotypes of buffers which define their own major modes:@cindex tree buffer@dfn{Tree buffers} are used to view class hierarchies in tree form.They allow you to quickly find classes, find or view class declarations,perform operations like query replace on sets of your source files, andfinally tree buffers are used to produce the second buffer form---memberbuffers. @xref{Tree Buffers}.@cindex member bufferMembers are displayed in @dfn{member buffers}. Ebrowsedistinguishes between six different types of members; each type isdisplayed as a member list of its own:@itemize @bullet@itemInstance member variables;@itemInstance member functions;@itemStatic member variables;@itemStatic member functions;@itemFriends/Defines. The list of defines is contained in the friendslist of the pseudo-class @samp{*Globals*};@itemTypes (@code{enum}s, and @code{typedef}s defined with classscope).@refill@end itemizeYou can switch member buffers from one list to another, or to anotherclass. You can include inherited members in the display, you can setfilters that remove categories of members from the display, and mostimportantly you can find or view member declarations and definitionswith a keystroke. @xref{Member Buffers}.These two buffer types and the commands they provide support thenavigational use of the browser. The second form resembles Emacs' Tagspackage for C and other procedural languages. Ebrowse's commands ofthis type are not confined to special buffers; they are most often usedwhile you are editing your source code.To list just a subset of what you can use the Tags part of Ebrowse for:@itemize @bullet@itemJump to the definition or declaration of an identifier in your sourcecode, with an electric position stack that lets you easily navigateback and forth.@itemComplete identifiers in your source with a completion list containingidentifiers from your source code only.@itemPerform search and query replace operations over some or all of yoursource files.@itemShow all identifiers matching a regular expression---and jump to one ofthem, if you like.@end itemize@node Generating browser files, Loading a Tree, Overview, Top@comment node-name, next, previous, up@chapter Processing Source Files@cindex @command{ebrowse}, the program@cindex class data base creationBefore you can start browsing a class hierarchy, you must run the parser@command{ebrowse} on your source files in order to generate a Lisp database describing your program.@cindex command line for @command{ebrowse}The operation of @command{ebrowse} can be tailored with command lineoptions. Under normal circumstances it suffices to let the parser useits default settings. If you want to do that, call it with a commandline like:@exampleebrowse *.h *.cc@end example@noindentor, if your shell doesn't allow all the file names to be specified onthe command line,@exampleebrowse --files=@var{file}@end example@noindentwhere @var{file} contains the names of the files to be parsed, oneper line.@findex --helpWhen invoked with option @samp{--help}, @command{ebrowse} prints a list ofavailable command line options.@refill@menu* Input files:: Specifying which files to parse* Output file:: Changing the output file name* Structs and unions:: Omitting @code{struct}s and @code{union}s* Matching:: Setting regular expression lengths* Verbosity:: Getting feedback for lengthy operations@end menu@comment name, next, prev, up@node Input files, Output file, Generating browser files, Generating browser files@section Specifying Input Files@table @samp@cindex input files, for @command{ebrowse}@item fileEach file name on the command line tells @command{ebrowse} to parsethat file.@cindex response files@findex --files@item --files=@var{file}This command line switch specifies that @var{file} contains a list offile names to parse. Each line in @var{file} must contain one filename. More than one option of this kind is allowed. You might, forinstance, want to use one file for header files, and another for sourcefiles.@cindex standard input, specifying input files@item standard inputWhen @command{ebrowse} finds no file names on the command line, and no@samp{--file} option is specified, it reads file names from standardinput. This is sometimes convenient when @command{ebrowse} is used as partof a command pipe.@findex --search-path@item --search-path=@var{paths}This option lets you specify search paths for your input files.@var{paths} is a list of directory names, separated from each other by aeither a colon or a semicolon, depending on the operating system.@end table@cindex header files@cindex friend functionsIt is generally a good idea to specify input files so that header filesare parsed before source files. This facilitates the parser's work ofproperly identifying friend functions of a class.@comment name, next, prev, up@node Output file, Structs and unions, Input files, Generating browser files@section Changing the Output File Name@table @samp@cindex output file name@findex --output-file@cindex @file{BROWSE} file@item --output-file=@var{file}This option instructs @command{ebrowse} to generate a Lisp data base withname @var{file}. By default, the data base is named @file{BROWSE}, andis written in the directory in which @command{ebrowse} is invoked.If you regularly use data base names different from the default, youmight want to add this to your init file:@lisp(add-to-list 'auto-mode-alist '(@var{NAME} . ebrowse-tree-mode))@end lisp@noindentwhere @var{NAME} is the Lisp data base name you are using.@findex --append@cindex appending output to class data base@item --appendBy default, each run of @command{ebrowse} erases the old contents of theoutput file when writing to it. You can instruct @command{ebrowse} toappend its output to an existing file produced by @command{ebrowse}with this command line option.@end table@comment name, next, prev, up@node Structs and unions, Matching, Output file, Generating browser files@section Structs and Unions@cindex structs@cindex unions@table @samp@findex --no-structs-or-unions@item --no-structs-or-unionsThis switch suppresses all classes in the data base declared as@code{struct} or @code{union} in the output.This is mainly useful when you are converting an existingC program to C++, and do not want to see the old C structs in a classtree.@end table@comment name, next, prev, up@node Matching, Verbosity, Structs and unions, Generating browser files@section Regular Expressions@cindex regular expressions, recordingThe parser @command{ebrowse} normally writes regular expressions to itsoutput file that help the Lisp part of Ebrowse to find functions,variables etc.@: in their source files.You can instruct @command{ebrowse} to omit these regular expressions bycalling it with the command line switch @samp{--no-regexps}.When you do this, the Lisp part of Ebrowse tries to guess, from memberor class names, suitable regular expressions to locate that class ormember in source files. This works fine in most cases, but theautomatic generation of regular expressions can be too weak if unusualcoding styles are used.@table @samp@findex --no-regexps@item --no-regexpsThis option turns off regular expression recording.@findex --min-regexp-length@cindex minimum regexp length for recording@item --min-regexp-length=@var{n}The number @var{n} following this option specifies the minimum length ofthe regular expressions recorded to match class and member declarationsand definitions. The default value is set at compilation time of@command{ebrowse}.The smaller the minimum length, the higher the probability thatEbrowse will find a wrong match. The larger the value, thelarger the output file and therefore the memory consumption once thefile is read from Emacs.@findex --max-regexp-length@cindex maximum regexp length for recording@item --max-regexp-length=@var{n}The number following this option specifies the maximum length of theregular expressions used to match class and member declarations anddefinitions. The default value is set at compilation time of@command{ebrowse}.The larger the maximum length, the higher the probability that thebrowser will find a correct match, but the larger the value the largerthe output file and therefore the memory consumption once the data isread. As a second effect, the larger the regular expression, the higherthe probability that it will no longer match after editing the file.@end table@node Verbosity, , Matching, Generating browser files@comment node-name, next, previous, up@section Verbose Mode@cindex verbose operation@table @samp@findex --verbose@item --verboseWhen this option is specified on the command line, @command{ebrowse} printsa period for each file parsed, and it displays a @samp{+} for eachclass written to the output file.@findex --very-verbose@item --very-verboseThis option makes @command{ebrowse} print out the names of the files andthe names of the classes seen.@end table@node Loading a Tree, Tree Buffers, Generating browser files, Top@comment node-name, next, previous, up@chapter Starting to Browse@cindex loading@cindex browsingYou start browsing a class hierarchy parsed by @command{ebrowse} by justfinding the @file{BROWSE} file with @kbd{C-x C-f}.An example of a tree buffer display is shown below.@example| Collection| IndexedCollection| Array| FixedArray| Set| Dictionary@end example@cindex mouse highlight in tree buffersWhen you run Emacs on a display which supports colors and the mouse, youwill notice that certain areas in the tree buffer are highlightedwhen you move the mouse over them. This highlight marks mouse-sensitiveregions in the buffer. Please notice the help strings in the echo areawhen the mouse moves over a sensitive region.@cindex context menuA click with @kbd{Mouse-3} on a mouse-sensitive region opens a contextmenu. In addition to this, each buffer also has a buffer-specific menuthat is opened with a click with @kbd{Mouse-3} somewhere in the bufferwhere no highlight is displayed.@comment ****************************************************************@comment ***@comment *** TREE BUFFERS@comment ***@comment ****************************************************************@node Tree Buffers, Member Buffers, Loading a Tree, Top@comment node-name, next, previous, up@chapter Tree Buffers@cindex tree buffer mode@cindex class treesClass trees are displayed in @dfn{tree buffers} which install their ownmajor mode. Most Emacs keys work in tree buffers in the usual way,e.g.@: you can move around in the buffer with the usual @kbd{C-f},@kbd{C-v} etc., or you can search with @kbd{C-s}.Tree-specific commands are bound to simple keystrokes, similar to@code{Gnus}. You can take a look at the key bindings by entering@kbd{?} which calls @code{M-x describe-mode} in both tree and memberbuffers.@menu* Source Display:: Viewing and finding a class declaration* Member Display:: Showing members, switching to member buffers* Go to Class:: Finding a class* Quitting:: Discarding and burying the tree buffer* File Name Display:: Showing file names in the tree* Expanding and Collapsing:: Expanding and collapsing branches* Tree Indentation:: Changing the tree indentation* Killing Classes:: Removing class from the tree* Saving a Tree:: Saving a modified tree* Statistics:: Displaying class tree statistics* Marking Classes:: Marking and unmarking classes@end menu@node Source Display, Member Display, Tree Buffers, Tree Buffers@comment node-name, next, previous, up@section Viewing and Finding Class Declarations@cindex viewing, class@cindex finding a class@cindex class declarationYou can view or find a class declaration when the cursor is on a classname.@table @kbd@item SPCThis command views the class declaration if the databasecontains informations about it. If you don't parse the entire sourceyou are working on, some classes will only be known to exist but thelocation of their declarations and definitions will not be known.@refill@item RETWorks like @kbd{SPC}, except that it finds the classdeclaration rather than viewing it, so that it is ready forediting.@refill@end tableThe same functionality is available from the menu opened with@kbd{Mouse-3} on the class name.@node Member Display, Go to Class, Source Display, Tree Buffers@comment node-name, next, previous, up@section Displaying Members@cindex @samp{*Members*} buffer@cindex @samp{*Globals*}@cindex freezing a member buffer@cindex member lists, in tree buffersEbrowse distinguishes six different kinds of members, each ofwhich is displayed as a separate @dfn{member list}: instance variables,instance functions, static variables, static functions, friendfunctions, and types.Each of these lists can be displayed in a member buffer with a commandstarting with @kbd{L} when the cursor is on a class name. By default,there is only one member buffer named @dfn{*Members*} that is reusedeach time you display a member list---this has proven to be morepractical than to clutter up the buffer list with dozens of memberbuffers.If you want to display more than one member list at a time you can@dfn{freeze} its member buffer. Freezing a member buffer prevents itfrom being overwritten the next time you display a member list. You cantoggle this buffer status at any time.Every member list display command in the tree buffer can be used with aprefix argument (@kbd{C-u}). Without a prefix argument, the command willpop to a member buffer displaying the member list. With prefix argument,the member buffer will additionally be @dfn{frozen}.@table @kbd@cindex instance member variables, list@item L vThis command displays the list of instance member variables.@cindex static variables, list@item L VDisplay the list of static variables.@cindex friend functions, list@item L dDisplay the list of friend functions. This list is used for defines ifyou are viewing the class @samp{*Globals*} which is a place holder forglobal symbols.@cindex member functions, list@item L fDisplay the list of member functions.@cindex static member functions, list@item L FDisplay the list of static member functions.@cindex types, list@item L tDisplay a list of types.@end tableThese lists are also available from the class' context menu invoked with@kbd{Mouse-3} on the class name.@node Go to Class, Quitting, Member Display, Tree Buffers@comment node-name, next, previous, up@section Finding a Class@cindex locate class@cindex expanding branches@cindex class location@table @kbd@cindex search for class@item /This command reads a class name from the minibuffer with completion andpositions the cursor on the class in the class tree.If the branch of the class tree containing the class searched for iscurrently collapsed, the class itself and all its base classes arerecursively made visible. (See also @ref{Expanding andCollapsing}.)@refillThis function is also available from the tree buffer's context menu.@item nRepeat the last search done with @kbd{/}. Each tree buffer has its ownlocal copy of the regular expression last searched in it.@end table@node Quitting, File Name Display, Go to Class, Tree Buffers@comment node-name, next, previous, up@section Burying a Tree Buffer@cindex burying tree buffer@table @kbd@item qIs a synonym for @kbd{M-x bury-buffer}.@end table@node File Name Display, Expanding and Collapsing, Quitting, Tree Buffers@comment node-name, next, previous, up@section Displaying File Names@table @kbd@cindex file names in tree buffers@item T fThis command toggles the display of file names in a tree buffer. Iffile name display is switched on, the names of the files containing theclass declaration are shown to the right of the class names. If thefile is not known, the string @samp{unknown} is displayed.This command is also provided in the tree buffer's context menu.@item sDisplay file names for the current line, or for the number of linesgiven by a prefix argument.@end tableHere is an example of a tree buffer with file names displayed.@example| Collection (unknown)| IndexedCollection (indexedcltn.h)| Array (array.h)| FixedArray (fixedarray.h)| Set (set.h)| Dictionary (dict.h)@end example@node Expanding and Collapsing, Tree Indentation, File Name Display, Tree Buffers@comment node-name, next, previous, up@section Expanding and Collapsing a Tree@cindex expand tree branch@cindex collapse tree branch@cindex branches of class tree@cindex class tree, collapse or expandYou can expand and collapse parts of a tree to reduce the complexity oflarge class hierarchies. Expanding or collapsing branches of a tree hasno impact on the functionality of other commands, like @kbd{/}. (Seealso @ref{Go to Class}.)@refillCollapsed branches are indicated with an ellipsis following the classname like in the example below.@example| Collection| IndexedCollection...| Set| Dictionary@end example@table @kbd@item -This command collapses the branch of the tree starting at the class thecursor is on.@item +This command expands the branch of the tree starting at the class thecursor is on. Both commands for collapsing and expanding branches arealso available from the class' object menu.@item *This command expands all collapsed branches in the tree.@end table@node Tree Indentation, Killing Classes, Expanding and Collapsing, Tree Buffers@comment node-name, next, previous, up@section Changing the Tree Indentation@cindex tree indentation@cindex indentation of the tree@table @kbd@item T wThis command reads a new indentation width from the minibuffer andredisplays the tree buffer with the new indentation It is alsoavailable from the tree buffer's context menu.@end table@node Killing Classes, Saving a Tree, Tree Indentation, Tree Buffers@comment node-name, next, previous, up@section Removing Classes from the Tree@cindex killing classes@cindex class, remove from tree@table @kbd@item C-kThis command removes the class the cursor is on and all its derivedclasses from the tree. The user is asked for confirmation before thedeletion is actually performed.@end table@node Saving a Tree, Statistics, Killing Classes, Tree Buffers@comment node-name, next, previous, up@comment node-name, next, previous, up@section Saving a Tree@cindex save tree to a file@cindex tree, save to a file@cindex class tree, save to a file@table @kbd@item C-x C-sThis command writes a class tree to the file from which it was read.This is useful after classes have been deleted from a tree.@item C-x C-wWrites the tree to a file whose name is read from the minibuffer.@end table@node Statistics, Marking Classes, Saving a Tree, Tree Buffers@comment node-name, next, previous, up@cindex statistics for a tree@cindex tree statistics@cindex class statistics@table @kbd@item xDisplay statistics for the tree, like number of classes in it, number ofmember functions, etc. This command can also be found in the buffer'scontext menu.@end table@node Marking Classes, , Statistics, Tree Buffers@comment node-name, next, previous, up@cindex marking classes@cindex operations on marked classesClasses can be marked for operations similar to the standard Emacscommands @kbd{M-x tags-search} and @kbd{M-x tags-query-replace} (seealso @xref{Tags-like Functions}.)@refill@table @kbd@cindex toggle mark@item M tToggle the mark of the line point is in or for as many lines as given bya prefix command. This command can also be found in the class' contextmenu.@cindex unmark all@item M aUnmark all classes. With prefix argument @kbd{C-u}, mark all classes inthe tree. Since this command operates on the whole buffer, it can also befound in the buffer's object menu.@end tableMarked classes are displayed with an @code{>} in column one of the treedisplay, like in the following example@example|> Collection| IndexedCollection...|> Set| Dictionary@end example@c ****************************************************************@c ***@c *** MEMBER BUFFERS@c ***@c ****************************************************************@node Member Buffers, Tags-like Functions, Tree Buffers, Top@comment node-name, next, previous, up@chapter Member Buffers@cindex members@cindex member buffer mode@cindex class members, types@cindex types of class members@dfn{Member buffers} are used to operate on lists of members of a class.Ebrowse distinguishes six kinds of lists:@itemize @bullet@itemInstance variables (normal member variables);@itemInstance functions (normal member functions);@itemStatic variables;@itemStatic member functions;@itemFriend functions;@itemTypes (@code{enum}s and @code{typedef}s defined with class scope.Nested classes will be shown in the class tree like normal classes.@end itemizeLike tree buffers, member buffers install their own major mode. Alsolike in tree buffers, menus are provided for certain areas in thebuffer: members, classes, and the buffer itself.@menu* Switching Member Lists:: Choosing which members to display* Finding/Viewing:: Modifying source code* Inherited Members:: Display of Inherited Members* Searching Members:: Finding members in member buffer* Switching to Tree:: Going back to the tree buffer* Filters:: Selective member display* Attributes:: Display of @code{virtual} etc.* Long and Short Display:: Comprehensive and verbose display* Regexp Display:: Showing matching regular expressions* Switching Classes:: Displaying another class* Killing/Burying:: Getting rid of the member buffer* Column Width:: Display style* Redisplay:: Redrawing the member list* Getting Help:: How to get help for key bindings@end menu@node Switching Member Lists, Finding/Viewing, Member Buffers, Member Buffers@comment node-name, next, previous, up@section Switching Member Lists@cindex member lists, in member buffers@cindex static members@cindex friends@cindex types@cindex defines@table @kbd@cindex next member list@item L nThis command switches the member buffer display to the next member list.@cindex previous member list@item L pThis command switches the member buffer display to the previous memberlist.@item L fSwitch to the list of member functions.@cindex static@item L FSwitch to the list of static member functions.@item L vSwitch to the list of member variables.@item L VSwitch to the list of static member variables.@item L dSwitch to the list of friends or defines.@item L tSwitch to the list of types.@end tableBoth commands cycle through the member list.Most of the commands are also available from the member buffer'scontext menu.@node Finding/Viewing, Inherited Members, Switching Member Lists, Member Buffers@comment node-name, next, previous, up@section Finding and Viewing Member Source@cindex finding members, in member buffers@cindex viewing members, in member buffers@cindex member definitions, in member buffers@cindex member declarations, in member buffers@cindex definition of a member, in member buffers@cindex declaration of a member, in member buffers@table @kbd@item RETThis command finds the definition of the member the cursor is on.Finding involves roughly the same as the standard Emacs tags facilitydoes---loading the file and searching for a regular expression matchingthe member.@item fThis command finds the declaration of the member the cursor is on.@item SPCThis is the same command as @kbd{RET}, but views the member definitioninstead of finding the member's source file.@item vThis is the same command as @kbd{f}, but views the member's declarationinstead of finding the file the declaration is in.@end tableYou can install a hook function to perform actions after a member orclass declaration or definition has been found, or when it is not found.All the commands described above can also be found in the context menudisplayed when clicking @kbd{Mouse-2} on a member name.@node Inherited Members, Searching Members, Finding/Viewing, Member Buffers@comment node-name, next, previous, up@section Display of Inherited Members@cindex superclasses, members@cindex base classes, members@cindex inherited members@table @kbd@item D bThis command toggles the display of inherited members in the memberbuffer. This is also in the buffer's context menu.@end table@node Searching Members, Switching to Tree, Inherited Members, Member Buffers@comment node-name, next, previous, up@section Searching Members@cindex searching members@table @kbd@item G vPosition the cursor on a member whose name is read from the minibuffer;only members shown in the current member buffer appear in the completionlist.@item G mLike the above command, but all members for the current class appear inthe completion list. If necessary, the current member list is switchedto the one containing the member.With a prefix argument (@kbd{C-u}), all members in the class tree,i.e.@: all members the browser knows about appear in the completionlist. The member display will be switched to the class and member listcontaining the member.@item G nRepeat the last member search.@end tableLook into the buffer's context menu for a convenient way to do this witha mouse.@node Switching to Tree, Filters, Searching Members, Member Buffers@comment node-name, next, previous, up@section Switching to Tree Buffer@cindex tree buffer, switch to@cindex buffer switching@cindex switching buffers@table @kbd@item TABPop up the tree buffer to which the member buffer belongs.@item tDo the same as @kbd{TAB} but also position the cursor on the classdisplayed in the member buffer.@end table@node Filters, Attributes, Switching to Tree, Member Buffers@comment node-name, next, previous, up@section Filters@cindex filters@table @kbd@cindex @code{public} members@item F a uThis command toggles the display of @code{public} members. The@samp{a} stands for `access'.@cindex @code{protected} members@item F a oThis command toggles the display of @code{protected} members.@cindex @code{private} members@item F a iThis command toggles the display of @code{private} members.@cindex @code{virtual} members@item F vThis command toggles the display of @code{virtual} members.@cindex @code{inline} members@item F iThis command toggles the display of @code{inline} members.@cindex @code{const} members@item F cThis command toggles the display of @code{const} members.@cindex pure virtual members@item F pThis command toggles the display of pure virtual members.@cindex remove filters@item F rThis command removes all filters.@end tableThese commands are also found in the buffer's context menu.@node Attributes, Long and Short Display, Filters, Member Buffers@comment node-name, next, previous, up@section Displaying Member Attributes@cindex attributes@cindex member attribute display@table @kbd@item D aToggle the display of member attributes (default is on).The nine member attributes Ebrowse knows about are displayedas a list a single-characters flags enclosed in angle brackets in frontthe of the member's name. A @samp{-} at a given position means thatthe attribute is false. The list of attributes from left to right is@table @samp@cindex @code{template} attribute@item TThe member is a template.@cindex @code{extern "C"} attribute@item CThe member is declared @code{extern "C"}.@cindex @code{virtual} attribute@item vMeans the member is declared @code{virtual}.@cindex @code{inline}@item iThe member is declared @code{inline}.@cindex @code{const} attribute@item cThe member is @code{const}.@cindex pure virtual function attribute@item 0The member is a pure virtual function.@cindex @code{mutable} attribute@item mThe member is declared @code{mutable}.@cindex @code{explicit} attribute@item eThe member is declared @code{explicit}.@item tThe member is a function with a throw list.@end table@end tableThis command is also in the buffer's context menu.@node Long and Short Display, Regexp Display, Attributes, Member Buffers@comment node-name, next, previous, up@section Long and Short Member Display@cindex display form@cindex long display@cindex short display@table @kbd@item D lThis command toggles the member buffer between short and long displayform. The short display form displays member names, only:@example| isEmpty contains hasMember create| storeSize hash isEqual restoreGuts| saveGuts@end exampleThe long display shows one member per line with member name and regularexpressions matching the member (if known):@example| isEmpty Bool isEmpty () const...| hash unsigned hash () const...| isEqual int isEqual (...@end exampleRegular expressions will only be displayed when the Lisp database hasnot been produced with the @command{ebrowse} option @samp{--no-regexps}.@xref{Matching, --no-regexps, Regular Expressions}.@end table@node Regexp Display, Switching Classes, Long and Short Display, Member Buffers@comment node-name, next, previous, up@section Display of Regular Expressions@cindex regular expression display@table @kbd@item D rThis command toggles the long display form from displaying the regularexpressions matching the member declarations to those expressionsmatching member definitions.@end tableRegular expressions will only be displayed when the Lisp database hasnot been produced with the @command{ebrowse} option @samp{--no-regexps},see @ref{Matching, --no-regexps, Regular Expressions}.@node Switching Classes, Killing/Burying, Regexp Display, Member Buffers@comment node-name, next, previous, up@section Displaying Another Class@cindex base class, display@cindex derived class, display@cindex superclass, display@cindex subclass, display@cindex class display@table @kbd@item C cThis command lets you switch the member buffer to another class. Itreads the name of the new class from the minibuffer with completion.@item C bThis is the same command as @kbd{C c} but restricts the classes shown inthe completion list to immediate base classes, only. If only one baseclass exists, this one is immediately shown in the minibuffer.@item C dSame as @kbd{C b}, but for derived classes.@item C pSwitch to the previous class in the class hierarchy on the same level asthe class currently displayed.@item C nSwitch to the next sibling of the class in the class tree.@end table@node Killing/Burying, Column Width, Switching Classes, Member Buffers@comment node-name, next, previous, up@section Burying a Member Buffer@cindex burying member buffers@table @kbd@item qThis command is a synonym for @kbd{M-x bury-buffer}.@end table@node Column Width, Redisplay, Killing/Burying, Member Buffers@comment node-name, next, previous, up@section Setting the Column Width@cindex column width@cindex member indentation@cindex indentation, member@table @kbd@item D wThis command sets the column width depending on the display form used(long or short display).@end table@node Redisplay, Getting Help, Column Width, Member Buffers@comment node-name, next, previous, up@section Forced Redisplay@cindex redisplay of member buffers@table @kbd@item C-lThis command forces a redisplay of the member buffer. If the widthof the window displaying the member buffer is changed this commandredraws the member list with the appropriate column widths and number ofcolumns.@end table@node Getting Help, , Redisplay, Member Buffers@comment node-name, next, previous, up@cindex help@table @kbd@item ?This key is bound to @code{describe-mode}.@end table@comment **************************************************************@comment *** TAGS LIKE FUNCTIONS@comment **************************************************************@node Tags-like Functions, Concept Index, Member Buffers, Top@comment node-name, next, previous, up@chapter Tags-like FunctionsEbrowse provides tags functions similar to those of the standardEmacs Tags facility, but better suited to the needs of C++ programmers.@menu* Finding and Viewing:: Going to a member declaration/definition* Position Stack:: Moving to previous locations* Search & Replace:: Searching and replacing over class tree files* Members in Files:: Listing all members in a given file* Apropos:: Listing members matching a regular expression* Symbol Completion:: Completing names while editing* Member Buffer Display:: Quickly display a member buffer for some identifier@end menu@node Finding and Viewing, Position Stack, Tags-like Functions, Tags-like Functions@comment node-name, next, previous, up@section Finding and Viewing Members@cindex finding class member, in C++ source@cindex viewing class member, in C++ source@cindex tags@cindex member definition, finding, in C++ source@cindex member declaration, finding, in C++ sourceThe functions in this section are similar to those described in@ref{Source Display}, and also in @ref{Finding/Viewing}, except thatthey work in a C++ source buffer, not in member and tree buffers createdby Ebrowse.@table @kbd@item C-c b fFind the definition of the member around point. If you invoke thisfunction with a prefix argument, the declaration is searched.If more than one class contains a member with the given name you canselect the class with completion. If there is a scope declaration infront of the member name, this class name is used as initial input forthe completion.@item C-c b FFind the declaration of the member around point.@item C-c b vView the definition of the member around point.@item C-c b VView the declaration of the member around point.@item C-c b 4 fFind a member's definition in another window.@item C-c b 4 FFind a member's declaration in another window.@item C-c b 4 vView a member's definition in another window.@item C-c b 4 VView a member's declaration in another window.@item C-c b 5 fFind a member's definition in another frame.@item C-c b 5 FFind a member's declaration in another frame.@item C-c b 5 vView a member's definition in another frame.@item C-c b 5 VView a member's declaration in another frame.@end table@node Position Stack, Search & Replace, Finding and Viewing, Tags-like Functions@comment node-name, next, previous, up@section The Position Stack@cindex position stackWhen jumping to a member declaration or definition with one ofEbrowse's commands, the position from where you performed thejump and the position where you jumped to are recorded in a@dfn{position stack}. There are several ways in which you can quicklymove to positions in the stack:@refill@table @kbd@cindex return to original position@item C-c b -This command sets point to the previous position in the position stack.Directly after you performed a jump, this will put you back to theposition where you came from.The stack is not popped, i.e.@: you can always switch back and forthbetween positions in the stack. To avoid letting the stack grow toinfinite size there is a maximum number of positions defined. When thisnumber is reached, older positions are discarded when new positions arepushed on the stack.@item C-c b +This command moves forward in the position stack, setting point tothe next position stored in the position stack.@item C-c b pDisplays an electric buffer showing all positions saved in the stack.You can select a position by pressing @kbd{SPC} in a line. You canview a position with @kbd{v}.@end table@node Search & Replace, Members in Files, Position Stack, Tags-like Functions@comment node-name, next, previous, up@section Searching and Replacing@cindex searching multiple C++ files@cindex replacing in multiple C++ files@cindex restart tags-operationEbrowse allows you to perform operations on all or a subset of the filesmentioned in a class tree. When you invoke one of the followingfunctions and more than one class tree is loaded, you must choose aclass tree to use from an electric tree menu. If the selected treecontains marked classes, the following commands operate on the filesmentioned in the marked classes only. Otherwise all files in the classtree are used.@table @kbd@item C-c b sThis function performs a regular expression search in the chosen set offiles.@item C-c b uThis command performs a search for calls of a given member which isselected in the usual way with completion.@item C-c b %Perform a query replace over the set of files.@item C-c b ,All three operations above stop when finding a match. You can restartthe operation with this command.@item C-c b nThis restarts the last tags operation with the next file in the list.@end table@node Members in Files, Apropos, Search & Replace, Tags-like Functions@comment node-name, next, previous, up@section Members in Files@cindex files@cindex members in file, listing@cindex list class members in a file@cindex file, membersThe command @kbd{C-c b l}, lists all members in a given file. The filename is read from the minibuffer with completion.@node Apropos, Symbol Completion, Members in Files, Tags-like Functions@comment node-name, next, previous, up@section Member Apropos@cindex apropos on class members@cindex members, matching regexpThe command @kbd{C-c b a} can be used to display all members matching agiven regular expression. This command can be very useful if youremember only part of a member name, and not its beginning.A special buffer is popped up containing all identifiers matching theregular expression, and what kind of symbol it is (e.g.@: a memberfunction, or a type). You can then switch to this buffer, and use thecommand @kbd{C-c b f}, for example, to jump to a specific member.@node Symbol Completion, Member Buffer Display, Apropos, Tags-like Functions@comment node-name, next, previous, up@section Symbol Completion@cindex completion@cindex symbol completionThe command @kbd{C-c b TAB} completes the symbol in front of point.@node Member Buffer Display, , Symbol Completion, Tags-like Functions@section Quick Member Display@cindex member buffer, for member at pointYou can quickly display a member buffer containing the member the cursorin on with the command @kbd{C-c b m}.@node Concept Index, , Tags-like Functions, Top@unnumbered Concept Index@printindex cp@contents@bye@ignore arch-tag: 52fe78ac-a1c4-48e7-815e-0a31acfad4bf@end ignore