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