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