Source

emacs / man / ebrowse.texi

   1
   2
   3
   4
   5
   6
   7
   8
   9
  10
  11
  12
  13
  14
  15
  16
  17
  18
  19
  20
  21
  22
  23
  24
  25
  26
  27
  28
  29
  30
  31
  32
  33
  34
  35
  36
  37
  38
  39
  40
  41
  42
  43
  44
  45
  46
  47
  48
  49
  50
  51
  52
  53
  54
  55
  56
  57
  58
  59
  60
  61
  62
  63
  64
  65
  66
  67
  68
  69
  70
  71
  72
  73
  74
  75
  76
  77
  78
  79
  80
  81
  82
  83
  84
  85
  86
  87
  88
  89
  90
  91
  92
  93
  94
  95
  96
  97
  98
  99
 100
 101
 102
 103
 104
 105
 106
 107
 108
 109
 110
 111
 112
 113
 114
 115
 116
 117
 118
 119
 120
 121
 122
 123
 124
 125
 126
 127
 128
 129
 130
 131
 132
 133
 134
 135
 136
 137
 138
 139
 140
 141
 142
 143
 144
 145
 146
 147
 148
 149
 150
 151
 152
 153
 154
 155
 156
 157
 158
 159
 160
 161
 162
 163
 164
 165
 166
 167
 168
 169
 170
 171
 172
 173
 174
 175
 176
 177
 178
 179
 180
 181
 182
 183
 184
 185
 186
 187
 188
 189
 190
 191
 192
 193
 194
 195
 196
 197
 198
 199
 200
 201
 202
 203
 204
 205
 206
 207
 208
 209
 210
 211
 212
 213
 214
 215
 216
 217
 218
 219
 220
 221
 222
 223
 224
 225
 226
 227
 228
 229
 230
 231
 232
 233
 234
 235
 236
 237
 238
 239
 240
 241
 242
 243
 244
 245
 246
 247
 248
 249
 250
 251
 252
 253
 254
 255
 256
 257
 258
 259
 260
 261
 262
 263
 264
 265
 266
 267
 268
 269
 270
 271
 272
 273
 274
 275
 276
 277
 278
 279
 280
 281
 282
 283
 284
 285
 286
 287
 288
 289
 290
 291
 292
 293
 294
 295
 296
 297
 298
 299
 300
 301
 302
 303
 304
 305
 306
 307
 308
 309
 310
 311
 312
 313
 314
 315
 316
 317
 318
 319
 320
 321
 322
 323
 324
 325
 326
 327
 328
 329
 330
 331
 332
 333
 334
 335
 336
 337
 338
 339
 340
 341
 342
 343
 344
 345
 346
 347
 348
 349
 350
 351
 352
 353
 354
 355
 356
 357
 358
 359
 360
 361
 362
 363
 364
 365
 366
 367
 368
 369
 370
 371
 372
 373
 374
 375
 376
 377
 378
 379
 380
 381
 382
 383
 384
 385
 386
 387
 388
 389
 390
 391
 392
 393
 394
 395
 396
 397
 398
 399
 400
 401
 402
 403
 404
 405
 406
 407
 408
 409
 410
 411
 412
 413
 414
 415
 416
 417
 418
 419
 420
 421
 422
 423
 424
 425
 426
 427
 428
 429
 430
 431
 432
 433
 434
 435
 436
 437
 438
 439
 440
 441
 442
 443
 444
 445
 446
 447
 448
 449
 450
 451
 452
 453
 454
 455
 456
 457
 458
 459
 460
 461
 462
 463
 464
 465
 466
 467
 468
 469
 470
 471
 472
 473
 474
 475
 476
 477
 478
 479
 480
 481
 482
 483
 484
 485
 486
 487
 488
 489
 490
 491
 492
 493
 494
 495
 496
 497
 498
 499
 500
 501
 502
 503
 504
 505
 506
 507
 508
 509
 510
 511
 512
 513
 514
 515
 516
 517
 518
 519
 520
 521
 522
 523
 524
 525
 526
 527
 528
 529
 530
 531
 532
 533
 534
 535
 536
 537
 538
 539
 540
 541
 542
 543
 544
 545
 546
 547
 548
 549
 550
 551
 552
 553
 554
 555
 556
 557
 558
 559
 560
 561
 562
 563
 564
 565
 566
 567
 568
 569
 570
 571
 572
 573
 574
 575
 576
 577
 578
 579
 580
 581
 582
 583
 584
 585
 586
 587
 588
 589
 590
 591
 592
 593
 594
 595
 596
 597
 598
 599
 600
 601
 602
 603
 604
 605
 606
 607
 608
 609
 610
 611
 612
 613
 614
 615
 616
 617
 618
 619
 620
 621
 622
 623
 624
 625
 626
 627
 628
 629
 630
 631
 632
 633
 634
 635
 636
 637
 638
 639
 640
 641
 642
 643
 644
 645
 646
 647
 648
 649
 650
 651
 652
 653
 654
 655
 656
 657
 658
 659
 660
 661
 662
 663
 664
 665
 666
 667
 668
 669
 670
 671
 672
 673
 674
 675
 676
 677
 678
 679
 680
 681
 682
 683
 684
 685
 686
 687
 688
 689
 690
 691
 692
 693
 694
 695
 696
 697
 698
 699
 700
 701
 702
 703
 704
 705
 706
 707
 708
 709
 710
 711
 712
 713
 714
 715
 716
 717
 718
 719
 720
 721
 722
 723
 724
 725
 726
 727
 728
 729
 730
 731
 732
 733
 734
 735
 736
 737
 738
 739
 740
 741
 742
 743
 744
 745
 746
 747
 748
 749
 750
 751
 752
 753
 754
 755
 756
 757
 758
 759
 760
 761
 762
 763
 764
 765
 766
 767
 768
 769
 770
 771
 772
 773
 774
 775
 776
 777
 778
 779
 780
 781
 782
 783
 784
 785
 786
 787
 788
 789
 790
 791
 792
 793
 794
 795
 796
 797
 798
 799
 800
 801
 802
 803
 804
 805
 806
 807
 808
 809
 810
 811
 812
 813
 814
 815
 816
 817
 818
 819
 820
 821
 822
 823
 824
 825
 826
 827
 828
 829
 830
 831
 832
 833
 834
 835
 836
 837
 838
 839
 840
 841
 842
 843
 844
 845
 846
 847
 848
 849
 850
 851
 852
 853
 854
 855
 856
 857
 858
 859
 860
 861
 862
 863
 864
 865
 866
 867
 868
 869
 870
 871
 872
 873
 874
 875
 876
 877
 878
 879
 880
 881
 882
 883
 884
 885
 886
 887
 888
 889
 890
 891
 892
 893
 894
 895
 896
 897
 898
 899
 900
 901
 902
 903
 904
 905
 906
 907
 908
 909
 910
 911
 912
 913
 914
 915
 916
 917
 918
 919
 920
 921
 922
 923
 924
 925
 926
 927
 928
 929
 930
 931
 932
 933
 934
 935
 936
 937
 938
 939
 940
 941
 942
 943
 944
 945
 946
 947
 948
 949
 950
 951
 952
 953
 954
 955
 956
 957
 958
 959
 960
 961
 962
 963
 964
 965
 966
 967
 968
 969
 970
 971
 972
 973
 974
 975
 976
 977
 978
 979
 980
 981
 982
 983
 984
 985
 986
 987
 988
 989
 990
 991
 992
 993
 994
 995
 996
 997
 998
 999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
\input texinfo   @c -*-texinfo-*-

@comment %**start of header
@setfilename ../info/ebrowse
@settitle A Class Browser for C++
@setchapternewpage odd
@syncodeindex fn cp
@comment %**end of header

@copying
This file documents Ebrowse, a C++ class browser for GNU Emacs.

Copyright @copyright{} 2000, 2002, 2003, 2004,
2005, 2006 Free Software Foundation, Inc.

@quotation
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.2 or
any later version published by the Free Software Foundation; with no
Invariant Sections, with the Front-Cover texts being ``A GNU
Manual,'' and with the Back-Cover Texts as in (a) below.  A copy of the
license is included in the section entitled ``GNU Free Documentation
License'' in the Emacs manual.

(a) The FSF's Back-Cover Text is: ``You have freedom to copy and modify
this GNU Manual, like GNU software.  Copies published by the Free
Software Foundation raise funds for GNU development.''

This document is part of a collection distributed under the GNU Free
Documentation License.  If you want to distribute this document
separately from the collection, you can do so by adding a copy of the
license to the document, as described in section 6 of the license.
@end quotation
@end copying

@dircategory Emacs
@direntry
* Ebrowse: (ebrowse).   A C++ class browser for Emacs.
@end direntry

@titlepage
@title Ebrowse User's Manual
@sp 4
@subtitle Ebrowse/Emacs
@sp 1
@subtitle May 2000
@sp 5
@author Gerd Moellmann
@page
@vskip 0pt plus 1filll
@insertcopying
@end titlepage

@node Top, Overview, (dir), (dir)

@ifnottex
You can browse C++ class hierarchies from within Emacs by using
Ebrowse.
@end ifnottex

@menu
* Overview::			What is it and how does it work?
* Generating browser files::	How to process C++ source files
* Loading a Tree::		How to start browsing
* Tree Buffers::		Traversing class hierarchies
* Member Buffers::		Looking at member information
* Tags-like Functions::		Finding members from source files
* Concept Index::		An entry for each concept defined
@end menu




@node Overview, Generating browser files, Top, Top
@chapter Introduction

When working in software projects using C++, I frequently missed
software support for two things:

@itemize @bullet
@item
When you get a new class library, or you have to work on source code you
haven't written yourself (or written sufficiently long ago), you need a
tool to let you navigate class hierarchies and investigate
features of the software.  Without such a tool you often end up
@command{grep}ing through dozens or even hundreds of files.

@item
Once you are productive, it would be nice to have a tool that knows your
sources and can help you while you are editing source code.  Imagine to
be able to jump to the definition of an identifier while you are
editing, or something that can complete long identifier names because it
knows what identifiers are defined in your program@dots{}.
@end itemize

The design of Ebrowse reflects these two needs.

How does it work?

@cindex parser for C++ sources
A fast parser written in C is used to process C++ source files.
The parser generates a data base containing information about classes,
members, global functions, defines, types etc.@: found in the sources.

The second part of Ebrowse is a Lisp program.  This program reads
the data base generated by the parser.  It displays its contents in
various forms and allows you to perform operations on it, or do
something with the help of the knowledge contained in the data base.

@cindex major modes, of Ebrowse buffers
@dfn{Navigational} use of Ebrowse is centered around two
types of buffers which define their own major modes:

@cindex tree buffer
@dfn{Tree buffers} are used to view class hierarchies in tree form.
They allow you to quickly find classes, find or view class declarations,
perform operations like query replace on sets of your source files, and
finally tree buffers are used to produce the second buffer form---member
buffers.  @xref{Tree Buffers}.

@cindex member buffer
Members are displayed in @dfn{member buffers}.  Ebrowse
distinguishes between six different types of members; each type is
displayed as a member list of its own:

@itemize @bullet
@item
Instance member variables;

@item
Instance member functions;

@item
Static member variables;

@item
Static member functions;

@item
Friends/Defines.  The list of defines is contained in the friends
list of the pseudo-class @samp{*Globals*};

@item
Types (@code{enum}s, and @code{typedef}s defined with class
scope).@refill
@end itemize

You can switch member buffers from one list to another, or to another
class.  You can include inherited members in the display, you can set
filters that remove categories of members from the display, and most
importantly you can find or view member declarations and definitions
with a keystroke.  @xref{Member Buffers}.

These two buffer types and the commands they provide support the
navigational use of the browser.  The second form resembles Emacs' Tags
package for C and other procedural languages.  Ebrowse's commands of
this type are not confined to special buffers; they are most often used
while you are editing your source code.

To list just a subset of what you can use the Tags part of Ebrowse for:

@itemize @bullet
@item
Jump to the definition or declaration of an identifier in your source
code, with an electric position stack that lets you easily navigate
back and forth.

@item
Complete identifiers in your source with a completion list containing
identifiers from your source code only.

@item
Perform search and query replace operations over some or all of your
source files.

@item
Show all identifiers matching a regular expression---and jump to one of
them, if you like.
@end itemize




@node Generating browser files, Loading a Tree, Overview, Top
@comment node-name,  next,  previous,  up
@chapter Processing Source Files

@cindex @command{ebrowse}, the program
@cindex class data base creation
Before you can start browsing a class hierarchy, you must run the parser
@command{ebrowse} on your source files in order to generate a Lisp data
base describing your program.

@cindex command line for @command{ebrowse}
The operation of @command{ebrowse} can be tailored with command line
options.  Under normal circumstances it suffices to let the parser use
its default settings.  If you want to do that, call it with a command
line like:

@example
ebrowse *.h *.cc
@end example

@noindent
or, if your shell doesn't allow all the file names to be specified on
the command line,

@example
ebrowse --files=@var{file}
@end example

@noindent
where @var{file} contains the names of the files to be parsed, one
per line.

@findex --help
When invoked with option @samp{--help}, @command{ebrowse} prints a list of
available command line options.@refill

@menu
* Input files::		Specifying which files to parse
* Output file::		Changing the output file name
* Structs and unions::	Omitting @code{struct}s and @code{union}s
* Matching::		Setting regular expression lengths
* Verbosity::           Getting feedback for lengthy operations
@end menu




@comment name,     next,        prev,                     up
@node Input files, Output file, Generating browser files, Generating browser files
@section Specifying Input Files

@table @samp
@cindex input files, for @command{ebrowse}
@item file
Each file name on the command line tells @command{ebrowse} to parse
that file.

@cindex response files
@findex --files
@item --files=@var{file}
This command line switch specifies that @var{file} contains a list of
file names to parse.  Each line in @var{file} must contain one file
name.  More than one option of this kind is allowed.  You might, for
instance, want to use one file for header files, and another for source
files.

@cindex standard input, specifying input files
@item standard input
When @command{ebrowse} finds no file names on the command line, and no
@samp{--file} option is specified, it reads file names from standard
input.  This is sometimes convenient when @command{ebrowse} is used as part
of a command pipe.

@findex --search-path
@item --search-path=@var{paths}
This option lets you specify search paths for your input files.
@var{paths} is a list of directory names, separated from each other by a
either a colon or a semicolon, depending on the operating system.
@end table

@cindex header files
@cindex friend functions
It is generally a good idea to specify input files so that header files
are parsed before source files.  This facilitates the parser's work of
properly identifying friend functions of a class.



@comment name,     next,               prev,        up
@node Output file, Structs and unions, Input files, Generating browser files
@section Changing the Output File Name

@table @samp
@cindex output file name
@findex --output-file
@cindex @file{BROWSE} file
@item --output-file=@var{file}
This option instructs @command{ebrowse} to generate a Lisp data base with
name @var{file}.  By default, the data base is named @file{BROWSE}, and
is written in the directory in which @command{ebrowse} is invoked.

If you regularly use data base names different from the default, you
might want to add this to your init file:

@lisp
(add-to-list 'auto-mode-alist '(@var{NAME} . ebrowse-tree-mode))
@end lisp

@noindent
where @var{NAME} is the Lisp data base name you are using.

@findex --append
@cindex appending output to class data base
@item --append
By default, each run of @command{ebrowse} erases the old contents of the
output file when writing to it.  You can instruct @command{ebrowse} to
append its output to an existing file produced by @command{ebrowse}
with this command line option.
@end table




@comment name,            next,     prev,        up
@node Structs and unions, Matching, Output file, Generating browser files
@section Structs and Unions
@cindex structs
@cindex unions

@table @samp
@findex --no-structs-or-unions
@item --no-structs-or-unions
This switch suppresses all classes in the data base declared as
@code{struct} or @code{union} in the output.

This is mainly useful when you are converting an existing
C program to C++, and do not want to see the old C structs in a class
tree.
@end table




@comment name,  next,      prev,               up
@node Matching, Verbosity, Structs and unions, Generating browser files
@section Regular Expressions

@cindex regular expressions, recording
The parser @command{ebrowse} normally writes regular expressions to its
output file that help the Lisp part of Ebrowse to find functions,
variables etc.@: in their source files.

You can instruct @command{ebrowse} to omit these regular expressions by
calling it with the command line switch @samp{--no-regexps}.

When you do this, the Lisp part of Ebrowse tries to guess, from member
or class names, suitable regular expressions to locate that class or
member in source files.  This works fine in most cases, but the
automatic generation of regular expressions can be too weak if unusual
coding styles are used.

@table @samp
@findex --no-regexps
@item --no-regexps
This option turns off regular expression recording.

@findex --min-regexp-length
@cindex minimum regexp length for recording
@item --min-regexp-length=@var{n}
The number @var{n} following this option specifies the minimum length of
the regular expressions recorded to match class and member declarations
and definitions.  The default value is set at compilation time of
@command{ebrowse}.

The smaller the minimum length, the higher the probability that
Ebrowse will find a wrong match.  The larger the value, the
larger the output file and therefore the memory consumption once the
file is read from Emacs.

@findex --max-regexp-length
@cindex maximum regexp length for recording
@item --max-regexp-length=@var{n}
The number following this option specifies the maximum length of the
regular expressions used to match class and member declarations and
definitions.  The default value is set at compilation time of
@command{ebrowse}.

The larger the maximum length, the higher the probability that the
browser will find a correct match, but the larger the value the larger
the output file and therefore the memory consumption once the data is
read.  As a second effect, the larger the regular expression, the higher
the probability that it will no longer match after editing the file.
@end table




@node Verbosity, , Matching, Generating browser files
@comment  node-name,  next,  previous,  up
@section Verbose Mode
@cindex verbose operation

@table @samp
@findex --verbose
@item --verbose
When this option is specified on the command line, @command{ebrowse} prints
a period for each file parsed, and it displays a @samp{+} for each
class written to the output file.

@findex --very-verbose
@item --very-verbose
This option makes @command{ebrowse} print out the names of the files and
the names of the classes seen.
@end table




@node Loading a Tree, Tree Buffers, Generating browser files, Top
@comment  node-name,  next,  previous,  up
@chapter Starting to Browse
@cindex loading
@cindex browsing

You start browsing a class hierarchy parsed by @command{ebrowse} by just
finding the @file{BROWSE} file with @kbd{C-x C-f}.

An example of a tree buffer display is shown below.

@example
|  Collection
|    IndexedCollection
|      Array
|        FixedArray
|    Set
|    Dictionary
@end example

@cindex mouse highlight in tree buffers
When you run Emacs on a display which supports colors and the mouse, you
will notice that certain areas in the tree buffer are highlighted
when you move the mouse over them.  This highlight marks mouse-sensitive
regions in the buffer.  Please notice the help strings in the echo area
when the mouse moves over a sensitive region.

@cindex context menu
A click with @kbd{Mouse-3} on a mouse-sensitive region opens a context
menu.  In addition to this, each buffer also has a buffer-specific menu
that is opened with a click with @kbd{Mouse-3} somewhere in the buffer
where no highlight is displayed.



@comment ****************************************************************
@comment ***
@comment ***                 TREE BUFFERS
@comment ***
@comment ****************************************************************

@node Tree Buffers, Member Buffers, Loading a Tree, Top
@comment  node-name,  next,  previous,  up
@chapter Tree Buffers
@cindex tree buffer mode
@cindex class trees

Class trees are displayed in @dfn{tree buffers} which install their own
major mode.  Most Emacs keys work in tree buffers in the usual way,
e.g.@: you can move around in the buffer with the usual @kbd{C-f},
@kbd{C-v} etc., or you can search with @kbd{C-s}.

Tree-specific commands are bound to simple keystrokes, similar to
@code{Gnus}.  You can take a look at the key bindings by entering
@kbd{?} which calls @code{M-x describe-mode} in both tree and member
buffers.

@menu
* Source Display::		Viewing and finding a class declaration
* Member Display::		Showing members, switching to member buffers
* Go to Class::			Finding a class
* Quitting::			Discarding and burying the tree buffer
* File Name Display::		Showing file names in the tree
* Expanding and Collapsing::	Expanding and collapsing branches
* Tree Indentation::		Changing the tree indentation
* Killing Classes::		Removing class from the tree
* Saving a Tree::		Saving a modified tree
* Statistics::			Displaying class tree statistics
* Marking Classes::		Marking and unmarking classes
@end menu



@node Source Display, Member Display, Tree Buffers, Tree Buffers
@comment  node-name,  next,  previous,  up
@section Viewing and Finding Class Declarations
@cindex viewing, class
@cindex finding a class
@cindex class declaration

You can view or find a class declaration when the cursor is on a class
name.

@table @kbd
@item SPC
This command views the class declaration if the database
contains informations about it.  If you don't parse the entire source
you are working on, some classes will only be known to exist but the
location of their declarations and definitions will not be known.@refill

@item RET
Works like @kbd{SPC}, except that it finds the class
declaration rather than viewing it, so that it is ready for
editing.@refill
@end table

The same functionality is available from the menu opened with
@kbd{Mouse-3} on the class name.




@node Member Display, Go to Class, Source Display, Tree Buffers
@comment  node-name,  next,  previous,  up
@section Displaying Members
@cindex @samp{*Members*} buffer
@cindex @samp{*Globals*}
@cindex freezing a member buffer
@cindex member lists, in tree buffers

Ebrowse distinguishes six different kinds of members, each of
which is displayed as a separate @dfn{member list}: instance variables,
instance functions, static variables, static functions, friend
functions, and types.

Each of these lists can be displayed in a member buffer with a command
starting with @kbd{L} when the cursor is on a class name.  By default,
there is only one member buffer named @dfn{*Members*} that is reused
each time you display a member list---this has proven to be more
practical than to clutter up the buffer list with dozens of member
buffers.

If you want to display more than one member list at a time you can
@dfn{freeze} its member buffer. Freezing a member buffer prevents it
from being overwritten the next time you display a member list. You can
toggle this buffer status at any time.

Every member list display command in the tree buffer can be used with a
prefix argument (@kbd{C-u}).  Without a prefix argument, the command will
pop to a member buffer displaying the member list.  With prefix argument,
the member buffer will additionally be @dfn{frozen}.

@table @kbd
@cindex instance member variables, list
@item L v
This command displays the list of instance member variables.

@cindex static variables, list
@item L V
Display the list of static variables.

@cindex friend functions, list
@item L d
Display the list of friend functions.  This list is used for defines if
you are viewing the class @samp{*Globals*} which is a place holder for
global symbols.

@cindex member functions, list
@item L f
Display the list of member functions.

@cindex static member functions, list
@item L F
Display the list of static member functions.

@cindex types, list
@item L t
Display a list of types.
@end table

These lists are also available from the class' context menu invoked with
@kbd{Mouse-3} on the class name.




@node Go to Class, Quitting, Member Display, Tree Buffers
@comment  node-name,  next,  previous,  up
@section Finding a Class
@cindex locate class
@cindex expanding branches
@cindex class location

@table @kbd
@cindex search for class
@item /
This command reads a class name from the minibuffer with completion and
positions the cursor on the class in the class tree.

If the branch of the class tree containing the class searched for is
currently collapsed, the class itself and all its base classes are
recursively made visible.  (See also @ref{Expanding and
Collapsing}.)@refill

This function is also available from the tree buffer's context menu.

@item n
Repeat the last search done with @kbd{/}.  Each tree buffer has its own
local copy of the regular expression last searched in it.
@end table




@node Quitting, File Name Display, Go to Class, Tree Buffers
@comment  node-name,  next,  previous,  up
@section Burying a Tree Buffer
@cindex burying tree buffer

@table @kbd
@item q
Is a synonym for @kbd{M-x bury-buffer}.
@end table




@node File Name Display, Expanding and Collapsing, Quitting, Tree Buffers
@comment  node-name,  next,  previous,  up
@section Displaying File Names

@table @kbd
@cindex file names in tree buffers
@item T f
This command toggles the display of file names in a tree buffer.  If
file name display is switched on, the names of the files containing the
class declaration are shown to the right of the class names.  If the
file is not known, the string @samp{unknown} is displayed.

This command is also provided in the tree buffer's context menu.

@item s
Display file names for the current line, or for the number of lines
given by a prefix argument.
@end table

Here is an example of a tree buffer with file names displayed.

@example
|  Collection		(unknown)
|    IndexedCollection	(indexedcltn.h)
|      Array		(array.h)
|        FixedArray	(fixedarray.h)
|    Set		(set.h)
|    Dictionary		(dict.h)
@end example




@node Expanding and Collapsing, Tree Indentation, File Name Display, Tree Buffers
@comment  node-name,  next,  previous,  up
@section Expanding and Collapsing a Tree
@cindex expand tree branch
@cindex collapse tree branch
@cindex branches of class tree
@cindex class tree, collapse or expand

You can expand and collapse parts of a tree to reduce the complexity of
large class hierarchies.  Expanding or collapsing branches of a tree has
no impact on the functionality of other commands, like @kbd{/}.  (See
also @ref{Go to Class}.)@refill

Collapsed branches are indicated with an ellipsis following the class
name like in the example below.

@example
|  Collection
|    IndexedCollection...
|    Set
|    Dictionary
@end example

@table @kbd
@item -
This command collapses the branch of the tree starting at the class the
cursor is on.

@item +
This command expands the branch of the tree starting at the class the
cursor is on.  Both commands for collapsing and expanding branches are
also available from the class' object menu.

@item *
This command expands all collapsed branches in the tree.
@end table




@node Tree Indentation, Killing Classes, Expanding and Collapsing, Tree Buffers
@comment  node-name,  next,  previous,  up
@section Changing the Tree Indentation
@cindex tree indentation
@cindex indentation of the tree

@table @kbd
@item T w
This command reads a new indentation width from the minibuffer and
redisplays the tree buffer with the new indentation  It is also
available from the tree buffer's context menu.
@end table




@node Killing Classes, Saving a Tree, Tree Indentation, Tree Buffers
@comment  node-name,  next,  previous,  up
@section Removing Classes from the Tree
@cindex killing classes
@cindex class, remove from tree

@table @kbd
@item C-k
This command removes the class the cursor is on and all its derived
classes from the tree.  The user is asked for confirmation before the
deletion is actually performed.
@end table




@node Saving a Tree, Statistics, Killing Classes, Tree Buffers
@comment  node-name,  next,  previous,  up
@comment node-name, next, previous, up
@section Saving a Tree
@cindex save tree to a file
@cindex tree, save to a file
@cindex class tree, save to a file

@table @kbd
@item C-x C-s
This command writes a class tree to the file from which it was read.
This is useful after classes have been deleted from a tree.

@item  C-x C-w
Writes the tree to a file whose name is read from the minibuffer.
@end table




@node     Statistics, Marking Classes, Saving a Tree, Tree Buffers
@comment  node-name,  next,        previous, up
@cindex statistics for a tree
@cindex tree statistics
@cindex class statistics

@table @kbd
@item x
Display statistics for the tree, like number of classes in it, number of
member functions, etc.  This command can also be found in the buffer's
context menu.
@end table




@node     Marking Classes, , Statistics, Tree Buffers
@comment  node-name,       next,       previous,      up
@cindex marking classes
@cindex operations on marked classes

Classes can be marked for operations similar to the standard Emacs
commands @kbd{M-x tags-search} and @kbd{M-x tags-query-replace} (see
also @xref{Tags-like Functions}.)@refill

@table @kbd
@cindex toggle mark
@item M t
Toggle the mark of the line point is in or for as many lines as given by
a prefix command.  This command can also be found in the class' context
menu.

@cindex unmark all
@item M a
Unmark all classes.  With prefix argument @kbd{C-u}, mark all classes in
the tree. Since this command operates on the whole buffer, it can also be
found in the buffer's object menu.
@end table

Marked classes are displayed with an @code{>} in column one of the tree
display, like in the following example

@example
|> Collection
|    IndexedCollection...
|>   Set
|    Dictionary
@end example




@c ****************************************************************
@c ***
@c ***                 MEMBER BUFFERS
@c ***
@c ****************************************************************

@node Member Buffers, Tags-like Functions, Tree Buffers, Top
@comment  node-name,       next,       previous,      up
@chapter Member Buffers
@cindex members
@cindex member buffer mode

@cindex class members, types
@cindex types of class members
@dfn{Member buffers} are used to operate on lists of members of a class.
Ebrowse distinguishes six kinds of lists:

@itemize @bullet
@item
Instance variables (normal member variables);
@item
Instance functions (normal member functions);
@item
Static variables;
@item
Static member functions;
@item
Friend functions;
@item
Types (@code{enum}s and @code{typedef}s defined with class scope.
Nested classes will be shown in the class tree like normal classes.
@end itemize

Like tree buffers, member buffers install their own major mode.  Also
like in tree buffers, menus are provided for certain areas in the
buffer: members, classes, and the buffer itself.

@menu
* Switching Member Lists::	Choosing which members to display
* Finding/Viewing::		Modifying source code
* Inherited Members::		Display of Inherited Members
* Searching Members::		Finding members in member buffer
* Switching to Tree::		Going back to the tree buffer
* Filters::			Selective member display
* Attributes::			Display of @code{virtual} etc.
* Long and Short Display::	Comprehensive and verbose display
* Regexp Display::		Showing matching regular expressions
* Switching Classes::		Displaying another class
* Killing/Burying::		Getting rid of the member buffer
* Column Width::		Display style
* Redisplay::			Redrawing the member list
* Getting Help::		How to get help for key bindings
@end menu




@node Switching Member Lists, Finding/Viewing, Member Buffers, Member Buffers
@comment  node-name,       next,       previous,      up
@section Switching Member Lists
@cindex member lists, in member buffers
@cindex static members
@cindex friends
@cindex types
@cindex defines

@table @kbd
@cindex next member list
@item L n
This command switches the member buffer display to the next member list.

@cindex previous member list
@item L p
This command switches the member buffer display to the previous member
list.

@item L f
Switch to the list of member functions.

@cindex static
@item L F
Switch to the list of static member functions.

@item L v
Switch to the list of member variables.

@item L V
Switch to the list of static member variables.

@item L d
Switch to the list of friends or defines.

@item L t
Switch to the list of types.
@end table

Both commands cycle through the member list.

Most of the commands are also available from the member buffer's
context menu.




@node Finding/Viewing, Inherited Members, Switching Member Lists, Member Buffers
@comment  node-name,       next,       previous,      up
@section Finding and Viewing Member Source
@cindex finding members, in member buffers
@cindex viewing members, in member buffers
@cindex member definitions, in member buffers
@cindex member declarations, in member buffers
@cindex definition of a member, in member buffers
@cindex declaration of a member, in member buffers

@table @kbd
@item RET
This command finds the definition of the member the cursor is on.
Finding involves roughly the same as the standard Emacs tags facility
does---loading the file and searching for a regular expression matching
the member.

@item f
This command finds the declaration of the member the cursor is on.

@item SPC
This is the same command as @kbd{RET}, but views the member definition
instead of finding the member's source file.

@item v
This is the same command as @kbd{f}, but views the member's declaration
instead of finding the file the declaration is in.
@end table

You can install a hook function to perform actions after a member or
class declaration or definition has been found, or when it is not found.

All the commands described above can also be found in the context menu
displayed when clicking @kbd{Mouse-2} on a member name.




@node Inherited Members, Searching Members, Finding/Viewing, Member Buffers
@comment  node-name,       next,       previous,      up
@section Display of Inherited Members
@cindex superclasses, members
@cindex base classes, members
@cindex inherited members

@table @kbd
@item D b
This command toggles the display of inherited members in the member
buffer.  This is also in the buffer's context menu.
@end table




@node Searching Members, Switching to Tree, Inherited Members, Member Buffers
@comment  node-name,       next,       previous,      up
@section Searching Members
@cindex searching members

@table @kbd
@item G v
Position the cursor on a member whose name is read from the minibuffer;
only members shown in the current member buffer appear in the completion
list.

@item G m
Like the above command, but all members for the current class appear in
the completion list.  If necessary, the current member list is switched
to the one containing the member.

With a prefix argument (@kbd{C-u}), all members in the class tree,
i.e.@: all members the browser knows about appear in the completion
list.  The member display will be switched to the class and member list
containing the member.

@item G n
Repeat the last member search.
@end table

Look into the buffer's context menu for a convenient way to do this with
a mouse.



@node Switching to Tree, Filters, Searching Members, Member Buffers
@comment  node-name,       next,       previous,      up
@section Switching to Tree Buffer
@cindex tree buffer, switch to
@cindex buffer switching
@cindex switching buffers

@table @kbd
@item @key{TAB}
Pop up the tree buffer to which the member buffer belongs.

@item t
Do the same as @key{TAB} but also position the cursor on the class
displayed in the member buffer.
@end table




@node Filters, Attributes, Switching to Tree, Member Buffers
@comment  node-name,       next,       previous,      up
@section Filters
@cindex filters

@table @kbd
@cindex @code{public} members
@item F a u
This command toggles the display of @code{public} members.  The
@samp{a} stands for `access'.

@cindex @code{protected} members
@item F a o
This command toggles the display of @code{protected} members.

@cindex @code{private} members
@item F a i
This command toggles the display of @code{private} members.

@cindex @code{virtual} members
@item F v
This command toggles the display of @code{virtual} members.

@cindex @code{inline} members
@item F i
This command toggles the display of @code{inline} members.

@cindex @code{const} members
@item F c
This command toggles the display of @code{const} members.

@cindex pure virtual members
@item F p
This command toggles the display of pure virtual members.

@cindex remove filters
@item F r
This command removes all filters.
@end table

These commands are also found in the buffer's context menu.




@node Attributes, Long and Short Display, Filters, Member Buffers
@comment  node-name,       next,       previous,      up
@section Displaying Member Attributes
@cindex attributes
@cindex member attribute display

@table @kbd
@item D a
Toggle the display of member attributes (default is on).

The nine member attributes Ebrowse knows about are displayed
as a list a single-characters flags enclosed in angle brackets in front
the of the member's name.  A @samp{-} at a given position means that
the attribute is false.  The list of attributes from left to right is

@table @samp
@cindex @code{template} attribute
@item T
The member is a template.

@cindex @code{extern "C"} attribute
@item C
The member is declared @code{extern "C"}.

@cindex @code{virtual} attribute
@item v
Means the member is declared @code{virtual}.

@cindex @code{inline}
@item i
The member is declared @code{inline}.

@cindex @code{const} attribute
@item c
The member is @code{const}.

@cindex pure virtual function attribute
@item 0
The member is a pure virtual function.

@cindex @code{mutable} attribute
@item m
The member is declared @code{mutable}.

@cindex @code{explicit} attribute
@item e
The member is declared @code{explicit}.

@item t
The member is a function with a throw list.
@end table
@end table

This command is also in the buffer's context menu.



@node Long and Short Display, Regexp Display, Attributes, Member Buffers
@comment  node-name,       next,       previous,      up
@section Long and Short Member Display
@cindex display form
@cindex long display
@cindex short display

@table @kbd
@item D l
This command toggles the member buffer between short and long display
form.  The short display form displays member names, only:

@example
| isEmpty        contains       hasMember      create
| storeSize      hash           isEqual        restoreGuts
| saveGuts
@end example

The long display shows one member per line with member name and regular
expressions matching the member (if known):

@example
| isEmpty               Bool isEmpty () const...
| hash                  unsigned hash () const...
| isEqual               int isEqual (...
@end example

Regular expressions will only be displayed when the Lisp database has
not been produced with the @command{ebrowse} option @samp{--no-regexps}.
@xref{Matching, --no-regexps, Regular Expressions}.
@end table




@node Regexp Display, Switching Classes, Long and Short Display, Member Buffers
@comment  node-name,       next,       previous,      up
@section Display of Regular Expressions
@cindex regular expression display

@table @kbd
@item D r
This command toggles the long display form from displaying the regular
expressions matching the member declarations to those expressions
matching member definitions.
@end table

Regular expressions will only be displayed when the Lisp database has
not been produced with the @command{ebrowse} option @samp{--no-regexps},
see @ref{Matching, --no-regexps, Regular Expressions}.




@node Switching Classes, Killing/Burying, Regexp Display, Member Buffers
@comment  node-name,       next,       previous,      up
@section Displaying Another Class
@cindex base class, display
@cindex derived class, display
@cindex superclass, display
@cindex subclass, display
@cindex class display

@table @kbd
@item C c
This command lets you switch the member buffer to another class.  It
reads the name of the new class from the minibuffer with completion.

@item C b
This is the same command as @kbd{C c} but restricts the classes shown in
the completion list to immediate base classes, only.  If only one base
class exists, this one is immediately shown in the minibuffer.

@item C d
Same as @kbd{C b}, but for derived classes.

@item C p
Switch to the previous class in the class hierarchy on the same level as
the class currently displayed.

@item C n
Switch to the next sibling of the class in the class tree.
@end table




@node Killing/Burying, Column Width, Switching Classes, Member Buffers
@comment  node-name,       next,       previous,      up
@section Burying a Member Buffer
@cindex burying member buffers

@table @kbd
@item q
This command is a synonym for @kbd{M-x bury-buffer}.
@end table




@node Column Width, Redisplay, Killing/Burying, Member Buffers
@comment  node-name,       next,       previous,      up
@section Setting the Column Width
@cindex column width
@cindex member indentation
@cindex indentation, member

@table @kbd
@item D w
This command sets the column width depending on the display form used
(long or short display).
@end table




@node Redisplay, Getting Help, Column Width, Member Buffers
@comment  node-name,       next,       previous,      up
@section Forced Redisplay
@cindex redisplay of member buffers

@table @kbd
@item C-l
This command forces a redisplay of the member buffer.  If the width
of the window displaying the member buffer is changed this command
redraws the member list with the appropriate column widths and number of
columns.
@end table




@node Getting Help, , Redisplay, Member Buffers
@comment  node-name,  next,  previous,  up
@cindex help

@table @kbd
@item ?
This key is bound to @code{describe-mode}.
@end table




@comment **************************************************************
@comment ***		    TAGS LIKE FUNCTIONS
@comment **************************************************************

@node Tags-like Functions, Concept Index, Member Buffers, Top
@comment  node-name,       next,       previous,      up
@chapter Tags-like Functions

Ebrowse provides tags functions similar to those of the standard
Emacs Tags facility, but better suited to the needs of C++ programmers.

@menu
* Finding and Viewing::	Going to a member declaration/definition
* Position Stack::	Moving to previous locations
* Search & Replace::    Searching and replacing over class tree files
* Members in Files::    Listing all members in a given file
* Apropos::             Listing members matching a regular expression
* Symbol Completion::   Completing names while editing
* Member Buffer Display:: Quickly display a member buffer for some
                        identifier
@end menu



@node Finding and Viewing, Position Stack, Tags-like Functions, Tags-like Functions
@comment  node-name,       next,       previous,      up
@section Finding and Viewing Members
@cindex finding class member, in C++ source
@cindex viewing class member, in C++ source
@cindex tags
@cindex member definition, finding, in C++ source
@cindex member declaration, finding, in C++ source

The functions in this section are similar to those described in
@ref{Source Display}, and also in @ref{Finding/Viewing}, except that
they work in a C++ source buffer, not in member and tree buffers created
by Ebrowse.

@table @kbd
@item C-c b f
Find the definition of the member around point.  If you invoke this
function with a prefix argument, the declaration is searched.

If more than one class contains a member with the given name you can
select the class with completion.  If there is a scope declaration in
front of the member name, this class name is used as initial input for
the completion.

@item C-c b F
Find the declaration of the member around point.

@item C-c b v
View the definition of the member around point.

@item C-c b V
View the declaration of the member around point.

@item C-c b 4 f
Find a member's definition in another window.

@item C-c b 4 F
Find a member's declaration in another window.

@item C-c b 4 v
View a member's definition in another window.

@item C-c b 4 V
View a member's declaration in another window.

@item C-c b 5 f
Find a member's definition in another frame.

@item C-c b 5 F
Find a member's declaration in another frame.

@item C-c b 5 v
View a member's definition in another frame.

@item C-c b 5 V
View a member's declaration in another frame.
@end table



@node Position Stack, Search & Replace, Finding and Viewing, Tags-like Functions
@comment  node-name,       next,       previous,      up
@section The Position Stack
@cindex position stack

When jumping to a member declaration or definition with one of
Ebrowse's commands, the position from where you performed the
jump and the position where you jumped to are recorded in a
@dfn{position stack}.  There are several ways in which you can quickly
move to positions in the stack:@refill

@table @kbd
@cindex return to original position
@item C-c b -
This command sets point to the previous position in the position stack.
Directly after you performed a jump, this will put you back to the
position where you came from.

The stack is not popped, i.e.@: you can always switch back and forth
between positions in the stack.  To avoid letting the stack grow to
infinite size there is a maximum number of positions defined.  When this
number is reached, older positions are discarded when new positions are
pushed on the stack.

@item C-c b +
This command moves forward in the position stack, setting point to
the next position stored in the position stack.

@item C-c b p
Displays an electric buffer showing all positions saved in the stack.
You can select a position by pressing @kbd{SPC} in a line.  You can
view a position with @kbd{v}.
@end table




@node Search & Replace, Members in Files, Position Stack, Tags-like Functions
@comment  node-name,       next,       previous,      up
@section Searching and Replacing
@cindex searching multiple C++ files
@cindex replacing in multiple C++ files
@cindex restart tags-operation

Ebrowse allows you to perform operations on all or a subset of the files
mentioned in a class tree.  When you invoke one of the following
functions and more than one class tree is loaded, you must choose a
class tree to use from an electric tree menu.  If the selected tree
contains marked classes, the following commands operate on the files
mentioned in the marked classes only.  Otherwise all files in the class
tree are used.

@table @kbd
@item C-c b s
This function performs a regular expression search in the chosen set of
files.

@item C-c b u
This command performs a search for calls of a given member which is
selected in the usual way with completion.

@item C-c b %
Perform a query replace over the set of files.

@item C-c b ,
All three operations above stop when finding a match.  You can restart
the operation with this command.

@item C-c b n
This restarts the last tags operation with the next file in the list.
@end table




@node Members in Files, Apropos, Search & Replace, Tags-like Functions
@comment  node-name,       next,       previous,      up
@section Members in Files
@cindex files
@cindex members in file, listing
@cindex list class members in a file
@cindex file, members

The command @kbd{C-c b l}, lists all members in a given file.  The file
name is read from the minibuffer with completion.




@node Apropos, Symbol Completion, Members in Files, Tags-like Functions
@comment  node-name,       next,       previous,      up
@section Member Apropos
@cindex apropos on class members
@cindex members, matching regexp

The command @kbd{C-c b a} can be used to display all members matching a
given regular expression.  This command can be very useful if you
remember only part of a member name, and not its beginning.

A special buffer is popped up containing all identifiers matching the
regular expression, and what kind of symbol it is (e.g.@: a member
function, or a type).  You can then switch to this buffer, and use the
command @kbd{C-c b f}, for example, to jump to a specific member.




@node Symbol Completion, Member Buffer Display, Apropos, Tags-like Functions
@comment  node-name,       next,       previous,      up
@section Symbol Completion
@cindex completion
@cindex symbol completion

The command @kbd{C-c b @key{TAB}} completes the symbol in front of point.




@node Member Buffer Display,  , Symbol Completion, Tags-like Functions
@section Quick Member Display
@cindex member buffer, for member at point

You can quickly display a member buffer containing the member the cursor
in on with the command @kbd{C-c b m}.


@node Concept Index, , Tags-like Functions, Top
@unnumbered Concept Index
@printindex cp

@contents
@bye

@ignore
   arch-tag: 52fe78ac-a1c4-48e7-815e-0a31acfad4bf
@end ignore