123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419 |
- \input texinfo @c -*-texinfo-*-
- @comment %**start of header
- @setfilename ../../info/ebrowse.info
- @settitle A Class Browser for C++
- @include docstyle.texi
- @setchapternewpage odd
- @syncodeindex fn cp
- @comment %**end of header
- @copying
- This file documents Ebrowse, a C++ class browser for GNU Emacs.
- Copyright @copyright{} 2000--2016 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.3 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''.
- (a) The FSF's Back-Cover Text is: ``You have the freedom to copy and
- modify this GNU manual.''
- @end quotation
- @end copying
- @dircategory Emacs misc features
- @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
- @contents
- @ifnottex
- @node Top
- @top Ebrowse
- You can browse C++ class hierarchies from within Emacs by using
- Ebrowse.
- @insertcopying
- @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
- @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).
- @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's 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
- @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.
- @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
- @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
- @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
- @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
- @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
- @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
- @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
- @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
- @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 @key{SPC}
- This command views the class declaration if the database
- contains information 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.
- @item @key{RET}
- Works like @kbd{SPC}, except that it finds the class
- declaration rather than viewing it, so that it is ready for
- editing.
- @end table
- The same functionality is available from the menu opened with
- @kbd{Mouse-3} on the class name.
- @node Member Display
- @section Displaying Members
- @cindex @file{*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
- @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}.)
- 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
- @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
- @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
- @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}.)
- 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
- @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
- @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
- @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
- @section Statistics
- @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
- @section Marking Classes
- @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}.)
- @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
- @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
- @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
- @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 @key{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 @key{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
- @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
- @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
- @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
- @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
- @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
- @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
- @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
- @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
- @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
- @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
- @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
- @section Getting Help
- @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
- @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
- @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
- @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:
- @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
- @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
- @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
- @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
- @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
- @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
- @appendix GNU Free Documentation License
- @include doclicense.texi
- @node Concept Index
- @unnumbered Concept Index
- @printindex cp
- @bye
|