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