# HG changeset patch # User Glenn Morris # Date 1189054760 0 # Node ID db24e3987fcac98e1e29765b8980a3afebdb175a # Parent a80a71c8d98e78c6be4e47b4ff50373cb8e049ff Move here from ../../man diff -r a80a71c8d98e -r db24e3987fca doc/misc/ebrowse.texi --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/doc/misc/ebrowse.texi Thu Sep 06 04:59:20 2007 +0000 @@ -0,0 +1,1462 @@ +\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 + +@copying +This file documents Ebrowse, a C++ class browser for GNU Emacs. + +Copyright @copyright{} 2000, 2001, 2002, 2003, 2004, +2005, 2006, 2007 Free Software Foundation, Inc. + +@quotation +Permission is granted to copy, distribute and/or modify this document +under the terms of the GNU Free Documentation License, Version 1.2 or +any later version published by the Free Software Foundation; with no +Invariant Sections, with the Front-Cover texts being ``A GNU +Manual,'' and with the Back-Cover Texts as in (a) below. A copy of the +license is included in the section entitled ``GNU Free Documentation +License'' in the Emacs manual. + +(a) The FSF's Back-Cover Text is: ``You have freedom to copy and modify +this GNU Manual, like GNU software. Copies published by the Free +Software Foundation raise funds for GNU development.'' + +This document is part of a collection distributed under the GNU Free +Documentation License. If you want to distribute this document +separately from the collection, you can do so by adding a copy of the +license 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 +@sp 5 +@author Gerd Moellmann +@page +@vskip 0pt plus 1filll +@insertcopying +@end titlepage + +@node Top, Overview, (dir), (dir) + +@ifnottex +You can browse C++ class hierarchies from within Emacs by using +Ebrowse. +@end ifnottex + +@menu +* Overview:: What is it and how 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 +* GNU Free Documentation License:: The license for this documentation. +* Concept Index:: An entry for each concept defined +@end menu + + + + +@node Overview, Generating browser files, Top, Top +@chapter Introduction + +When working in software projects using C++, I frequently missed +software support for two things: + +@itemize @bullet +@item +When you get a new class library, or you have to work on source code you +haven't written yourself (or written sufficiently long ago), you need a +tool to let you navigate class hierarchies and investigate +features of the software. Without such a tool you often end up +@command{grep}ing through dozens or even hundreds of files. + +@item +Once you are productive, it would be nice to have a tool that knows your +sources and can help you while you are editing source code. Imagine to +be able to jump to the definition of an identifier while you are +editing, or something that can complete long identifier names because it +knows what identifiers are defined in your program@dots{}. +@end itemize + +The design of Ebrowse reflects these two needs. + +How does it work? + +@cindex parser for C++ sources +A 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 reads +the data base generated by the parser. It displays its contents in +various forms and allows you to perform operations on it, or do +something 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 two +types 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, and +finally tree buffers are used to produce the second buffer form---member +buffers. @xref{Tree Buffers}. + +@cindex member buffer +Members are displayed in @dfn{member buffers}. Ebrowse +distinguishes between six different types of members; each type is +displayed as a member list of its own: + +@itemize @bullet +@item +Instance member variables; + +@item +Instance member functions; + +@item +Static member variables; + +@item +Static member functions; + +@item +Friends/Defines. The list of defines is contained in the friends +list of the pseudo-class @samp{*Globals*}; + +@item +Types (@code{enum}s, and @code{typedef}s defined with class +scope).@refill +@end itemize + +You can switch member buffers from one list to another, or to another +class. You can include inherited members in the display, you can set +filters that remove categories of members from the display, and most +importantly you can find or view member declarations and definitions +with a keystroke. @xref{Member Buffers}. + +These two buffer types and the commands they provide support the +navigational use of the browser. The second form resembles Emacs' Tags +package for C and other procedural languages. Ebrowse's commands of +this type are not confined to special buffers; they are most often used +while you are editing your source code. + +To list just a subset of what you can use the Tags part of Ebrowse for: + +@itemize @bullet +@item +Jump to the definition or declaration of an identifier in your source +code, with an electric position stack that lets you easily navigate +back and forth. + +@item +Complete identifiers in your source with a completion list containing +identifiers from your source code only. + +@item +Perform search and query replace operations over some or all of your +source files. + +@item +Show all identifiers matching a regular expression---and jump to one of +them, 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 creation +Before you can start browsing a class hierarchy, you must run the parser +@command{ebrowse} on your source files in order to generate a Lisp data +base describing your program. + +@cindex command line for @command{ebrowse} +The operation of @command{ebrowse} can be tailored with command line +options. Under normal circumstances it suffices to let the parser use +its default settings. If you want to do that, call it with a command +line like: + +@example +ebrowse *.h *.cc +@end example + +@noindent +or, if your shell doesn't allow all the file names to be specified on +the command line, + +@example +ebrowse --files=@var{file} +@end example + +@noindent +where @var{file} contains the names of the files to be parsed, one +per line. + +@findex --help +When invoked with option @samp{--help}, @command{ebrowse} prints a list of +available 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 file +Each file name on the command line tells @command{ebrowse} to parse +that file. + +@cindex response files +@findex --files +@item --files=@var{file} +This command line switch specifies that @var{file} contains a list of +file names to parse. Each line in @var{file} must contain one file +name. More than one option of this kind is allowed. You might, for +instance, want to use one file for header files, and another for source +files. + +@cindex standard input, specifying input files +@item standard input +When @command{ebrowse} finds no file names on the command line, and no +@samp{--file} option is specified, it reads file names from standard +input. This is sometimes convenient when @command{ebrowse} is used as part +of 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 a +either a colon or a semicolon, depending on the operating system. +@end table + +@cindex header files +@cindex friend functions +It is generally a good idea to specify input files so that header files +are parsed before source files. This facilitates the parser's work of +properly 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 with +name @var{file}. By default, the data base is named @file{BROWSE}, and +is written in the directory in which @command{ebrowse} is invoked. + +If you regularly use data base names different from the default, you +might want to add this to your init file: + +@lisp +(add-to-list 'auto-mode-alist '(@var{NAME} . ebrowse-tree-mode)) +@end lisp + +@noindent +where @var{NAME} is the Lisp data base name you are using. + +@findex --append +@cindex appending output to class data base +@item --append +By default, each run of @command{ebrowse} erases the old contents of the +output file when writing to it. You can instruct @command{ebrowse} to +append 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-unions +This 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 existing +C program to C++, and do not want to see the old C structs in a class +tree. +@end table + + + + +@comment name, next, prev, up +@node Matching, Verbosity, Structs and unions, Generating browser files +@section Regular Expressions + +@cindex regular expressions, recording +The parser @command{ebrowse} normally writes regular expressions to its +output 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 by +calling it with the command line switch @samp{--no-regexps}. + +When you do this, the Lisp part of Ebrowse tries to guess, from member +or class names, suitable regular expressions to locate that class or +member in source files. This works fine in most cases, but the +automatic generation of regular expressions can be too weak if unusual +coding styles are used. + +@table @samp +@findex --no-regexps +@item --no-regexps +This 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 of +the regular expressions recorded to match class and member declarations +and definitions. The default value is set at compilation time of +@command{ebrowse}. + +The smaller the minimum length, the higher the probability that +Ebrowse will find a wrong match. The larger the value, the +larger the output file and therefore the memory consumption once the +file 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 the +regular expressions used to match class and member declarations and +definitions. The default value is set at compilation time of +@command{ebrowse}. + +The larger the maximum length, the higher the probability that the +browser will find a correct match, but the larger the value the larger +the output file and therefore the memory consumption once the data is +read. As a second effect, the larger the regular expression, the higher +the 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 --verbose +When this option is specified on the command line, @command{ebrowse} prints +a period for each file parsed, and it displays a @samp{+} for each +class written to the output file. + +@findex --very-verbose +@item --very-verbose +This option makes @command{ebrowse} print out the names of the files and +the 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 browsing + +You start browsing a class hierarchy parsed by @command{ebrowse} by just +finding 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 buffers +When you run Emacs on a display which supports colors and the mouse, you +will notice that certain areas in the tree buffer are highlighted +when you move the mouse over them. This highlight marks mouse-sensitive +regions in the buffer. Please notice the help strings in the echo area +when the mouse moves over a sensitive region. + +@cindex context menu +A click with @kbd{Mouse-3} on a mouse-sensitive region opens a context +menu. In addition to this, each buffer also has a buffer-specific menu +that is opened with a click with @kbd{Mouse-3} somewhere in the buffer +where 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 trees + +Class trees are displayed in @dfn{tree buffers} which install their own +major 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 member +buffers. + +@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 declaration + +You can view or find a class declaration when the cursor is on a class +name. + +@table @kbd +@item SPC +This command views the class declaration if the database +contains informations about it. If you don't parse the entire source +you are working on, some classes will only be known to exist but the +location of their declarations and definitions will not be known.@refill + +@item RET +Works like @kbd{SPC}, except that it finds the class +declaration rather than viewing it, so that it is ready for +editing.@refill +@end table + +The 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 buffers + +Ebrowse distinguishes six different kinds of members, each of +which is displayed as a separate @dfn{member list}: instance variables, +instance functions, static variables, static functions, friend +functions, and types. + +Each of these lists can be displayed in a member buffer with a command +starting with @kbd{L} when the cursor is on a class name. By default, +there is only one member buffer named @dfn{*Members*} that is reused +each time you display a member list---this has proven to be more +practical than to clutter up the buffer list with dozens of member +buffers. + +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 it +from being overwritten the next time you display a member list. You can +toggle this buffer status at any time. + +Every member list display command in the tree buffer can be used with a +prefix argument (@kbd{C-u}). Without a prefix argument, the command will +pop 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 v +This command displays the list of instance member variables. + +@cindex static variables, list +@item L V +Display the list of static variables. + +@cindex friend functions, list +@item L d +Display the list of friend functions. This list is used for defines if +you are viewing the class @samp{*Globals*} which is a place holder for +global symbols. + +@cindex member functions, list +@item L f +Display the list of member functions. + +@cindex static member functions, list +@item L F +Display the list of static member functions. + +@cindex types, list +@item L t +Display a list of types. +@end table + +These 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 and +positions the cursor on the class in the class tree. + +If the branch of the class tree containing the class searched for is +currently collapsed, the class itself and all its base classes are +recursively made visible. (See also @ref{Expanding and +Collapsing}.)@refill + +This function is also available from the tree buffer's context menu. + +@item n +Repeat the last search done with @kbd{/}. Each tree buffer has its own +local 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 q +Is 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 f +This command toggles the display of file names in a tree buffer. If +file name display is switched on, the names of the files containing the +class declaration are shown to the right of the class names. If the +file is not known, the string @samp{unknown} is displayed. + +This command is also provided in the tree buffer's context menu. + +@item s +Display file names for the current line, or for the number of lines +given by a prefix argument. +@end table + +Here 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 expand + +You can expand and collapse parts of a tree to reduce the complexity of +large class hierarchies. Expanding or collapsing branches of a tree has +no impact on the functionality of other commands, like @kbd{/}. (See +also @ref{Go to Class}.)@refill + +Collapsed branches are indicated with an ellipsis following the class +name 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 the +cursor is on. + +@item + +This command expands the branch of the tree starting at the class the +cursor is on. Both commands for collapsing and expanding branches are +also 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 w +This command reads a new indentation width from the minibuffer and +redisplays the tree buffer with the new indentation It is also +available 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-k +This command removes the class the cursor is on and all its derived +classes from the tree. The user is asked for confirmation before the +deletion 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-s +This 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-w +Writes 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 x +Display statistics for the tree, like number of classes in it, number of +member functions, etc. This command can also be found in the buffer's +context menu. +@end table + + + + +@node Marking Classes, , Statistics, Tree Buffers +@comment node-name, next, previous, up +@cindex marking classes +@cindex operations on marked classes + +Classes can be marked for operations similar to the standard Emacs +commands @kbd{M-x tags-search} and @kbd{M-x tags-query-replace} (see +also @xref{Tags-like Functions}.)@refill + +@table @kbd +@cindex toggle mark +@item M t +Toggle the mark of the line point is in or for as many lines as given by +a prefix command. This command can also be found in the class' context +menu. + +@cindex unmark all +@item M a +Unmark all classes. With prefix argument @kbd{C-u}, mark all classes in +the tree. Since this command operates on the whole buffer, it can also be +found in the buffer's object menu. +@end table + +Marked classes are displayed with an @code{>} in column one of the tree +display, 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 +@item +Instance variables (normal member variables); +@item +Instance functions (normal member functions); +@item +Static variables; +@item +Static member functions; +@item +Friend functions; +@item +Types (@code{enum}s and @code{typedef}s defined with class scope. +Nested classes will be shown in the class tree like normal classes. +@end itemize + +Like tree buffers, member buffers install their own major mode. Also +like in tree buffers, menus are provided for certain areas in the +buffer: 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 n +This command switches the member buffer display to the next member list. + +@cindex previous member list +@item L p +This command switches the member buffer display to the previous member +list. + +@item L f +Switch to the list of member functions. + +@cindex static +@item L F +Switch to the list of static member functions. + +@item L v +Switch to the list of member variables. + +@item L V +Switch to the list of static member variables. + +@item L d +Switch to the list of friends or defines. + +@item L t +Switch to the list of types. +@end table + +Both commands cycle through the member list. + +Most of the commands are also available from the member buffer's +context 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 RET +This command finds the definition of the member the cursor is on. +Finding involves roughly the same as the standard Emacs tags facility +does---loading the file and searching for a regular expression matching +the member. + +@item f +This command finds the declaration of the member the cursor is on. + +@item SPC +This is the same command as @kbd{RET}, but views the member definition +instead of finding the member's source file. + +@item v +This is the same command as @kbd{f}, but views the member's declaration +instead of finding the file the declaration is in. +@end table + +You can install a hook function to perform actions after a member or +class declaration or definition has been found, or when it is not found. + +All the commands described above can also be found in the context menu +displayed 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 b +This command toggles the display of inherited members in the member +buffer. 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 v +Position the cursor on a member whose name is read from the minibuffer; +only members shown in the current member buffer appear in the completion +list. + +@item G m +Like the above command, but all members for the current class appear in +the completion list. If necessary, the current member list is switched +to 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 completion +list. The member display will be switched to the class and member list +containing the member. + +@item G n +Repeat the last member search. +@end table + +Look into the buffer's context menu for a convenient way to do this with +a 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 @key{TAB} +Pop up the tree buffer to which the member buffer belongs. + +@item t +Do the same as @key{TAB} but also position the cursor on the class +displayed 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 u +This command toggles the display of @code{public} members. The +@samp{a} stands for `access'. + +@cindex @code{protected} members +@item F a o +This command toggles the display of @code{protected} members. + +@cindex @code{private} members +@item F a i +This command toggles the display of @code{private} members. + +@cindex @code{virtual} members +@item F v +This command toggles the display of @code{virtual} members. + +@cindex @code{inline} members +@item F i +This command toggles the display of @code{inline} members. + +@cindex @code{const} members +@item F c +This command toggles the display of @code{const} members. + +@cindex pure virtual members +@item F p +This command toggles the display of pure virtual members. + +@cindex remove filters +@item F r +This command removes all filters. +@end table + +These 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 a +Toggle the display of member attributes (default is on). + +The nine member attributes Ebrowse knows about are displayed +as a list a single-characters flags enclosed in angle brackets in front +the of the member's name. A @samp{-} at a given position means that +the attribute is false. The list of attributes from left to right is + +@table @samp +@cindex @code{template} attribute +@item T +The member is a template. + +@cindex @code{extern "C"} attribute +@item C +The member is declared @code{extern "C"}. + +@cindex @code{virtual} attribute +@item v +Means the member is declared @code{virtual}. + +@cindex @code{inline} +@item i +The member is declared @code{inline}. + +@cindex @code{const} attribute +@item c +The member is @code{const}. + +@cindex pure virtual function attribute +@item 0 +The member is a pure virtual function. + +@cindex @code{mutable} attribute +@item m +The member is declared @code{mutable}. + +@cindex @code{explicit} attribute +@item e +The member is declared @code{explicit}. + +@item t +The member is a function with a throw list. +@end table +@end table + +This 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 l +This command toggles the member buffer between short and long display +form. The short display form displays member names, only: + +@example +| isEmpty contains hasMember create +| storeSize hash isEqual restoreGuts +| saveGuts +@end example + +The long display shows one member per line with member name and regular +expressions matching the member (if known): + +@example +| isEmpty Bool isEmpty () const... +| hash unsigned hash () const... +| isEqual int isEqual (... +@end example + +Regular expressions will only be displayed when the Lisp database has +not 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 r +This command toggles the long display form from displaying the regular +expressions matching the member declarations to those expressions +matching member definitions. +@end table + +Regular expressions will only be displayed when the Lisp database has +not 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 c +This command lets you switch the member buffer to another class. It +reads the name of the new class from the minibuffer with completion. + +@item C b +This is the same command as @kbd{C c} but restricts the classes shown in +the completion list to immediate base classes, only. If only one base +class exists, this one is immediately shown in the minibuffer. + +@item C d +Same as @kbd{C b}, but for derived classes. + +@item C p +Switch to the previous class in the class hierarchy on the same level as +the class currently displayed. + +@item C n +Switch 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 q +This 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 w +This 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-l +This command forces a redisplay of the member buffer. If the width +of the window displaying the member buffer is changed this command +redraws the member list with the appropriate column widths and number of +columns. +@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, GNU Free Documentation License, Member Buffers, Top +@comment node-name, next, previous, up +@chapter Tags-like Functions + +Ebrowse provides tags functions similar to those of the standard +Emacs 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++ source + +The functions in this section are similar to those described in +@ref{Source Display}, and also in @ref{Finding/Viewing}, except that +they work in a C++ source buffer, not in member and tree buffers created +by Ebrowse. + +@table @kbd +@item C-c C-m f +Find the definition of the member around point. If you invoke this +function with a prefix argument, the declaration is searched. + +If more than one class contains a member with the given name you can +select the class with completion. If there is a scope declaration in +front of the member name, this class name is used as initial input for +the completion. + +@item C-c C-m F +Find the declaration of the member around point. + +@item C-c C-m v +View the definition of the member around point. + +@item C-c C-m V +View the declaration of the member around point. + +@item C-c C-m 4 f +Find a member's definition in another window. + +@item C-c C-m 4 F +Find a member's declaration in another window. + +@item C-c C-m 4 v +View a member's definition in another window. + +@item C-c C-m 4 V +View a member's declaration in another window. + +@item C-c C-m 5 f +Find a member's definition in another frame. + +@item C-c C-m 5 F +Find a member's declaration in another frame. + +@item C-c C-m 5 v +View a member's definition in another frame. + +@item C-c C-m 5 V +View 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 stack + +When jumping to a member declaration or definition with one of +Ebrowse's commands, the position from where you performed the +jump and the position where you jumped to are recorded in a +@dfn{position stack}. There are several ways in which you can quickly +move to positions in the stack:@refill + +@table @kbd +@cindex return to original position +@item C-c C-m - +This command sets point to the previous position in the position stack. +Directly after you performed a jump, this will put you back to the +position where you came from. + +The stack is not popped, i.e.@: you can always switch back and forth +between positions in the stack. To avoid letting the stack grow to +infinite size there is a maximum number of positions defined. When this +number is reached, older positions are discarded when new positions are +pushed on the stack. + +@item C-c C-m + +This command moves forward in the position stack, setting point to +the next position stored in the position stack. + +@item C-c C-m p +Displays an electric buffer showing all positions saved in the stack. +You can select a position by pressing @kbd{SPC} in a line. You can +view 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-operation + +Ebrowse allows you to perform operations on all or a subset of the files +mentioned in a class tree. When you invoke one of the following +functions and more than one class tree is loaded, you must choose a +class tree to use from an electric tree menu. If the selected tree +contains marked classes, the following commands operate on the files +mentioned in the marked classes only. Otherwise all files in the class +tree are used. + +@table @kbd +@item C-c C-m s +This function performs a regular expression search in the chosen set of +files. + +@item C-c C-m u +This command performs a search for calls of a given member which is +selected in the usual way with completion. + +@item C-c C-m % +Perform a query replace over the set of files. + +@item C-c C-m , +All three operations above stop when finding a match. You can restart +the operation with this command. + +@item C-c C-m n +This 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, members + +The command @kbd{C-c C-m l}, lists all members in a given file. The file +name 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 regexp + +The command @kbd{C-c C-m a} can be used to display all members matching a +given regular expression. This command can be very useful if you +remember only part of a member name, and not its beginning. + +A special buffer is popped up containing all identifiers matching the +regular expression, and what kind of symbol it is (e.g.@: a member +function, or a type). You can then switch to this buffer, and use the +command @kbd{C-c C-m 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 completion + +The command @kbd{C-c C-m @key{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 point + +You can quickly display a member buffer containing the member the cursor +in on with the command @kbd{C-c C-m m}. + + +@node GNU Free Documentation License, Concept Index, Tags-like Functions, Top +@appendix GNU Free Documentation License +@include doclicense.texi + + +@node Concept Index, , GNU Free Documentation License, Top +@unnumbered Concept Index +@printindex cp + +@contents +@bye + +@ignore + arch-tag: 52fe78ac-a1c4-48e7-815e-0a31acfad4bf +@end ignore