comparison man/ebrowse.texi @ 28867:48daf6eb57cd

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