Next: Generating browser files, Previous: Top, Up: Top

## 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. See 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. See 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:

- 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.