ebrowse: Overview
1 Introduction
**************
When working in software projects using C++, I frequently missed
software support for two things:
• 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 ‘grep’ing through dozens or even hundreds of files.
• 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....
The design of Ebrowse reflects these two needs.
How does it work?
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.
“Navigational” use of Ebrowse is centered around two types of buffers
which define their own major modes:
“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. Tree Buffers.
Members are displayed in “member buffers”. Ebrowse distinguishes
between six different types of members; each type is displayed as a
member list of its own:
• Instance member variables;
• Instance member functions;
• Static member variables;
• Static member functions;
• Friends/Defines. The list of defines is contained in the friends
list of the pseudo-class ‘*Globals*’;
• Types (‘enum’s, and ‘typedef’s defined with class scope).
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. Member Buffers.
These two buffer types and the commands they provide support the
navigational use of the browser. The second form resembles Emacs’s 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:
• 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.
• Complete identifiers in your source with a completion list
containing identifiers from your source code only.
• Perform search and query replace operations over some or all of
your source files.
• Show all identifiers matching a regular expression—and jump to one
of them, if you like.