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