Mercurial > hg > xemacs-beta
diff man/oo-browser.texi @ 0:376386a54a3c r19-14
Import from CVS: tag r19-14
author | cvs |
---|---|
date | Mon, 13 Aug 2007 08:45:50 +0200 |
parents | |
children | 49a24b4fd526 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/man/oo-browser.texi Mon Aug 13 08:45:50 2007 +0200 @@ -0,0 +1,3038 @@ +\input psfig +\input texinfo @c -*-texinfo-*- + +@c +@c SUMMARY: The OO-Browser User Manual for V2 +@c USAGE: Hardcopy man from TeX; Info man from 'texinfo-format-buffer'. +@c +@c AUTHOR: Bob Weiner +@c ORG: Motorola Inc., PPG +@c ORIG-DATE: 10-Apr-90 +@c LAST-MOD: 2-May-96 at 23:36:02 by Harri Pasanen +@c +@c DESCRIPTION: +@c DESCRIP-END. + +@c %**start of header (This is for running Texinfo on a region.) +@setfilename ../info/oo-browser.info +@settitle The OO-Browser User Manual +@c %**end of header (This is for running Texinfo on a region.) +@synindex vr fn + +@iftex +@finalout +@end iftex + +@titlepage +@sp 4 +@center @titlefont{The OO-Browser User Manual} +@sp 1 +@center The Multi-language Object-Oriented Code Browser +@sp 5 +@center Bob Weiner +@center Motorola Inc. +@center E-mail: <oo-browser@@hub.ucsb.edu> (This is a mailing list.) +@sp 2 +@center Edition 2.9.12 +@sp 2 +@center May 1996 + +@page +@vskip 0pt plus 1filll +Copyright @copyright{} 1989-1995 Free Software Foundation, Inc. + +All trademarks referenced herein are trademarks of their respective +holders. +@setchapternewpage on +@end titlepage +@page + +@node Top, Introduction, (dir), (dir) +@c node-name, next, previous, up +@unnumbered Preface + +@ifinfo +@noindent +Copyright @copyright{} 1989-1996 Free Software Foundation, Inc. + +All trademarks referenced herein are trademarks of their respective holders. + +@end ifinfo +This edition of the OO-Browser User Manual is for use with any version +2.9.12 or greater of the OO-Browser. The OO-Browser is available for +free use, distribution, and modification under the terms of version 2 or +later of the GNU Public License (GPL). No representations are made +about the suitability of this software for any purpose. It is provided +"as is" without express or implied warranty. + +@cindex credits +@cindex InfoDock, obtaining +@cindex OO-Browser, obtaining +@cindex anonymous ftp +The OO-Browser was designed and written by Bob Weiner. Motorola, +Inc. funded and donated this work for free redistribution as part of the +InfoDock integrated productivity toolset. Torgeir Veimo and Mark Stern +helped write the X OO-Browser core. Don Yacktman helped write the +NEXTSTEP OO-Browser core. Jeff Sparkes helped with the Java language +support. Harri Pasanen implemented the Python language support, and +updated the documentation to reflect that addition. + +@vindex file, BR-README +@cindex README file +@cindex installation +The OO-Browser and InfoDock can be obtained via anonymous ftp on the +Internet from: @file{/anonymous@@ftp.xemacs.org:/pub/infodock}. +Installation instructions for the OO-Browser can be found in the +@file{BR-README} file in the OO-Browser distribution. + +This manual documents the user interface and operation of the OO-Browser +multi-language browser. It assumes a very basic familiarity in the use +of the GNU Emacs editor as documented in @cite{[Stallman 87]}. It also +assumes familiarity with object-oriented software concepts. However, +many technical terms used in this manual are given precise meaning in +the glossary. @xref{Glossary}. The OO-Browser is meant to be easy to +use, so you can point and click to use it, rather than learning all of +the key stroke commands.@refill + +Chapter 1 of the manual focuses on OO-Browser Environments to provide +the reader with a picture of how to organize work for use with the +OO-Browser (@pxref{Environments,,Working with Environments}). +@xref{Usage,,Using the OO-Browser}, if you would rather start with the +interactive features of the browser. @xref{Features,,OO-Browser +Features}, for a quick overview of the browser's features.@refill + +Throughout this manual, sequences of key strokes are delimited by braces, +@{@}, command names are delimited by parentheses, (), and variable names +are emphasized.@refill + +We hope that you enjoy using the OO-Browser and that it improves your +productivity. + +@menu +* Introduction:: Introduction +* Environments:: Working with Environments +* Usage:: Using the OO-Browser +* Options:: OO-Browser Options +* Customization:: Personal Customization +* Standalone:: Using Standalone OO-Browser Features +* Languages:: Language-Specific Notes +* Features:: OO-Browser Features +* Commands:: OO-Browser Command Descriptions +* Glossary:: Glossary +* References:: References +* Keys:: Key Binding Index +* Command Index:: Command and Variable Index +* Concepts:: Concept Index + + --- The Detailed Node Listing --- + +Working with Environments + +* Creating Environments:: +* Building Environments:: +* Loading Environments:: +* Saving Environments:: + +Using the OO-Browser + +* Invoking:: Invoking the OO-Browser +* Top-Level Classes:: Displaying Top-Level Classes +* Moving to Entries:: +* Saving Listings:: Writing a Listing to a File +* Children and Parents:: Browsing Children and Parents +* Descendants and Ancestors:: Browsing Descendants and Ancestors +* Viewing and Editing:: Viewing and Editing Classes +* Browsing Elements:: +* Browsing Categories:: +* Browsing Protocols:: +* Browsing Implementors:: +* Exiting a Listing:: +* Quitting and Refreshing:: Quitting and Refreshing the OO-Browser +* Using the Mouse:: +* Getting Help:: +* Locating Entries:: +* Filtering Entries:: +* Ordering Entries:: +* Statistics:: Environment and Class Summaries +* Class Info:: Language-Specific Class Information +* Adding and Deleting Classes:: +* Completing Names:: +* Graphical Browsing:: Graphical OO-Browser Interfaces + +OO-Browser Options + +* External Viewing:: Using An External Viewer or Editor +* Keep Viewed Classes:: +* Inhibit Version:: Inhibit Version Screen +* Invert Ancestors:: Invert Ancestor Trees +* Save All:: Save All Lookup Tables +* Use Children:: Build Children Lookup Table +* Sort Options:: Controlling Class Listing Order + +Language-Specific Notes + +* C Specifics:: +* C++ Specifics:: +* CLOS Specifics:: +* Eiffel Specifics:: +* Java Specifics:: +* Objective-C Specifics:: +* Python Specifics:: + +C++ Specifics + +* C++ Element Selection:: Source Code Element Selection +* C++ Settings:: + +CLOS Specifics + +* CLOS Method Handling:: Method Handling +* CLOS Settings:: + +Eiffel Specifics + +* Eiffel Listings:: +* Eiffel Element Selection:: Source Code Element Selection +* Eiffel Settings:: + +Objective-C Specifics + +* Objective-C Categories:: +* Objective-C Protocols:: +* Objective-C Element Selection:: Source Code Element Selection +* Objective-C Settings:: + +Python Specifics + +* Python Module Lookup:: Source Code Element Selection +* Python Settings:: + +@end menu + +@node Introduction, Environments, Top, Top +@c node-name, next, previous, up +@unnumbered Introduction + +@cindex OO-Browser +@cindex Smalltalk +The @dfn{OO-Browser} is a multi-windowed, interactive, object-oriented +class browser designed for professional use. Its user interface is +similar to the well-known Smalltalk browsers @cite{[Goldberg 83]}, yet +it is much more flexible and easy to use. + +@cindex Eiffel +@cindex C++ +@cindex C +@cindex Objective-C +@cindex CLOS +@cindex Python +@cindex Smalltalk +@cindex Info +@noindent +The OO-Browser is unique in several respects: +@itemize @bullet +@item +It currently supports seven object-oriented languages (Eiffel, C++, +Objective-C, CLOS (Lisp), Java, Python and Smalltalk), one non-object-oriented +language (C), and one documentation language, (GNU Info). + +@item +It may be used for both system exploration and for browsing purposes as +part of a professional software development tool chest. + +@item +It quickly displays and provides views of complicated inheritance trees, +making it an important tool for understanding object-oriented systems. + +@item +It has a completely direct-manipulation interface with multiple modalities. + +@item +It is integrated with a powerful editing environment that can be +customized to meet personal work styles. +@end itemize + +@cindex listing buffer +@cindex listing window +@cindex viewer window +@cindex user interface +The picture on the following page highlights the major components of +the OO-Browser user interface. (If you are reading the online Info +version of this manual, see the last paragraph of this node for a link +to the aforementioned picture.) + +The windows across the top of the OO-Browser frame are called @dfn{class +listing windows}; they display @dfn{listing buffers} with a single class +name per line. The @dfn{viewer window} fills the bottom half of the +frame. It is used to display class source and summary information. It +is also used to display help on the OO-Browser command set. Pictured +here in the viewer window is part of the browser help buffer, +summarizing its command key bindings. + +All key bindings described throughout this manual are effective only +within listing buffers, unless otherwise indicated. This means +that the keys may not be used within the buffers displayed in the class +viewer window. Instead, all normal editing keys are available in most +buffers displayed in the viewer window. + +@cindex textual interface +@iftex +@sp 2 +@centerline{@psfig{figure=im/oobr-text.eps}} +@end iftex +@ifinfo +Mouse click on the following filename to view a picture of +the textual OO-Browser: "im/oobr-text.eps". Under InfoDock, use the +middle mouse button. Under Emacs with the Hyperbole system loaded, use +the shift-middle mouse button or shift-left on a two button mouse. +Otherwise, there is no built-in way to view the picture. +@end ifinfo + +@node Environments, Usage, Introduction, Top +@c node-name, next, previous, up +@chapter Working with Environments + +@cindex Environment, the +@cindex Library search list +@cindex System search list +Whenever the OO-Browser is in use, an Environment is selected. An +Environment may be built or simply specified. An @dfn{Environment +specification} tells the browser what to include in the construction of +an Environment. (@xref{Creating Environments}, for more information.) +An OO-Browser @dfn{Environment} includes a set of inter-class +relationships together with a few browser settings. The phrase, +@dfn{the Environment}, refers to the current OO-Browser Environment. +Many browser commands depend on information in the Environment.@refill + +The set of classes included in an Environment is specified by two lists +of directories, below which all of the Environment's class source files +are to be found. (The OO-Browser will automatically search +sub-directories below the directories specified.) The first list of +directories is called the @dfn{Library search list}; it defines the +locations of stable, typically reusable classes that have been released +for general use. The second list is called the @dfn{System search +list}; it defines the locations of unreleased classes being developed, +often for a particular system. All class names within a single +Environment must be unique to ensure proper operation of the browser. + +The OO-Browser lets one create, update and save Environments. Once an +Environment file has been created, it may be loaded at any time. The +browser will then use this Environment for all of its operations until +another one is loaded. + +The browser maintains a separate Environment for each programming +language on which it is used. Thus, if one switches from Eiffel to +C++ browsing and then back to Eiffel browsing, the Eiffel environment +will not need to be reloaded; it will appear immediately and the +frame will appear as if the Eiffel OO-Browser were invoked for the +first time. + +@cindex Environment, default +The recommended default name for Environment files is, @file{OOBR}. +We recommend that you store each Environment in the top-level directory +of the first system pathname in the Environment, i.e@. the root +directory of a system's code. + +Environment files are automatically created and loaded by the OO-Browser +so that you need never become familiar with their format. You are +responsible for remembering which Environment files you create and for +requesting their use whenever desired. @xref{Invoking,,Invoking the +OO-Browser}, for information on how to specify a different Environment +file for use.@refill + +@menu +* Creating Environments:: +* Building Environments:: +* Loading Environments:: +* Saving Environments:: +@end menu + + +@node Creating Environments, Building Environments, Environments, Environments +@c node-name, next, previous, up +@section Creating Environments + +@cindex Environment specification +Environment specifications are useful when one wants to describe a +number of Environments to the OO-Browser but wants to defer their +construction until later. Large environments then can be built +overnight. @xref{Building Environments}, for more information.@refill + +@kindex C-c C-c +@findex br-env-create +@cindex initialization file +Every Environment must be specified before it can be built or used. +Thus, specifying an Environment is the first step in creating it. +Environment specifications are created with the @{@kbd{C-c C-c}@} +@code{(br-env-create)} command, which prompts for all necessary +information. This command may be invoked repeatedly to quickly specify +a number of different Environments.@refill + +@noindent +Here are the Environment specification components for which you will be +prompted: +@table @code +@item System search directories +List of directories below which other System directories containing +class source code and directories of class source files may be found. + +@item Library search directories +List of directories below which Library files of class source code +and directories of class source files may be found. + +@emph{EIFFEL NOTE: We strongly suggest that if you have previous +versions of library class source below any of these directories, that +you move them elsewhere, e.g. ISE's Eiffel version "2.1" directory of +source. These will cause class naming conflicts that the browser will +not resolve to your satisfaction. The basic rule is that every class +name within a single Environment should be unique. Use @{@kbd{M-e}@} to +help find duplicate classes.} +@end table + + +@node Building Environments, Loading Environments, Creating Environments, Environments +@c node-name, next, previous, up +@section Building Environments + +@cindex Environment building +An Environment specification tells the OO-Browser what to include in the +Environment, but the Environment still must be built before use. When a +new Environment must be built or when a large number of changes have +been made to classes in the Environment, the following commands are +useful: + +@findex br-env-rebuild +@findex br-lib-rebuild +@findex br-sys-rebuild +@kindex C-c C-e +@kindex L +@kindex S +@table @kbd +@item @{C-c C-e@} +build all Env classes @code{(br-env-rebuild)} (This prompts for whether +or not to use a background process to build the Environment.) +@item @{L@} +build Env Library classes only @code{(br-lib-rebuild)} +@item @{S@} +build Env System classes only @code{(br-sys-rebuild)} +@end table + + +When class names or locations have changed or the Environment's +inheritance structure is modified, the Environment must be rebuilt. For +small Environment changes, one may use the class addition and deletion +features of the browser. @xref{Adding and Deleting Classes}, for more +information.@refill + +@cindex Environment building, batch +@cindex large Environments +The OO-Browser lets you build large environments in the background so +you can go on to other work while waiting on a build. When the build is +complete, it will ask you whether you want to browse the built Environment. + +Alternatively, very large Environments may be built overnight by +invoking Emacs in batch mode at a scheduled time. To do this, you must +first create an Environment specification so that the browser knows what +to build. @xref{Creating Environments}. Then use a shell command +line of the form below (substitute your local OO-Browser installation +directory for @emph{<BR-DIR>}):@* +@example +emacs -batch -l <BR-DIR>/br-start.el @emph{Env-Spec-File} \ + ... @emph{Spec File} -f br-env-batch-build > log-file +@end example +@noindent +for example:@* +@example +emacs -batch -l br-start.el OOBR -f br-env-batch-build > log-file +@end example + +Typically when using the above command line, one should redirect +the standard output stream to a log file for later examination, as is +done in the above example. This helps ensure that either the +Environment built successfully or a message indicating the cause of +failure is provided. + +@node Loading Environments, Saving Environments, Building Environments, Environments +@c node-name, next, previous, up +@section Loading Environments + +@cindex Environment loading +@cindex loading an Environment +@kindex C-c C-o +@findex oo-browser command +@vindex br-env-default-file +@vindex file, OOBR +@cindex default Environment +A new Environment may be loaded for use at any time within the +OO-Browser. One may either select the load Environment command from the +OO-Browser command summary or may use the @{@kbd{C-c C-o}@} +@code{(oo-browser)} command to select a language and environment to load. +When prompted for the Environment file to load or create, an immediate +@{@key{RET}@} will browse the most recently loaded Environment, if any. +Otherwise, it will create and load the Environment file in the current +directory whose name is given by the @var{br-env-default-file} variable +(default is @file{OOBR}). + +@node Saving Environments, , Loading Environments, Environments +@c node-name, next, previous, up +@section Saving Environments + +The OO-Browser automatically builds and saves Environments in most +cases. Occasionally one may find a need to force the Environment to +be saved to a file, as in the case when one wants to save an Environment +under a different file name. + +@kindex C-c C-s +@findex br-env-save +Use @{@kbd{C-c C-s}@}, the @code{(br-env-save)} command to force an +Environment save to occur. The command will prompt for a file to save +to, with the default as the current Environment file name. + + +@node Usage, Options, Environments, Top +@c node-name, next, previous, up +@chapter Using the OO-Browser + +@menu +* Invoking:: Invoking the OO-Browser +* Top-Level Classes:: Displaying Top-Level Classes +* Moving to Entries:: +* Saving Listings:: Writing a Listing to a File +* Children and Parents:: Browsing Children and Parents +* Descendants and Ancestors:: Browsing Descendants and Ancestors +* Viewing and Editing:: Viewing and Editing Classes +* Browsing Elements:: +* Browsing Categories:: +* Browsing Protocols:: +* Browsing Implementors:: +* Exiting a Listing:: +* Quitting and Refreshing:: Quitting and Refreshing the OO-Browser +* Using the Mouse:: +* Getting Help:: +* Locating Entries:: +* Filtering Entries:: +* Ordering Entries:: +* Statistics:: Environment and Class Summaries +* Class Info:: Language-Specific Class Information +* Adding and Deleting Classes:: +* Completing Names:: +* Graphical Browsing:: Graphical OO-Browser Interfaces +@end menu + +@node Invoking, Top-Level Classes, Usage, Usage +@section Invoking the OO-Browser + +@cindex invoking the OO-Browser +@cindex starting the OO-Browser +@kindex C-c C-o +@findex oo-browser +@cindex language support +The OO-Browser supports the following languages: C++ or G++, C, Info +(the online manual format), CLOS (Lisp), Eiffel, Objective-C, Java (as +documented in @cite{[Java 95]}), Python and Smalltalk. The OO-Browser may be +used on source written in any of these languages by using @{@kbd{C-c +C-o}@} or, if that key has not been setup, by using @{@kbd{M-x +oo-browser @key{RET}}@}. This command will prompt for the language to +browse, the Environment specification of directories to browse, and then +will either load the Environment or build it. After the Environment is +built, it will display the set of classes (or nodes) in the Environment. +(Choose C++ if you are browsing plain C code.) + +@kindex C-u C-c C-o +@cindex current Environment +@cindex Environment, current +@cindex oo-browser, restarting +If you have exited the browser using @{@kbd{q}@} and wish to browse the +same Environment again, use @{@kbd{C-u C-c C-o}@}, which will +immediately redisplay the browser just as you left it. + +@findex c++-browse +@findex eif-browse +@findex info-browse +@findex clos-browse +@findex objc-browse +@findex python-browse +@findex smt-browse +Alternatively, you can invoke the browser on a specific language +Environment, e.g@. to bring back the last Environment browsed under that +language. The language-specific browser invocation commands are: +@{@kbd{M-x eif-browse @key{RET}}@}, @{@kbd{M-x c++-browse @key{RET}}@}, +@{@kbd{M-x info-browse @key{RET}}@}, @{@kbd{M-x clos-browse +@key{RET}}@}, @{@kbd{M-x objc-browse @key{RET}}@}, @{@kbd{M-x python-browse @key{RET}}@}.@refill + +@cindex Environment file +@cindex prefix argument +@cindex Environment, prompting for +@noindent +A prefix argument given to any of these commands will cause it to prompt +for an Environment file to use as the current Environment. + +On startup, if the selected Environment has been saved to a file, it +will be loaded; otherwise, the user will be asked to specify the +Environment. The specification will be saved under the previously given +file name. The browser will then load this Environment specification +file. + +@cindex aborting +@cindex canceling +@kindex C-g +@findex keyboard-quit +If the browser loads an Environment file and finds only a specification, +it will prompt the user in the minibuffer window with a request to build +the Environment. It will continue to prompt the user until a full +Environment is built or loaded and then the browser will start, +displaying its multi-windowed interface. To abort from these prompts +and to cancel the browser invocation request at any time, use +@{@kbd{C-g}@} @code{(keyboard-quit)}, the standard way to abort an +unfinished command within Emacs. + +Once an Environment has been loaded, entering and quitting the browser +are rapid actions, allowing a smooth transition between editing and +browsing. + + +@node Top-Level Classes, Moving to Entries, Invoking, Usage +@section Displaying Top-Level Classes + +@cindex classes, top-level +The OO-Browser starts by displaying all top-level classes in the +Environment. @dfn{Top-level classes} are those that do not inherit from +any others. The browser can show all top-level classes or System or +Library classes only. Once in the browser, use: + +@kindex s +@findex br-sys-top-classes +@kindex l +@findex br-lib-top-classes +@kindex t +@findex br-top-classes +@table @kbd +@item @{s@} +System top-level classes only +@item @{l@} +Library top-level classes only +@item @{t@} +all top-level classes in Environment +@end table + +Note that selection of any of these commands does not affect the ancestry or +descendancy trees for any given class. Each simply limits which trees are +easily accessible for browsing. For example, selection of Library +top-level classes only, followed by the browser show children command, +@{@kbd{c}@} @code{(br-children)}, would display the name of a System +class if the System class directly inherits from the selected Library +class. + +@cindex classes, all +@cindex Environment, ordering classes +To see an ordered listing of all of the classes in a particular part of +an Environment, use a prefix argument with the commands given above: + +@table @kbd +@item @{C-u s@} +all System classes +@item @{C-u l@} +all Library classes +@item @{C-u t@} +all Environment classes. +@end table + +@node Moving to Entries, Saving Listings, Top-Level Classes, Usage +@section Moving to Entries + +@kindex C-n +@findex br-next-entry +@kindex C-p +@findex br-prev-entry +@cindex previous entry +@cindex entry, previous +@cindex next entry +@cindex entry, next +@cindex movement +Many browser commands operate on the current entry in a listing window. +@{@kbd{C-n}@} @code{(br-next-entry)} moves point to +the next entry in a listing buffer. @{@kbd{C-p}@} +@code{(br-prev-entry)} moves to the previous entry. Both take prefix +arguments and use them as the number of entries by which to move. + +@node Saving Listings, Children and Parents, Moving to Entries, Usage +@section Writing a Listing to a File + +@kindex C-c C-w +@findex br-write-buffer +@cindex listing, editing +@cindex listing, writing to a file +Many standard editing keys are rebound in listing buffers to +provide a useful set of accessible commands. Nonetheless, one needs to +be able to store and to edit listing buffers. The @{@kbd{C-c +C-w}@} @code{(br-write-buffer)} command provides this capability. The +command prompts for a file name under which to save the current buffer. +One may then quit the browser, read in the file and edit it as a plain +text file. + +@node Children and Parents, Descendants and Ancestors, Saving Listings, Usage +@section Browsing Children and Parents + +@kindex c +@findex br-children +@kindex p +@findex br-parents +@cindex browsing, children +@cindex children +@cindex browsing, parents +@cindex parents +@{@kbd{c}@} displays the children of the class at point; @{@kbd{p}@} +displays its parents. @{@kbd{C-u c}@} displays the children of all classes +in the present listing window; @{@kbd{C-u p}@} does the same for parents. + +@node Descendants and Ancestors, Viewing and Editing, Children and Parents, Usage +@section Browsing Descendants and Ancestors + +@cindex browsing, ancestors +@cindex ancestors +@cindex browsing, descendants +@cindex descendants +The OO-Browser is very fast at computing ancestor and descendant hierarchies, +accounting for multiple inheritance and cycles where permitted. Descendant +and ancestor listings provide an immediate overview of some key relationships +among class groupings. + +@kindex d +@findex br-descendants +@kindex a +@findex br-ancestors +With point on any class entry line in a listing buffer, @{@kbd{d}@} +shows descendants for the class and @{@kbd{a}@} shows ancestors. +@{@kbd{C-u d}@} shows the descendant trees for all classes in the +current listing buffer and @{@kbd{C-u a}@} does the same for ancestors. + +@cindex ancestors, inverted +@vindex br-invert-ancestors +The ancestor tree for a given root class is normally shown branching out +from the root class. This means that higher-level ancestors, those +further away from the root class, are shown in descending trees below +lower-level ancestors. The leaves of the tree represent the ancestors +furthest from the root, as one might expect. + +This, however, is the inverse of inheritance trees. Some people prefer +to see ancestor trees like inheritance trees, with parents above +children. This is an @dfn{inverted ancestor tree}. To obtain this +view of ancestors use @{@kbd{M- -1 a}@} for ancestors of the current +class. For ancestors of all classes in the current buffer, use +@{@kbd{M- -2 a}@}, or any negative prefix argument lest than -1. +Inverted ancestor trees may be made the default by setting +@code{br-invert-ancestors} non-nil, as in: + +@display + @{@kbd{M-x set-variable @key{RET} br-invert-ancestors @key{RET} t @key{RET}}@} +@end display + +@noindent +This is a personal setting that affects all Environments used by the browser. + +@node Viewing and Editing, Browsing Elements, Descendants and Ancestors, Usage +@section Viewing and Editing Classes + +@kindex v +@findex br-view-entry +@cindex classes, viewing +@cindex viewing a class +@kindex e +@findex br-edit-entry +@cindex classes, editing +@cindex editing a class +One of the major uses of the OO-Browser is to view or edit class source +texts. @{@kbd{v}@} will view the source for the class or element name +at point in a read-only mode in the viewer window; it will not select +the viewer window. @{@kbd{e}@} does the same, except that it edits the +element source in a read-write mode, if the user has write permission for +the source file. It also selects the viewer window. + +@cindex classes, name completion +@cindex completion +A prefix argument to either of these commands, as in @{@kbd{C-u v}@} or +@{@kbd{C-u e}@}, causes them to prompt for the entry to display. +Full class and element name completion is provided once an Environment +has been loaded and built. @xref{Completing Names}.@refill + +@vindex br-edit-file-function +@vindex br-view-file-function +The value of the variable @var{br-edit-file-function} is the function +that the browser calls when a source file entity is displayed for editing. +The value of @var{br-view-file-function} is the function called to view +a source file entity. @xref{External Viewing,,Using an External +Viewer or Editor}, for information on using non-Emacs editors and +viewers with the browser. + +If a user has no read access rights to a file, this will be apparent +when the browser tries to display the file and fails. If the user does +not have write permission to the class source file, the standard +@var{br-edit-file-function} may display the file in a read-only mode +(indicated by two percent signs, %%, at the front of the buffer mode +line). This is a warning that one should not attempt to edit the file. +In some cases, one really wants to try to edit such a file; in those +cases, the buffer may be toggled between read-only and read-write modes +via the Emacs command, @code{(toggle-read-only)}, usually bound to +@{@kbd{C-x C-q}@}. + +@kindex SPC +@findex br-viewer-scroll-up +@kindex DEL +@findex br-viewer-scroll-down +@cindex scrolling viewer +@cindex viewer, scrolling +Once a class has been displayed for viewing, @{@key{SPC}@} will scroll its +source text up (forward) almost a windowful; @{@key{DEL}@} will scroll it +down (backward) almost a windowful. In fact, this is a general means +for scrolling the OO-Browser viewer window whenever point, as shown by +the Emacs cursor, is in a listing window. When a class is +selected for editing, @{@kbd{C-v}@} will scroll up, @{@kbd{M-v}@} will +scroll down, assuming the standard Emacs key bindings. + +@kindex C-c C-v +@findex br-to-from-viewer +@cindex movement, to or from viewer +Sometimes one needs to quickly switch back and forth between the viewer +window and the current listing window. The normal Emacs window +movement commands often are cumbersome in such instances. Instead +@code{(br-to-from-viewer)} bound to @{@kbd{C-c C-v}@}, allows the +desired back and forth movement. It acts as a toggle switch, +alternately moving between the buffer in the viewer window and the prior +listing buffer. + +@cindex class, narrowing view to +@vindex br-narrow-view-to-class +@cindex classes, others same file +@kindex C-x n w +@kindex C-x w +@findex widen +By default, the OO-Browser displays class definition files in their +entirety. If there are multiple classes in a file, you will be able to +scroll through all of them. If you prefer that only the selected class +be visible, enable the @code{br-narrow-view-to-class} option flag. When +set to a non-nil value, this flag narrows the source buffer so that only +the class of interest and its preceding comments are visible. To +examine other classes in the same file, you must execute a @{@kbd{C-x n +w}@} @code{(widen)} command when in the narrowed buffer. (Use +@{@kbd{C-x w}@} under Emacs 18.) + +@kindex 1 (one) +@findex br-view-full-frame +@kindex C-x 1 +@findex delete-other-windows +@cindex viewer, full frame +If the browser is used on a small screen, it may be helpful to use the +a full frame to view or edit a buffer of source code. If point is in a +listing buffer, pressing @{@kbd{1}@}, the number one, will expand the +viewer window buffer to the full frame. When the browser is +re-invoked, it will look just as it did before. If point is in the +viewer window, @{@kbd{C-x 1}@} @code{(delete-other-windows)}, will do +practically the same thing, except that when the browser is re-invoked +it will not look precisely as it did before. + +@kindex C-c C-k +@findex br-kill +@kindex C-x k +@findex kill-buffer +@cindex viewer, killing displayed buffer +If point is in a listing window, the buffer displayed in the +viewer window may be killed with the @{@kbd{C-c C-k}@} @code{(br-kill)} +command. (A killed buffer is removed from the current Emacs session.) + +If point is in the viewer window, as it will be after editing a class +buffer, use the standard Emacs command @{@kbd{C-x k}@} +@code{(kill-buffer)} instead. + +@node Browsing Elements, Browsing Categories, Viewing and Editing, Usage +@section Browsing Elements +@cindex element +@cindex browsing elements +@cindex element browsing +@cindex instance browsing +@cindex feature +@cindex routine +@cindex attribute +@cindex Common Lisp +@cindex CLOS +A @dfn{feature} of a class is either a routine or attribute defined in +the class. An @dfn{element} is either a feature or an instance of a +class. A number of OO-Browser languages support feature browsing, as +documented in @ref{Languages}. Instance browsing is only supported +in very limited form, for class instances which exist within the code +itself. For example, under Common Lisp and CLOS, a default class called +@code{[function]} is defined whose instances are all named functions +defined within the environment. A @dfn{default class} is a class +created to categorize elements of the Environment for browsing; default +classes are not specified within the Environment source code. + +@kindex f +@kindex r +@findex br-features +Use @{@kbd{f}@} to display a listing of the features or elements +of the class at point, including inherited features. +Generally, this includes only routines. Use @{@kbd{M-0 f}@} to turn off +the display of inherited features; use the same command again to +re-enable display of inherited features. + +If inherited features are off and there are no feature definitions for +the class, the class definition is displayed instead, so that its +feature declarations may be browsed. + +Use @{@kbd{C-u f}@} to display a listing of the features or elements of +all classes in the present listing window. Prior versions of the +OO-Browser used @{@kbd{r}@} to display features. This key remains for +backward compatibility but may be used for another purpose in the +future. + +@kindex e +@findex br-edit-entry +@cindex edit element +@kindex v +@findex br-view-entry +@cindex view element +@kindex F +@findex br-feature-signature +@cindex signature +@cindex feature +Move point to an element name and use @{@kbd{v}@} to view its source +definition or @{@kbd{e}@} to edit its source. Use @{@kbd{F}@} to see +the full signature tag of an element, which includes its argument names +and types, if any. @{@kbd{C-u F}@} lists the signatures of all elements +in the current listing. This is handy when several elements from the +same class have the same name but differ in signature. + +@xref{Using the Mouse}, for how the Action and Assist Keys may be used +for browsing elements. + +@node Browsing Categories, Browsing Protocols, Browsing Elements, Usage +@section Browsing Categories + +@cindex category +@cindex class category +The definition of a @dfn{category} is language-specific. Some languages such +as Smalltalk use categories to group related classes together. The +OO-Browser does not yet support this kind of category. + +A set of Objective-C categories segments a single class into groupings +of related features. When a class category is defined, the category +name appears within a set of parentheses, so the OO-Browser displays +category names with parentheses around them to distinguish them from +classes. The aggregation of all of the categories defined by a class +and its ancestors represents the complete class definition. The +OO-Browser does support this kind of category. + +@kindex C +Use the @{@kbd{C}@} key when point is on a class listing entry to obtain +a list of the categories defined for the class within the Environment +source code (this excludes inherited categories). Use @{@kbd{C-u C}@} +to list the categories for all classes in the current listing. Thus, to +see the full set of categories for a class, use @{@kbd{a}@} to list the +ancestors of the current class and then @{@kbd{C-u C}@} to show all +direct and inherited categories of the class. + +@cindex implementor, category +@kindex v +@kindex e +Use @{@kbd{v}@} or @{@kbd{e}@} to view or edit the class category +definition associated with a category entry at point. @xref{Browsing +Implementors}, for an explanation of how to browse the classes that +directly implement a category. + +@kindex f +Use @{@kbd{f}@} with point on the default @code{[category]} class to +list all categories defined in the Environment. + +@node Browsing Protocols, Browsing Implementors, Browsing Categories, Usage +@section Browsing Protocols + +@cindex protocol +@cindex class protocol +@cindex conformance to protocol +@cindex formal protocol +The definition of a @dfn{protocol} is language-specific. +It generally refers to an interface specification to which a class is +said to conform. A class conforms to a protocol by implementing the set +of features defined in the protocol. + +Presently, the OO-Browser support protocols only under Objective-C. +Objective-C protocols are sometimes called @emph{formal protocols}. +Protocol interfaces are specified in a manner similar to classes but their +features are only implemented in conforming classes. A single protocol +can inherit from any number of other protocols; thus, any conforming +class must conform to all of its ancestor protocols. + +Class definitions list the protocols to which they directly conform, +within a set of angle brackets. So the OO-Browser displays protocol +names with angle brackets around them to distinguish them from classes. + +@kindex P +Use the @{@kbd{P}@} key when point is on a class listing entry to obtain +a list of the protocols to which the class directly conforms +(this excludes inherited protocols). Use @{@kbd{C-u P}@} +to list the direct protocols for all classes in the current listing. +There is not yet a way to show the complete set of protocols to which a +class conforms, which includes all protocols inherited from other +protocols and all protocols inherited from ancestor classes. + +@kindex v +@kindex e +If you use @{@kbd{P}@} when point is on a class' protocol entry, the +specification of the protocol will be displayed. Use @{@kbd{v}@} or +@{@kbd{e}@} to view or edit the class or class category definition +associated with a protocol entry at point. + +@cindex implementor, protocol +Use standard class browsing keys when on a protocol entry to examine its +parents, children, ancestors or descendants. @xref{Browsing +Implementors}, for an explanation of how to browse the classes that +directly conform to a protocol. + +@kindex f +Use @{@kbd{f}@} with point on the default @code{[protocol]} class to +list all protocols defined in the Environment. + +@node Browsing Implementors, Exiting a Listing, Browsing Protocols, Usage +@section Browsing Implementors + +@cindex implementor +@cindex element +@kindex I +@findex br-implementors +@kindex e +@kindex v +@kindex F +@cindex signature +Sometimes it is important to see the list of classes that define a +particular element name. These are called the element's +@dfn{implementors}. With point on an element listing, @{@kbd{I}@} will +compute and display the element's implementor list. @{@kbd{C-u I}@} will +do the same for all elements in the present listing. + +Move point to an implementor class name and then use @{@kbd{v}@} or +@{@kbd{e}@} to view or edit the element associated with the class. If an +element name is defined with different signatures in a single class, the +class will be listed as an implementor multiple times. Each class entry +can be used to display a different element. @{@kbd{C-u F}@} will +display the element signature associated with each class entry in the +same order as the class entries in the present listing buffer. + +@node Exiting a Listing, Quitting and Refreshing, Browsing Implementors, Usage +@section Exiting a Listing + +@kindex x +@findex br-exit-level +@cindex exiting a listing level +When done with a browser listing buffer, one should clear and exit +from the buffer's display with @{@kbd{x}@}. This command also displays +the previous listing level, if any, and moves point to its +previous position within this buffer. + +In this way, the command provides a quick and clean way to exit back to a +previous listing level; you may exit a single level at a time or all the way +back to the top-level listing buffer through repeated invocation of the +command or by sending a prefix argument value to the command. + +There is no need to exit from listing buffers to quit from the browser. You +may quit, perform other actions, and then re-invoke the browser at the same +point from which you left. + +@node Quitting and Refreshing, Using the Mouse, Exiting a Listing, Usage +@section Quitting and Refreshing the OO-Browser + +@kindex q +@findex br-quit +@cindex quitting, temporarily +@cindex quitting, permanently +@{@kbd{q}@} quits from the browser temporarily. The same command with a +prefix argument quits from the browser permanently and kills all +non-modified browser buffers. It will not kill any of the class source +buffers. + +@kindex C-c C-r +@findex br-refresh +@cindex refreshing the browser display +If you are familiar with Emacs windowing, you may quickly alter the window +configuration of the frame while in the browser, either intentionally or +more likely unintentionally. If you execute non-browser Emacs commands while +in the browser, you may find other buffers have taken the place of your +browser buffers. In either case, you may refresh the browser display and +restore it to the way it was when you originally invoked it, by using +@{@kbd{M-x br-refresh @key{RET}}@} or with @{@kbd{C-c C-r}@} when in a +browser listing buffer. + +@node Using the Mouse, Getting Help, Quitting and Refreshing, Usage +@section Using the Mouse + +@cindex mouse control +@kindex H +@findex br-help-ms +@cindex Action Key +@cindex Assist Key +@kindex Action Key +@kindex Assist Key +@cindex XEmacs +@cindex Emacs 19 +@cindex InfoDock +@cindex Menu Key +Once configured, mouse control within the OO-Browser is helpful and easy +to use. Under InfoDock, XEmacs and Emacs 19, the right mouse button, +called the Menu Key, pops up a menu of OO-Browser commands when clicked +within an OO-Browser listing buffer. Under XEmacs and Emacs 19, the +same menu is added to the menubar used in listing buffers. Under +InfoDock with mode-specific menus turned on, the menubar is devoted to +OO-Browser commands. + +Even if the above features are not available to you, if you have mouse +support in your Emacs, the following features are available. A single +mouse button, called the @dfn{Action Key}, is used for most purposes. +The Action Key is bound to the shift-middle mouse button under standard +Emacs, to the middle mouse button under InfoDock, or to the shift-left +button on a two-button mouse. + +A second button, called the @dfn{Assist Key}, is used for help and other +ancillary functions. The Assist Key is bound to the shift-right button. +The @file{br-help-ms} file uses a table format to summarize mouse +control within the browser, it may be displayed within the browser via +the @{@kbd{H}@} @code{(br-help-ms)} command. + +Within an empty listing buffer, clicking the Action Key displays the +browser command menu; the Assist Key displays a menu listing +language-specific source files. Within this menu, the Action Key +selects a buffer for display, the Assist Key marks the buffer for +deletion. To perform the deletes, click the Action Key after the last +line of the menu. If the Assist Key is clicked after the last line, the +deletes are undone and a list of all current editor buffers is shown, +allowing you to select buffers other than those containing classes. + +The mouse buttons can be used to scroll the viewer window a page at a +time by clicking after the end of any line. The Action Key scrolls the +window up (forward) a windowful and the Assist Key scrolls it down +(backward) a windowful. + +The Action Key acts as follows when in an OO-Browser listing buffer. If +the button is pressed: + +@itemize @bullet +@item +on a blank line following all entries or in a blank listing buffer, the +browser command help menu is displayed in the viewer window +exited;@refill +@item +at the beginning of a (non-single character) class name, the class' +ancestors are listed;@refill +@item +at the end of an entry line, the listing is scrolled up;@refill +@item +on the `...', following a class name, point is moved to the class +descendency expansion;@refill +@item +before an element name, the implementor classes of the name are listed;@refill +@item +anywhere else on an entry line (i.e. on the entry), the entry's source +is displayed for editing.@refill +@end itemize + +The Assist Key acts as follows when in a listing buffer. If it is pressed: + +@itemize @bullet +@item +in a blank buffer, a selection list of buffer files is displayed;@refill +@item +at the beginning of a (non-single character) class, the class' +descendants are listed;@refill +@item +at the end of an entry line, the listing is scrolled down;@refill +@item +on the `...', following a class name, point is moved to the class +expansion;@refill +@item +anywhere else on a class line, the class' elements are listed;@refill +@item +anywhere else on an element line, the element's implementor classes are +listed;@refill +@item +on a blank line following all entries, the current listing buffer is +exited.@refill +@end itemize + +@node Getting Help, Locating Entries, Using the Mouse, Usage +@section Getting Help + +@kindex h +@findex br-help +The OO-Browser is very intuitive to operate, but help is always a key or +button press away when needed. Besides the online and printed versions +of this manual, there is an online quick reference built into the +OO-Browser. Once the browser windows appear, press @{@kbd{h}@} at any +time to bring up a buffer full of command help. + +@kindex C-h k +@findex describe-key +For more extensive documentation on each browser key, use the Emacs command +@{@kbd{C-h k @var{key-sequence}}@}. + +@node Locating Entries, Filtering Entries, Getting Help, Usage +@section Locating Entries + +@kindex w +@findex br-where +@cindex class, source file +@cindex class, where is +@cindex element, source file +@cindex element, where is +@cindex entry, where is +The @{@kbd{w}@} @code{(br-where)} command can be used to locate the +source file associated with a listing entry. It prints the full +pathname of the source file in the minibuffer window. +A prefix argument as in, @{@kbd{C-u w}@}, causes the command to prompt +for the class or element name to locate. Full completion is +provided. @xref{Completing Names}.@refill + +@kindex m +@findex br-match +@cindex classes, matching names +@cindex classes, finding +@cindex matching to class names +@cindex finding classes +@cindex locating classes + +The @{@kbd{m}@} @code{(br-match)} command provides a quick mechanism for +locating any classes in the Environment whose names match to an +expression in part or in whole. The browser will prompt for the +expression to use. All matching names are displayed in ascending order. + +By default the expression is treated as a regular expression. A prefix +argument sent to the command tells it to treat the expression as a string. + +After each search, the command reports the number of matching classes +found and displays them in the current listing window. It then prompts +for another expression to key on. The selected set is then filtered +once again. This cycle continues until the @{@key{RET}@} is pressed +without giving an expression. This process allows for easy location of +desired classes. + +When the command is invoked (first time through the loop), if the +@{@key{RET}@} key is pressed without giving a match expression, the search +will match to all classes referenced in the Environment. + +If you want a regular expression to match to whole class names +exclusively, begin it with a '^' and end it with a '$' character which +match to beginning of name and end of name, respectively. Thus, "^....$" +would match to class names with exactly four characters. A string +match always matches to any class name that contains the matching +string. + +@node Filtering Entries, Ordering Entries, Locating Entries, Usage +@section Filtering Entries + +@kindex M +@findex br-match-entries +@cindex entries, matching names +@cindex matching to listing entries +@cindex filtering entries +@cindex locating Entries + +The @{@kbd{M}@} @code{(br-match-entries)} command works much like the +@code{(br-match}) command described in, @ref{Locating Entries}, except +that it matches only to entries in the current listing buffer. It thus +allows you to filter a listing to just those entries that you care to +browse. It prompts you for a regular expression of entries to match +and then deletes entries that don't match. A prefix argument sent to +the command tells it to treat the match expression as a string. + +After each search, the command reports the number of matching entries +found and displays them in the current listing window. It then prompts +for another expression to match. The selected set is then filtered +once again. This cycle continues until the @{@key{RET}@} is pressed +without giving an expression. This process allows for easy incremental +filtering of listings. + +When the command is invoked (first time through the loop), if the +@{@key{RET}@} key is pressed without giving a match expression, the search +will match to all entries in the listing, so no filtering will be done. + +If you want a regular expression to match to whole entries +exclusively, begin it with a '^' and end it with a '$' character which +match to beginning of line and end of line, respectively. Thus, "^....$" +would match to entry lines with exactly four characters. A string +match always matches to any entry that contains the matching string. + + +@node Ordering Entries, Statistics, Filtering Entries, Usage +@section Ordering Entries + +@kindex o +@findex br-order +@cindex entries, ordering +@cindex ordering listings +@cindex sorting listings +Once you have a desired set of names in a browser listing window, you +may want to re-order. For a simple ascending order sort by +name, use @{@kbd{o}@}. To sort the lines in the current listing window +accounting for leading whitespace, use a positive prefix argument. To sort +the lines in descending order accounting for leading whitespace, use a +negative prefix argument. Note that all of the top-level class display +commands automatically order their output lists. @xref{Top-Level Classes,, +Displaying Top-Level Classes}.@refill + +To sort in descending order, first sort into ascending order with +@{@kbd{o}@} to strip any leading whitespace and then use a negative +prefix argument to sort the names into descending order. + + +@node Statistics, Class Info, Ordering Entries, Usage +@section Environment and Class Summaries + +@kindex # +@findex br-count +@cindex number of classes +@cindex class count +The @{@kbd{#}@} @code{(br-count)} command displays in the minibuffer the +number of entries in the present listing buffer. + +@kindex M-c +@findex br-class-stats +@cindex class info +@cindex class statistics +The @{@kbd{M-c}@} @code{(br-class-stats)} command displays in the +minibuffer window the number of parents and children for the selected +class; with a prefix argument, it prompts for the class name to use. + +@kindex M-e +@findex br-env-stats +@cindex Environment statistics +@cindex Environment spec summary +The @{@kbd{M-e}@} @code{(br-env-stats)} command displays the +specification for the current Environment along with a few Environment +statistics (OO-Browser version used to build the Environment, total +classes, number of System and Library classes, number of duplicate and +undefined classes) in the viewer window. With a prefix argument, it +displays in the minibuffer window the basic statistics only, leaving the +contents of the viewer window intact. + +@node Class Info, Adding and Deleting Classes, Statistics, Usage +@section Language-Specific Class Information + +@kindex i +@findex br-entry-info +@cindex entry attributes +@cindex parents +@cindex attributes +@cindex routine calls +@cindex Eiffel, info +Presently, this feature is available only for Eiffel browsing. + +With point on a class name in a listing buffer, the command, +@{@kbd{i}@} @code{(br-entry-info)}, displays the class' parents, +attributes and routines with routine call summaries. This is its +default behavior. + +@cindex Eiffel, short +@cindex Eiffel, flat +@{@kbd{M-x eif-info-use-short}@} will instead cause the +@code{(br-entry-info)} command to run the Eiffel 'short' command on a +class, thereby displaying its specification. +@{@kbd{M-x eif-info-use-flat}@}, will cause the command to run +the Eiffel 'flat' command on a class, thereby displaying its complete +feature set. Use @{@kbd{M-x eif-info-use-calls}@} to reset this command +to its default behavior. + + +@node Adding and Deleting Classes, Completing Names, Class Info, Usage +@section Adding and Deleting Classes + +@kindex C-c ^ +@findex br-add-class-file +@cindex class, adding to Environment +@cindex class, replacing in Environment +@cindex Environment, adding classes +@cindex Environment, replacing classes +@cindex initialization file +A file containing class definitions may be added to the Environment with +the @{@kbd{C-c ^}@} @code{(br-add-class-file)} command. This will +prompt for the file name, scan the file, and then update the +Environment. If a class defined in the file is already in the +Environment, its information will be replaced with the information +gathered from the file; otherwise, the class will be added to the +Environment. This command does not update the browser display; one +must issue a browser command after the add command in order to see any +change. + +@cindex Environment, adding individual classes +To add a single class from a file containing multiple classes, read the +file into an Emacs buffer, narrow the buffer to the desired class and +then execute the add command. @xref{Narrowing,,Narrowing, emacs, The +Gnu Emacs Manual}.@refill + +@{@kbd{C-c ^}@} is normally globally bound in the OO-Browser +initialization file, @file{br-init.el}, so that it may be used outside +of the browser when editing classes. + +@kindex C-c C-d +@findex br-delete +@cindex class, deleting from Environment +@cindex Environment, deleting classes +To delete a class from the Environment, display the class name in a +listing window using the @{@kbd{m}@} @code{(br-match)} command if +necessary. (@xref{Locating Entries}.) Move point to the desired class +name and hit @{@kbd{C-c C-d}@} @code{(br-delete)} to delete the class. +This will remove the class name at point after the class is deleted from +the Environment.@refill + + +@node Completing Names, Graphical Browsing, Adding and Deleting Classes, Usage +@section Completing Names + +Whenever the browser prompts for a name and an Environment has already +been loaded or built, one may use the browser's identifier name +completion facilities to help in entering the name. These features +allow you to type as much of the name as you know and then have the +browser fill in what it can. The relevant keys are: + +@table @key +@item @{TAB@} +complete as much as possible of a class or element name +@item @{SPC@} +complete up to one word of the class or element name +@item @{@kbd{?}@} +show all possible completions for class or element name +@end table + +You may also use the browser's completion facilities outside of the browser, +for example, when editing code. @xref{Standalone, ,Using Standalone +OO-Browser Features}, and the description of +@code{(br-complete-type)}.@refill + +@node Graphical Browsing, , Completing Names, Usage +@section Graphical OO-Browser Interfaces + +@cindex xoobr +@cindex NEXTSTEP OO-Browser +@cindex graphical browsing +The X interface to the OO-Browser is called, @dfn{xoobr}. It provides a +simple but effective means of navigating through OO-Browser hierarchy +and element relations. (The NEXTSTEP OO-Browser is very similar to the +X version, so use the documentation herein if you need any help with it.) + +Any number of xoobr sessions may be established at the same time. Each +one is used to gain a particular view on an Environment. The textual +OO-Browser is used to filter a set of classes for display in an xoobr +process. For this reason, xoobr is invoked from within the textual +OO-Browser. + +@page +@cindex X OO-Browser picture +@cindex xoobr picture +@iftex +Here is a picture of the X OO-Browser. +@sp 2 +@centerline{@psfig{figure=im/oobr-x.ps}} +@end iftex +@ifinfo +If running under the X window system, Action Key click on the following +filename to view a picture of the X OO-Browser: "im/oobr-x.xwd". +@end ifinfo + +@kindex M-g +@findex br-tree-graph +@cindex xoobr, graphical view +@{@kbd{M-g}@} @code{(br-tree-graph)} displays the current listing +buffer's entries in a graphical form. It ignores the show +features setting so that you can capture the current listing without +the need to alter that setting. + +@kindex M-d +@findex br-tree +@cindex xoobr, descendants +@{@kbd{M-d}@} @code{(br-tree)} selects the current class and displays +its descendancy graph in tree-form by starting a new xoobr session. +With a prefix argument, @{@kbd{C-u M-d}@}, displays descendancy trees +for all classes at the current browser level. They are all grouped +under some imaginary joining node so as to maintain the concept of one +tree per xoobr view. + +@kindex M-f +@findex br-tree-features-toggle +@cindex xoobr, displaying features +@cindex descendancy view +@{@kbd{M-f}@} @code{(br-tree-features-toggle)} is used before creating a +graphical descendency view to determine whether or not to include the +features of each class in the listing as child nodes of the class. +It toggles between showing features and not showing them in descendancy +views. The setting applies across all OO-Browser languages. The +default setting is to not add features to the view. + +@cindex xoobr, view +Xoobr views are meant to complement the textual browser interface. +Therefore, the two most common actions used in the text browser are +performed in a similar manner within an xoobr view. A click on a node with +the left mouse button highlights the node and then displays the appropriate +class text in the chosen editor, ready for editing. A click of the +middle button performs similarly but displays the associated class for +viewing only. + +@cindex xoobr, node menu +[The right mouse button is disable in this release of the X OO-Browser +because of an inability to debug a problem in limiting its use to tree +nodes.] The right mouse button when depressed over a node displays a +short menu of commands that may be applied to the node. The only ones +of real interest at this point are the collapse and expand entries which +let you hide and then restore the display of a node's subtree. This +allows you precise control over the amount of detail you receive in +various parts of the hierarchy. + +@cindex xoobr, help +The Help button in the upper right of the an xoobr session window when +selected displays a few pages of help text regarding the program itself. + +@kindex M-k +@findex br-tree-kill +@cindex xoobr, terminating +@cindex xoobr, killing +The @{@kbd{M-k}@} @code{(br-tree-kill)} command will prompt to see if +you want to terminate all xoobr sessions started from within the current +editor session. If you answer affirmatively, all such processes +disappear, as your screen will quickly indicate. + +@cindex xoobr, quitting +@kindex C-u q +@findex br-quit +The upper left of a session window contains a set of buttons which +display menus. The only menu entry you need be concerned with at all is +found under the file menu, labelled "Quit". xoobr processes may also be +terminated by issuing the kill command mentioned just before. A third +menas of killing such processes is by sending the permanent +@code{(br-quit)} command, @{@kbd{C-u q}@}, to the textual browser. You +will then be prompted as to whether you want to terminate all xoobr +sessions started from within the current editor session. + +@node Options, Customization, Usage, Top +@chapter OO-Browser Options + +@menu +* External Viewing:: Using An External Viewer or Editor +* Keep Viewed Classes:: +* Inhibit Version:: Inhibit Version Screen +* Invert Ancestors:: Invert Ancestor Trees +* Save All:: Save All Lookup Tables +* Use Children:: Build Children Lookup Table +* Sort Options:: Controlling Class Listing Order +@end menu + +@node External Viewing, Keep Viewed Classes, Options, Options +@comment node-name, next, previous, up +@section Using an External Viewer or Editor + +@cindex editing, externally +@cindex viewing, externally +The OO-Browser allows you to select your desired editor and viewer +programs when you use a multi-windowed display. By default, both of +these tasks are handled by Emacs so that the browser works on text +terminals. If you choose an external editor or viewer, Emacs will still +automatically be used whenever you invoke the browser from a text +terminal. + +@vindex br-editor-cmd +@cindex vi +If you wish to edit classes displayed by the browser in an editor other +than Emacs, set the @var{br-editor-cmd} variable to the command with +which you wish to edit. Arguments to the command should be placed in +the variables named @var{br-ed[1-9]}, with one string argument per +variable. Unused variables should have the value @code{nil}. Bear in +mind that the command must generate a new window under your window +system. For example, the vi editor under UNIX does not create its own +window, it runs within the window in which it is created. Under X one +would create a new xterm window and then invoke vi. The command line +would be @emph{xterm -e vi}, the settings in your personal +initialization file would then be: + +@display + @code{ +(setq br-editor-cmd "xterm" br-ed1 "-e" br-ed2 "vi" + br-ed3 nil br-ed4 nil br-ed5 nil + br-ed6 nil br-ed7 nil br-ed8 nil br-ed9 nil)} +@end display + +@vindex window-system +This editor will only be used when the browser is run under a window +system external to Emacs, like X. (In such a case, the Emacs variable +@var{window-system} will be non-nil). + +@vindex br-viewer-cmd +@cindex xmore +If you want to view classes in a read-only fashion outside of Emacs, set the +following @var{br-viewer-cmd} and @var{br-vw[1-9]} variables in a similar +manner as you did for the editor variables above. + +For example, to use @file{xmore}, an X-compatible version of @file{more}, as +your viewer, use the following settings (assuming all the @var{br-vw} +variables are already null): + +@display + @code{(setq br-viewer-cmd "xmore")} +@end display + + +@node Keep Viewed Classes, Inhibit Version, External Viewing, Options +@comment node-name, next, previous, up +@section Keep Viewed Classes + +@vindex br-keep-viewed-classes +The @var{br-keep-viewed-classes} flag is turned off by default, +indicating that each time a class is viewed immediately after another +one, the prior one is deleted. If it is set to any non-nil value, all +viewed classes are left around for selection. + +In typical use, the burden of having to manage all viewed classes is +greater than the benefit of leaving them in memory. This is why the +flag is off by default. The class buffer menu can be used to delete +buffers when you want to trim down the number with which you are dealing. +@xref{Using the Mouse}, for details on this technique. + +@findex br-toggle-keep-viewed +@vindex br-keep-viewed-classes +The value of the @var{br-keep-viewed-classes} flag may be easily +toggled with the @code{(br-toggle-keep-viewed)} command bound to +@{@kbd{V}@}. + + +@node Inhibit Version, Invert Ancestors, Keep Viewed Classes, Options +@section Inhibit Version Screen + +@vindex br-inhibit-version +After you are familiar with the opening OO-Browser version screen, you may +want to disable its display each time the browser is started. This is done by +setting @var{br-inhibit-version} non-nil, as in the following line that +would go in your personal OO-Browser initialization file: + +@example + @code{(setq br-inhibit-version t)} +@end example + +@kindex C-c # +@findex br-version +@cindex version, browser +@cindex support +@noindent +This option has no effect on the display of the help screen which +follows the version screen. Even with this option set, you may display +the version screen at any time from within a browser listing +window by using @{@kbd{C-c #}@} @code{(br-version)}. + + +@node Invert Ancestors, Save All, Inhibit Version, Options +@section Invert Ancestor Trees + +@xref{Descendants and Ancestors,,Browsing Descendants and Ancestors}, +for more information.@refill + +This is a global OO-Browser option, it affects all Environments. + +Ancestor trees are normally shown to emphasize how the trees branch out +from their origin. An initialization file line such as: + +@example + @code{(setq br-invert-ancestors t)} +@end example + +@noindent +will cause the display of ancestor trees to be inverted such that the further +ancestors appear as roots of the trees and parents (the nearest ancestors) +appear as leaves in the trees. This ensures that all listing displays +reflect the class inheritance structure with children below parents. + + +@node Save All, Use Children, Invert Ancestors, Options +@section Save All Lookup Tables + +This is an Environment-specific option set during Environment +specification. @xref{Creating Environments}.@refill + +Half of the browser lookup tables can be built whenever an Environment +is loaded. If this option is set, these tables will be stored in the +Environment file instead. This will speed Environment loading somewhat, +at the cost of doubling the file size per saved Environment. + +@node Use Children, Sort Options, Save All, Options +@section Build Children Lookup Table + +This is an Environment-specific option set during Environment +specification. @xref{Creating Environments}.@refill + +This is a highly recommended option that allows for fast descendant +lookups. The only time one would turn off this option would be when a +file system is extremely short of space. + +@node Sort Options, , Use Children, Options +@section Controlling Class Listing Order + +@vindex br-sort-options +@cindex listing order +@cindex sorting options +@cindex listing options +The OO-Browser normally orders classes and elements in listing windows +according to the ASCII character set. This sort order is controlled by the +@var{br-sort-options} variable which specifies the command line options +sent to the system @code{sort} command. (Under any Emacs 19 variant, +this variable is not used by the @code{br-order} command, bound to +@{@kbd{o}@}.) + +The value of this variable should be a single string of options such as +@code{-fu} (the default) or @code{nil} for no options. The @code{-f} +option folds upper and lower case to the same character for sort +comparisons. The @code{-u} option leaves only unique elements in the +listing by eliminating any duplicate entries. + +@node Customization, Standalone, Options, Top +@chapter Personal Customization + +@vindex br-skip-dir-regexps +@cindex scanning, skip directories +@cindex directory scanning +The @var{br-skip-dir-regexps} variable is a list of regular expressions +which match directory names that the OO-Browser will not descend when +scanning source code trees. + +@vindex br-file-dir-regexp +The @var{br-file-dir-regexp} variable specifies a regular expression +that matches to file and directory names that the OO-Browser should +scan. Any others, including those matched by @var{br-skip-dir-regexps}, +are ignored. + +@cindex initialization file +@cindex personal initialization +@vindex file, .br-init.el +The following hook variables are provided so that one may customize what +happens each time the OO-Browser is invoked. Set them as you would any +other Emacs Lisp hook variables in a personal OO-Browser initialization +file, @file{~/.br-init.el}. They all default to null operations. + +@vindex br-mode-hook +If you want a set of actions to occur each time after the OO-Browser is +invoked, attach them to @var{br-mode-hook}. For language-specific +actions, a language-specific hook such as @var{br-eif-mode-hook}, +or @var{br-c++-mode-hook} is run after @var{br-mode-hook}. + +@vindex br-class-list-hook +If you want a set of actions to occur after each time that a new browser +listing buffer is created, set @var{br-class-list-hook}. + + +@node Standalone, Languages, Customization, Top +@chapter Using Standalone OO-Browser Features + +A number of browser features may be used independently of the browser +user interface, assuming that a site-wide or personal OO-Browser +initialization file has been loaded into your current Emacs session. + +@kindex C-c C-o +First, an Environment must be selected and loaded into the OO-Browser +via @{@kbd{C-c C-o}@}. When the browser user interface is displayed, +use @{@kbd{q}@} to quit. + +@findex br-env-load +Alternatively, you can load an Environment without invoking the browser +user interface by using @{@kbd{M-x br-env-load @key{RET}}@}. The +standalone browser features will use the newly loaded Environment. + +@noindent +The commands that are available for standalone use include: +@table @code +@findex br-add-class-file +@item br-add-class-file +Add a file of classes to the current Environment. @xref{Adding and +Deleting Classes}.@refill + +@item br-find +@findex br-find +Interactively complete class or ELEMENT name and jump to its definition. + +@findex br-find-class +@item br-find-class +Display file of class text matching CLASS-NAME in VIEW-ONLY mode if non-nil. + +@findex br-complete-type +@item br-complete-type +Perform in-buffer completion of a type or element identifier before point. + +@findex br-class-path +@item br-class-path +Return full path, if any, to CLASS-NAME. +With optional prefix argument INSERT non-nil, insert path at point. +@end table + +All of these commands provide full completion. @xref{Completing Names}, +based upon the current OO-Browser Environment.@refill + +@findex br-find +@cindex finding an element +@cindex searching for an element +When editing and debugging code, one often wants to look at a class or +element definition without having to invoke the browser to locate it. +The @code{(br-find)} command does exactly that by prompting for a name +and then displaying for editing the class or element definition given by +that name. + +@findex br-find-class +@cindex finding a class +@cindex searching for a class +The @code{(br-find-class)} command is similar. It prompts for a class name +and then displays its source file in a viewable, read-only mode. To +display a class file in an editable mode, send a prefix argument to this +command. + +@findex br-complete-type +When writing code and entering class attribute definitions (variable +definitions), one often has to repetitively enter class names as the +static types for the attributes. The @code{(br-complete-type)} command +completes and inserts a class name at point in the current buffer. +The traditional key to bind such a command to is @{@kbd{M-@key{TAB}}@}. +The following example illustrates its usage. +@display + my_list: LIN<-- (point is here) + +@{@kbd{M-@key{TAB}}@} is hit: + + my_list: LINKED_LIST +@end display + +@findex br-class-path +The @code{(br-class-path)} command prompts for a class name and +displays the full path of the associated class source file in the +minibuffer. With a prefix argument, it inserts the path name at point +in the current buffer. + +The following key bindings are recommended when using these standalone +features: + +@kindex C-M-i +@kindex M-TAB +@kindex C-c C-f +@kindex C-c C-w +@example + @code{(define-key eiffel-mode-map "\C-c\C-f" 'br-find)} + @code{(define-key c++-mode-map "\C-c\C-f" 'br-find)} + @code{(define-key lisp-mode-map "\C-c\C-f" 'br-find)} + @code{(define-key objc-mode-map "\C-c\C-f" 'br-find)} + @code{(define-key smalltalk-mode-map "\C-c\C-f" 'br-find)} + + ;; @{@kbd{C-M-i}@} means @{@kbd{M-@key{TAB}}@}. + @code{(define-key eiffel-mode-map "\C-\M-i" 'br-complete-type)} + @code{(define-key c++-mode-map "\C-\M-i" 'br-complete-type)} + @code{(define-key lisp-mode-map "\C-\M-i" 'br-complete-type)} + @code{(define-key objc-mode-map "\C-\M-i" 'br-complete-type)} + @code{(define-key smalltalk-mode-map "\C-\M-i" 'br-complete-type)} + + @code{(define-key eiffel-mode-map "\C-c\C-w" 'br-class-path)} + @code{(define-key c++-mode-map "\C-c\C-w" 'br-class-path)} + @code{(define-key lisp-mode-map "\C-c\C-w" 'br-class-path)} + @code{(define-key objc-mode-map "\C-c\C-w" 'br-class-path)} + @code{(define-key smalltalk-mode-map "\C-c\C-w" 'br-class-path)}. +@end example + +@xref{Eiffel Specifics}, for an Eiffel-specific standalone browser +feature.@refill + +@node Languages, Features, Standalone, Top +@chapter Language-Specific Notes + +@menu +* C Specifics:: +* C++ Specifics:: +* CLOS Specifics:: +* Eiffel Specifics:: +* Java Specifics:: +* Objective-C Specifics:: +* Python Specifics:: +@end menu + +@node C Specifics, C++ Specifics, Languages, Languages +@section C Specifics + +@vindex br-c-tags-flag +@findex br-toggle-c-tags +The @var{br-c-tags-flag} variable controls whether or not C constructs +are included within C and C-based language Environments. By default, +this flag is true. Use @code{M-x br-toggle-c-tags RET} to toggle its +value. If you set it false before building an Environment, then C +constructs will not be included in the Environment. (Note that C +functions are always included in C++ Environments, regardless of this +flag value.) + +If you wish to build an Environment whose source code is entirely C, +ensure that the @var{br-c-tags-flag} is enabled and then select C++ when +asked for the language to browse. In the future, a language setting for +C will probably be added. + +C constructs are grouped into default classes for browsing. The +elements of each default class are the instances of the associated +construct within the Environment. Use normal element/feature commands +to browse each instance. + +@example + DEFAULT CLASS C CONSTRUCT + -------------------------------------- + [constant] #define constant + [enumeration] enum @{@} + [function] non-member function() + [macro] #define macro() + [structure] struct @{@} + [type] typedef @{@} + [union] union @{@} +@end example + +@node C++ Specifics, CLOS Specifics, C Specifics, Languages +@section C++ Specifics + +@xref{C Specifics}, for details on C-specific support within C++ +Environments. + +@menu +* C++ Element Selection:: Source Code Element Selection +* C++ Settings:: +@end menu + +@node C++ Element Selection, C++ Settings, C++ Specifics, C++ Specifics +@subsection Source Code Element Selection + +@cindex C++ feature listings +@cindex pure virtual function +@cindex function, pure virtual +@cindex deferred function +C++ pure virtual function declarations, which specify method interfaces +but no implementation, appear in class feature listings. The function +name is preceded by the @code{"> "} string to identify the function as a +pure virtual (deferred) function. Pure virtuals may be treated like any +other member functions within the browser. Since there is no definition +for such a function within the class in which it is listed, its +declaration will be shown instead, when requested. + +@cindex friend +@cindex function, friend +@cindex class, friend +@findex br-view-friend +@kindex V +Friend functions and friend classes give members of another class +access to the private parts of the current class. They appear +in class feature listings preceded by the @code{"% "} string. +The keys, @{@kbd{v}@} or @{@kbd{e}@}, display the friend declaration +within the current class. Use @{@kbd{V}@}, @code{(br-view-friend)} to +view the definition of the friend class or function. + +@cindex constructor +@cindex destructor +@cindex operator new +@cindex operator delete +Methods and operators associated with creating and destroying objects +are preceded by the @code{"+ "} string in listing buffers. All other +method listing entries are preceded by the @code{"- "} string. + +@cindex C++ +One can jump from a C++ declaration to its definition by clicking the +Action Key when within the declaration. Most importantly, once a class +header file is displayed, simply click on a method declaration to see +its corresponding definition. Each feature declaration should be +terminated with a semicolon to ensure accurate scanning. If the method +is inherited from another class, a message at the bottom of the frame +will describe which class the method is defined in once the browser +displays the method definition. + +Parent classes may be browsed in a similar manner by clicking on their +names in an inheritance or declaration clause. It is therefore +important to click on the method name part of a declaration when that is +the element desired. + +@vindex c++-include-dirs +@cindex #include +@cindex include files +Include files may be browsed by selecting their inclusion declarations +(#include ...) within a source file. Include files delimited by double +quotes are searched for in the following places: first, the directory of +the current source file, then the directories listed in the variable +@var{c++-include-dirs}, and then in any directories included in the +current environment. + +@vindex c++-cpp-include-dirs +Include files delimited by angle brackets are searched for in the +following places: first, the directories listed in the variable +@var{c++-include-dirs}, then the directories listed in the variable +@var{c++-cpp-include-dirs}, and then in any directories included in the +current environment. The variable @var{c++-cpp-include-dirs} should +hold a list of the standard directories searched by your C++ pre-processor. +Each directory entry must end with a directory separator. On UNIX +systems, this is the '/' character. + +@node C++ Settings, , C++ Element Selection, C++ Specifics +@subsection C++ Settings +@vindex c++-class-keyword +@cindex class definition keywords +By default, @code{class}, @code{struct} and @code{union} definitions all +constitute class definitions to the C++ OO-Browser. If you prefer some +other criteria, you will need to modify the definition of +@var{c++-class-keyword} in @file{br-c++.el}. + +@vindex c++-src-file-regexp +@cindex file suffixes +If you find that the browser is not scanning some of your C++ source +files, you may be using file suffixes which it does not recognize. +Examine the value of @var{c++-src-file-regexp} and add any special file +suffixes you use to it.@refill + +@node CLOS Specifics, Eiffel Specifics, C++ Specifics, Languages +@section CLOS Specifics + +@menu +* CLOS Method Handling:: Method Handling +* CLOS Settings:: +@end menu + +@node CLOS Method Handling, CLOS Settings, CLOS Specifics, CLOS Specifics +@subsection Method Handling +@cindex CLOS methods +@cindex CLOS types +@cindex specialized parameters +@cindex methods, specialized parameters +In CLOS, methods may have typed parameters of the form, +@code{(<parameter-name> <class>)}; these are called @dfn{specialized +parameters}. Each such parameter defines the method within +@code{<class>}. Thus, a single method definition can generate methods +associated with many classes. The OO-Browser lets you navigate to a +method definition from any of the classes for which it is defined, since +a method is included as an element of each of its constituent classes. + +CLOS permits compile-time computation of the @code{<class>} of a +specialized parameter, through use of the expression, @code{(eql +<form>)}. Since the OO-Browser cannot perform this computation, it +treats such a parameter as non-specialized. + +@cindex CLOS, the class t +Methods may also contain non-specialized parameters of the form, +@code{<parameter-name>}. The type of each such parameter defaults to +the default root class @code{t} in CLOS. But a method is only included +in the class @code{t} by the OO-Browser if none of its parameters are +specialized. Otherwise, methods with more specific types which happened +to include one or more non-specialized parameters would appear to not +have a more specific type than @code{t}. + +@node CLOS Settings, , CLOS Method Handling, CLOS Specifics +@subsection CLOS Settings +The OO-Browser automatically works with CLOS class and method +definitions. But Lisp contains many other standard object types such as +functions, macros and variables which you may wish to browse. These are +handled through a configuration variable as explained below. + +@vindex clos-element-type-alist +@cindex default class +@cindex element type +The @var{clos-element-type-alist} variable determines the Lisp definition +constructs that the browser looks for and the associated default class +under which instances of each construct type are grouped. Each element +in the association list is a cons cell whose first part is the function +name string that defines an instance of a particular type, +e.g@. @code{"defun"}. + +The second part is a default class name, a string, under which to assign +each instance of the type, e.g@. @code{"function"}. The OO-Browser +always displays default class names with square brackets around them, +e.g@. @code{[function]}, to distinguish them from classes defined within +the Environment. + +@noindent +Here is the default @var{clos-element-type-alist} setting: + +@example + '(("defconstant" . "constant") + ("defconst" . "constant") + ("defun" . "function") + ("defgeneric" . "generic") + ("defmacro" . "macro") + ("defpackage" . "package") + ("defparameter" . "parameter") + ("defsetf" . "setfunction") + ("defstruct" . "structure") + ("deftype" . "type") + ("defvar" . "variable") + ("fset" . "function")) +@end example + +@vindex clos-def-form-with-args-regexp +The @var{clos-def-form-with-args-regexp} is a regular expression which +includes a subset of the definition symbol names from +@var{clos-element-type-alist}, namely those which require an argument +list to uniquely distinguish them from other elements, e.g@. functions. + + +@node Eiffel Specifics, Java Specifics, CLOS Specifics, Languages +@section Eiffel Specifics + +Eiffel support has now been updated to Eiffel version 3, to the best +of our knowledge. If you find any problems, please report them +to <oo-browser@@hub.ucsb.edu> (this is a public mailing list). + +@menu +* Eiffel Listings:: +* Eiffel Element Selection:: Source Code Element Selection +* Eiffel Settings:: +@end menu + +@node Eiffel Listings, Eiffel Element Selection, Eiffel Specifics, Eiffel Specifics +@subsection Eiffel Listings + +Eiffel entities are categorized when shown within OO-Browser listing +buffers. Classes are shown by name, without any prefix. Features +are shown by name but are preceded by a special character that indicates +the kind of feature. The following table describes each prefix. + +@table @code +@item - +precedes regular routines; +@item = +precedes attributes; +@item 1 +precedes once routines, which create shared objects; +@item > +precedes deferred features, which are specified but not defined within +this class; +@item / +precedes external features, which are defined in a non-Eiffel language. +@end table + +@node Eiffel Element Selection, Eiffel Settings, Eiffel Listings, Eiffel Specifics +@subsection Source Code Element Selection +@cindex Eiffel +One can jump from an Eiffel element reference to its definition by +clicking the Action Key when within the reference. Selection of a +feature name in an export clause displays the feature definition, even +if it is renamed several times within ancestors. Parent classes may be +browsed in a similar manner by clicking on their names in an inheritance +or declaration clause. + +The following example of locating a renamed feature is taken from an +actual set of Eiffel library classes: + +@example +User selects feature @code{subwindow} of @code{POPUP_MENU} + inherited from @code{WINDOW} which renames @code{child} as @code{subwindow} + inherited from @code{TWO_WAY_TREE} which renames @code{active} as @code{child} + inherited from @code{TWO_WAY_LIST} + inherited from @code{LINKED_LIST} which defines @code{active}. +@end example + +The browser would display the feature @code{active} and explain to the +user that feature @code{subwindow} of class @code{POPUP_MENU} is +inherited from feature @code{active} of class @code{LINKED_LIST}. +Location of this sort of feature definition would be incredibly tedious +without programmatic support. + +The algorithm used to locate features is dynamic, so if another class +were inserted into the inheritance structure given above, the feature +definition would still be located properly. + +@node Eiffel Settings, , Eiffel Element Selection, Eiffel Specifics +@subsection Eiffel Settings + +@findex eif-get-parents-from-source +Be sure that the 'inherit' and 'feature' clauses in your classes begin in +column 0; otherwise the browser parser will not work properly. If you prefer +some other indentation style, you will need to slightly alter +@code{(eif-get-parents-from-source)} in @file{br-eif.el}; specifically, +the lines that contain '^inherit' and '^feature'. + +@cindex Eiffel, error parsing +@cindex error parsing +Emacs has a feature called error parsing which lets one quickly jump to +the line of code that supposedly triggered an error. +(@xref{Compilation, ,Compilation Errors, emacs, The Gnu Emacs Manual}, +for information on error parsing.) Some object-oriented language +compilers display the name of the class and line number with each error +message but do not include the filename containing the class source +code. Emacs then has no way of parsing the error message. The browser +class location facilities enable one to perform error parsing across any +set of classes in a single Environment, given only this type of +message. Interactive Software Engineering's Eiffel compiler is an +example of a compiler that produces this type of error. The code for +parsing these Eiffel error messages is included in +@file{eif-ise-err.el}.@refill + +@node Java Specifics, Objective-C Specifics, Eiffel Specifics, Languages +@section Java Specifics + +@cindex Java feature listings +@cindex abstract method +@cindex method, abstract +@cindex deferred function +Java abstract method declarations, which specify method interfaces +but no implementation, appear in class feature listings. The method +name is preceded by the @code{"> "} string to identify the method as an +abstract (deferred) method. Abstract methods may be treated like any +other methods within the browser. Since there is no definition +for such a method within the class in which it is listed, its +declaration will be shown instead, when requested. + +@cindex native method +@cindex method, native +Native methods are like abstract methods in that only their interfaces +are specified in Java. Unlike abstract methods, their method bodies are +defined in external languages such as C to allow for machine-specific +dependencies. Native methods are listed in the browser prefixed by the +@code{"/ "} string, indicating that they are divided between Java and +another language. + +@cindex constructor +@cindex destructor +Methods associated with creating and destroying objects +are preceded by the @code{"+ "} string in listing buffers. All other +method listing entries are preceded by the @code{"- "} string. + +@vindex Java-class-keyword +@cindex class definition keywords +Java interface specifications, which specify protocols to which classes +must conform, are treated just like class definitions in browser +listings. All the methods of such interfaces are abstract, however. + +@node Objective-C Specifics, , Java Specifics, Languages +@section Objective-C Specifics + +@xref{C Specifics}, for details on C-specific support within Objective-C +Environments. + +The OO-Browser supports browsing Objective-C classes, methods, +categories and formal protocols. Earlier sections of this manual explain +how to browse these entities. This section documents Objective-C +language specifics, including variable settings. + +Objective-C entities are categorized when shown within OO-Browser listing +buffers. Classes are shown by name, without any prefix. Methods +are shown by name but are preceded by a special character that indicates +the kind of method. The following table describes each prefix. + +@table @code +@item - +precedes instance methods; +@item + +precedes class (factory) methods that affect the factory object for the +class. +@end table + +@menu +* Objective-C Categories:: +* Objective-C Protocols:: +* Objective-C Element Selection:: Source Code Element Selection +* Objective-C Settings:: +@end menu + +@node Objective-C Categories, Objective-C Protocols, Objective-C Specifics, Objective-C Specifics +@subsection Objective-C Categories +@cindex category +@cindex Objective-C category +An @dfn{Objective-C category} is an internal class grouping that +specifies and implements a set of related class features. The +aggregation of all of the categories defined by a class and its +ancestors represents the complete class definition. + +The OO-Browser can list and browse the source for: the categories of a +class, all class categories in an Environment, and the classes which +implement a category. @xref{Browsing Categories}, for details. + +@node Objective-C Protocols, Objective-C Element Selection, Objective-C Categories, Objective-C Specifics +@subsection Objective-C Protocols +@cindex protocol +@cindex Objective-C protocol +An @dfn{Objective-C protocol} is an interface specification to which a +class may conform. The protocol includes a set of method signatures +which any conforming class must implement. One protocol may inherit +from a list of other protocols, and thus expand the set of methods which +a conforming class must implement. The OO-Browser can list and browse +the source for: the protocols to which a class conforms, all protocols +in an Environment, and the implementors of a protocol. @xref{Browsing +Protocols}, for details. + +@node Objective-C Element Selection, Objective-C Settings, Objective-C Protocols, Objective-C Specifics +@subsection Source Code Element Selection +@cindex Objective-C +One can jump from an Objective-C declaration to its definition by +clicking the Action Key when within the declaration. Most importantly, +once a class header file is displayed, simply click on a method +declaration to see its corresponding definition. If the method is +inherited from another class, a message at the bottom of the frame will +describe which class the method is defined in once the browser displays +the method definition. + +Parent classes may be browsed in a similar manner by clicking on their +names in an inheritance or declaration clause. It is therefore +important to click on the method name part of a declaration when that is +the element desired. + +@vindex objc-include-dirs +@cindex #import +@cindex include files +Include files may be browsed by selecting their inclusion declarations +(#import ...) within a source file. Include files delimited by double +quotes are searched for in the following places: first, the directory of +the current source file, then the directories listed in the variable +@var{objc-include-dirs}, and then in any directories included in the +current environment. + +@vindex objc-cpp-include-dirs +Include files delimited by angle brackets are searched for in the +following places: first, the directories listed in the variable +@var{objc-include-dirs}, then the directories listed in the variable +@var{objc-cpp-include-dirs}, and then in any directories included in the +current environment. The variable @var{objc-cpp-include-dirs} should +hold a list of the standard directories searched by your Objective-C +pre-processor. Each directory entry must end with a directory +separator. On UNIX systems, this is the '/' character. + +@node Objective-C Settings, Python Specifics, Objective-C Element Selection, Objective-C Specifics +@subsection Objective-C Settings +@vindex objc-class-keyword +@cindex class definition keywords +By default, the @code{@@interface} keyword indicates a class definition to the +Objective-C OO-Browser. If you prefer some other criteria, you will need to +modify the definition of @var{objc-class-keyword} in @file{br-objc.el}. + +@vindex objc-src-file-regexp +@cindex file suffixes +If you find that the browser is not scanning some of your Objective-C +source files, you may be using file suffixes which it does not +recognize. Examine the value of @var{objc-src-file-regexp} and add any +special file suffixes you use to it.@refill + + +@node Python Specifics, Python Module Lookup, Objective-C Settings, Languages +@section Python Specifics + +The OO-Browser supports browsing Python classes, methods, and +documentation strings for both. The class info key 'i' is used to +display class or method documentation string, if that is available. + +Python methods appear in class feature listings. The method +name is preceded by the @code{"- "} string. + +Global functions are grouped under the imaginary class @code{[functions]} to +distinguish them from classes or class methods. + +Known bugs: nested classes are not recognized. As browsing is based on +analyzing the source code, run-time modifications are lost. + +@menu +* Python Module Lookup:: Source Code Element Selection +* Python Settings:: +@end menu + +@node Python Module Lookup, Python Settings , Python Specifics, Python Specifics +@subsection Python Module Lookup + +The @file{br-help-ms} file uses a table format to summarize mouse +control within the browser, it may be displayed within the browser via +the @{@kbd{H}@} @code{(br-help-ms)} command. + +Clicking on a module name in an import statement using the Action Key +will open the specified module, if it is found in the search path. + +@node Python Settings, , Python Module Lookup, Python Specifics +@subsection Python Settings +@vindex python-import-dirs +@cindex class definition keywords +When a module name in an import statement is clicked using +the Action Key, OO-Browser tries to open the module.py file. By default, +it looks for the module file in the environment directories, and from the path +@code{/usr/local/lib/python}. If you have installed Python libraries +elsewhere, or wish to include other modules in the search path, you will +need to modify the definition of @var{python-import-dirs} in +@file{br-python-ft.el}. + +@c *************************** +@c Appendices +@c *************************** + + +@node Features, Commands, Languages, Top +@c node-name, next, previous, up +@appendix OO-Browser Features + +@itemize @bullet + +@item +Support for Eiffel, C++, Objective-C, Smalltalk, Java and Common Lisp +and its Object System (CLOS) is included. Additionally, support for +browsing large amounts of material in Info format by node name (a +popular online documentation format with cross references and +hierarchical structure) is include. All languages provide class +browsing via either a textual or a graphical interface. + +@item +Method browsing is supported for C++, Objective-C, Eiffel and CLOS. +CLOS supports browsing all elements defined with (def* constructs. +In-source feature browsing is also supported for all of these languages. +One simply selects a feature name to jump to its corresponding source. +Method name overloading in C++ and inherited feature renaming in Eiffel +are fully supported. + +@item +C code browsing is supported for C++, Objective-C and C source code. +@item +Objective-C category and formal protocol browsing are supported. + +@item +C++ parameterized template classes and methods are supported. + +@item +Building Environments is fast compared to many other tools and browser +startup once an Environment has been built is very fast. Response times +on workstations are excellent; for example, in one test case, less than +two real seconds were required to display a set of complex inheritance +graphs involving over 400 classes. + +@item +Class inheritance networks may be displayed. Either a single +inheritance level (parents or children) or the entire inheritance +network (ancestors or descendants) for a set of classes may be shown. + +@cindex multiple inheritance +@item +Multiple inheritance support is built-in, where applicable. + +@item +The user need not know the location of class source; the browser will display +or edit a class source based solely upon its class name. + +@item +Immediate switching among languages is allowed. One can switch from Eiffel +browsing to C++ browsing in an instant, if so desired. Or simply run two +browsers side by side. + +@item +Class files may be added, replaced or deleted one at a time or as a +group by specifying a root directory below which all class files are +found, including those in subdirectories. + +@item +The browser uses class source code only, hence no compiler is necessary for +proper browser operation. + +@item +Library (stable) and System (in development) classes may be maintained and +listed separately or together. Any number of Libraries and Systems may be +combined for listing in a single Environment. There are no fixed limits +on the number of classes per Environment nor on the number of +Environments that may be browsed. + +@item +The number of listing windows is limited only by the frame width and +the width setting used for listing windows. + +@item +Statistics on classes and Environments may be displayed. + +@item +Language-specific class information may be shown. Presently this feature is +supported only for Eiffel. A listing of class parents, attributes, +routines and best guess (highly accurate) list of routine calls may be +displayed. Outputs from the Eiffel 'short' and 'flat' commands may also be +shown. + +@item +Machine-independent mouse support is included along with an extremely +intuitive point and click interface. The OO-Browser is pre-configured +for use with the X window system, NEXTSTEP, Sunview or Apollo's DM +window system under InfoDock, Emacs V19, XEmacs, Epoch, and Emacs V18. + +@item +Popup and pulldown command menus are available under InfoDock, Emacs V19 +and XEmacs. + +@item +All browser outputs are text which may be edited as desired or saved to +files. + +@item +A single key provides ASCII ordering of class names, ascending or +descending, including those from inheritance trees. Classes may be +easily located by matching a regular expression or string to the set of +class names in an Environment, with repeated searches incrementally +narrowing the selected set. + +@item +Browser functions may be used standalone within the editor without using +the multi-windowed browser interface. One useful example is to point to +a class name such as a parent class in the text of another class and +have the parent's source appear in an editable fashion. An alternative +editor and viewer may be selected to adapt the browser to personal +taste. + +@cindex CLOS +@item +The browser is adaptable to any class-based object-oriented language. +It works best with languages that focus on static class creation such as +Eiffel and C++. Those that use dynamic (runtime) class creation such as +CLOS must be interfaced to the browser so that classes created at runtime +are added to the browser's Environment. + +@cindex GNU Emacs +@cindex UNIX +@item +The OO-Browser is integrated with the powerful GNU Emacs editor; it works on +any UNIX system display supported by Emacs. Most browser commands may +be executed by direct selection, providing a very natural interface. + +@cindex source code +@item +All source code, over 400 kilobytes, is included and is heavily documented. +@end itemize + + +@node Commands, Glossary, Features, Top +@appendix OO-Browser Command Descriptions + +@c Call {M-x doc} to insert documentation in table. +@c Call (br-cmd-doc t) to remove documentation from table. + +@cindex arguments +@cindex formal arguments +@cindex programming +The following documentation is meant for programmers who want to modify +the OO-Browser but is included here since some users of the OO-Browser +may find it useful. All commands that are bound to keys and that are +specific to the OO-Browser are listed here. Within each command +description, identifiers shown in all capitals are the names of the +command's formal arguments; all formal arguments are presented in the +order in which they are required by the command. If a command takes +optional arguments, the first optional argument is labeled +@emph{optional}; all following arguments are assumed to be optional. + +@cindex command documentation +@cindex OO-Browser commands +@table @code + +@findex br-add-class-file +@item br-add-class-file @{@kbd{C-c ^}@} +Adds a file of classes to the current Environment. Interactively or +when optional CLASS-PATH is nil, defaults to current buffer file as +CLASS-PATH. If optional LIB-TABLE-P is non-nil, add to Library +Environment, otherwise add to System Environment. If optional SAVE-FILE +is t, the Environment is then stored to the filename given by +@var{br-env-file}. If SAVE-FILE is non-nil and not t, its string value +is used as the file to which to save the Environment. + +@findex br-ancestors +@item br-ancestors @{@kbd{a}@} +Display ancestor tree whose root is the current class. With optional +prefix ARG, display all ancestor trees whose roots are visible classes +at the current level. ARG = -1 inverts current class ancestry tree. +That is, it shows branches going down towards the root class, so that +parents appear above children. ARG < -1 inverts all ancestry trees. + +@findex br-at +@item br-at @{@kbd{@@}@} +Display current class location in the inheritance graph. +The class is displayed among both its ancestors and descendants. +With optional prefix ARG, display location for all visible classes at the +current level. + +@findex br-buffer-menu +@item br-buffer-menu @{@kbd{b}@} +Display selection list of buffers with attached files in viewer window. + +@findex br-children +@item br-children @{@kbd{c}@} +Display children of current class. With optional prefix ARG, display +children of all visible classes at the current level. + +@findex br-class-stats +@item br-class-stats @{@kbd{M-c}@} +Display statistics summary for current class. Optional prefix arg +PROMPT means prompt for class name. + +@findex br-copyright +@item br-copyright +@cindex copyright +Display browser copyright information in viewer window. + +@findex br-count +@item br-count @{@kbd{#}@} +Count number of classes visible in current listing buffer. Print +text result in minibuffer when called interactively. + +@findex br-delete +@item br-delete @{@kbd{C-c C-d}@} +Delete class from current Environment. Optional prefix arg PROMPT means +prompt for class name. + +@findex br-descendants +@item br-descendants @{@kbd{d}@} +Display descendant tree whose root is the current class. With optional +prefix ARG, display all descendant trees whose roots are visible classes +at the current level. + +@findex br-edit-entry +@item br-edit-entry @{@kbd{e}@} +Edits source for any browser listing entry, such as a class or a feature. +Optional prefix arg PROMPT means prompt for entry name. + +@findex br-env-create +@item br-env-create @{@kbd{C-c C-c}@} +Create and save the specification of a new OO-Browser Environment. +Interactively prompt for the Environment file name or use optional +ENV-FILE. Interactively prompt for the Environment language to use or +use optional LANG-PREFIX as language indicator. Return the name of the +Envir spec file created. Do not build the Environment. Use +'br-env-build' to construct an Environment from its specification. + +@findex br-env-load +@item br-env-load @{@kbd{C-c C-l}@} +Load browser Environment or spec from optional ENV-FILE or 'br-env-file'. +Non-nil PROMPT means prompt user before building tables. +Non-nil NO-BUILD means skip build of Environment entirely. +Return t if load is successful, else nil. + +@findex br-env-rebuild +@item br-env-rebuild @{@kbd{C-c C-e}@} +Rescan System and Library sources associated with the current Environment. + +@findex br-env-save +@item br-env-save @{@kbd{C-c C-s}@} +Save changed Environment to file given by optional SAVE-FILE or +'br-env-file'. + +@findex br-env-stats +@item br-env-stats @{@kbd{M-e}@} +Display summary for current Environment in viewer window. +With optional prefix ARG, display class totals in minibuffer. + +@findex br-exit-level +@item br-exit-level @{@kbd{x}@} +Return to prefix ARGth previous inheritance level listing. +The command is ignored with ARG < 1. + +@findex br-find +@item br-find +Interactively completes class or feature ELEMENT-NAME and jumps to its definition. +Returns ELEMENT-NAME or signals an error. + +@findex br-feature-signature +@item br-feature-signature @{@kbd{F}@} +Show full feature signature in the view window. +With optional prefix ARG, display signatures of all features from the +current buffer. + +@findex br-help +@item br-help @{@kbd{h}@} +Display browser operation help information in viewer window. + +@findex br-help-ms +@item br-help-ms @{@kbd{H}@} +Display browser mouse usage help information in viewer window. + +@findex br-entry-info +@item br-entry-info @{@kbd{i}@} +Display attributes of the current entry in the viewer window. + +@findex br-implementors +@item br-implementors @{@kbd{I}@} +Display hierarchy of classes that define current feature. Ignore +inherited features. With optional prefix ARG, display implementors of +all features at the current level. + +@findex br-kill +@item br-kill @{@kbd{C-c C-k}@} +Kill buffer in viewer window and redisplay help text. + +@findex br-lib-top-classes +@item br-lib-top-classes @{@kbd{l}@} +Display list of top level Library classes. With prefix ARG, display all +Library classes. + +@findex br-lib-rebuild +@item br-lib-rebuild @{@kbd{L}@} +Rescan Library components of the current Environment. + +@findex br-match +@item br-match @{@kbd{m}@} +Show all class names in current Environment that contain optional EXPR. +Nil value of EXPR means prompt for a value. With optional prefix ARG, EXPR +is treated as a string. By default, it is treated as a regular expresion. +AGAIN non-nil shows the number of classes MATCHED from the last search, +allowing repeated narrowing of the search set. Empty EXPR when AGAIN is nil +matches to all classes in the Environment. + +@findex br-match-entries +@item br-match-entries @{@kbd{M}@} +Show all entries in current listing that contain optional EXPR. +Nil value of EXPR means prompt for a value. With optional prefix ARG, EXPR +is treated as a string. By default, it is treated as a regular expresion. +AGAIN non-nil means show the number of entries MATCHED from last search, +allowing repeated narrowing of the search set. Empty EXPR when AGAIN is nil +matches to all entries in the listing. + +@findex br-next-entry +@item br-next-entry @{@kbd{C-n}@} +Move point vertically down prefix ARG number of lines in listing +buffer. + +@findex br-order +@item br-order @{@kbd{o}@} +Order current browser listing window entries. +With prefix ARG other than 1 (the default), don't remove leading space from +entry lines before ordering. Negative ARG means order in descending Ascii +sequence, otherwise order in ascending sequence. + +@findex br-parents +@item br-parents @{@kbd{p}@} +Display parents of current class. With optional prefix ARG, display +parents of all visible classes at the current level. + +@findex br-prev-entry +@item br-prev-entry @{@kbd{C-p}@} +Move point vertically up prefix ARG number of lines in listing +buffer. + +@findex br-quit +@item br-quit @{@kbd{q}@} +Quit browser. With optional prefix ARG, delete window configurations +and listing buffers associated with the browser. + +@findex br-refresh +@item br-refresh @{@kbd{C-c C-r}@} +Restore OO-Browser to its state upon startup. + +@findex br-resize-narrow +@item br-resize-narrow @{@kbd{C-x -}@} +Resize listing windows so are narrower by 10 characters. + +@findex br-resize-widen +@item br-resize-widen @{@kbd{C-x +}@} +Resize listing windows so are wider by 10 characters. + +@findex br-features +@vindex br-inherited-features-flag +@item br-features @{@kbd{f}@} +Display features/elements of the current class (prefix ARG = 1) or of +the current listing if ARG is other than 0 or 1. + +With ARG = 0, the value of the variable, @var{br-inherited-features-flag}, +is toggled and no other action is taken. + +If @var{br-inherited-features-flag} is @code{t}, all features of each +class are shown. If @code{nil}, only lexically included features are +shown and if the features of a single class are requested and none are +defined, the class definition is displayed so that its feature +declarations may be browsed. + +@findex br-sys-rebuild +@item br-sys-rebuild @{@kbd{S}@} +Rescan System components of the current Environment. + +@findex br-sys-top-classes +@item br-sys-top-classes @{@kbd{s}@} +Display list of top level System classes. +With prefix ARG, display all System classes. + +@findex br-to-from-viewer +@item br-to-from-viewer @{@kbd{C-c C-v}@} +Move point to viewer window or back to last recorded listing +window. + +@findex br-toggle-keep-viewed +@vindex br-keep-viewed-classes +@item br-toggle-keep-viewed +Toggle the value of the @var{br-keep-viewed-classes} flag. + +@findex br-top-classes +@item br-top-classes @{@kbd{t}@} +Display list of top level classes. +With prefix ARG, display all Environment classes. + +@findex br-unique +@item br-unique @{@kbd{u}@} +Eliminate adjacent duplicate entry names from the current listing window. +If two adjacent entries look the same one is eliminated, even if they refer +to different class elements. + +@findex br-version +@item br-version @{@kbd{C-c #}@} +Display browser version number. + +@findex br-view-entry +@item br-view-entry @{@kbd{v}@} +Displays source for any browser listing entry. +Optional prefix arg PROMPT means prompt for entry name. + +@findex br-view-friend +@item br-view-friend @{@kbd{V}@} +With point on a friend listing entry, view its source code definition. +With optional OTHER-WIN non-nil, display in another window. +With optional SIG-AT-POINT-FLAG non-nil, assume point is within a friend +signature in a source buffer. + +@findex br-view-full-frame +@item br-view-full-frame @{@kbd{1}@} +Use full frame to display contents of viewer window. + +@findex br-viewer-scroll-down +@item br-viewer-scroll-down @{@kbd{DEL}@} +Scroll viewer window downward ARG lines or a windowful if no ARG. + +@findex br-viewer-scroll-up +@item br-viewer-scroll-up @{@kbd{SPC}@} +Scroll viewer window upward ARG lines or a windowful if no ARG. + +@findex br-where +@item br-where @{@kbd{w}@} +Display in minibuffer and return full path of a browser listing entry. +Optional prefix arg PROMPT means prompt for entry name." + +@findex br-write-buffer +@item br-write-buffer @{@kbd{C-c C-w}@} +Write narrowed portion of current browser buffer to a file. + +@findex br-tree +@item br-tree @{@kbd{M-d}@} +Start the @file{xbr} application with descendency tree of current class. +With optional prefix ARG, a descendency tree for each class in current +buffer. + +@findex br-tree-graph +@item br-tree-graph @{@kbd{M-g}@} +Start the appropriate tree application with the tree from current +listing buffer. + +@findex br-tree-kill +@item br-tree-kill @{@kbd{M-k}@} +Prompt user whether to kill all @file{xbr} sub-processes. + +@findex br-tree-features-toggle +@item br-tree-features-toggle @{@kbd{M-f}@} +Toggle between showing features and hiding them when @code{br-tree} is +invoked to display descendants graphically. + +@end table + + +@c *************************** +@c Unnumbered Chapters +@c *************************** + +@node Glossary, References, Commands, Top +@unnumbered Glossary + +Concepts pertinent to operational usage of the OO-Browser are defined here. + +If some GNU Emacs terms are unfamiliar to you, see @cite{[Stallman 87]}. + +@table @code +@item Ancestors +All classes above a class in the inheritance hierarchy.@refill + +@item Category +Under most languages, a logical grouping of related classes. The +OO-Browser does not yet have any support for this kind of category. + +Under Objective-C, a partial class definition that implements a related +set of methods. The full class definitions is formed from the +conjunction of all of the class' categories. The OO-Browser supports +Objective-C category browsing.@refill + +@item Children +First level of classes below a class in the inheritance hierarchy. Those +that directly inherit from a class.@refill + +@item Class +A category from which object instances are created. The OO-Browser +can display classes along with their elements, categories and formal +protocols. + +@item Class at Point +Class name in a listing buffer whose name appears on the same line as +point.@refill + +@item Declaration +A specification of a programatic entity, for reference by other parts of +a program. See also @code{Definition}. The declaration of a method +specifies its signature but not its body.@refill + +@item Default Class +A class that the OO-Browser creates to simplify browsing a particular +category of objects such as class protocols or global functions. +Default class names begin and end with square bracket delimiters, as in +@code{[protocol]}.@refill + +@item Definition +Programmatic definition of an entity, e.g@. defining the body of a +method. + +@item Completion +The act of filling in the non-ambiguous part of a requested item, such +as a class name or a file name.@refill + +@item Decendants +All classes below a class in the inheritance hierarchy.@refill + +@item Element +A feature or an instance of a class. + +@item Environment +A series of browser lookup tables and control variables that specify the set +of classes and inter-class relationships with which the browser works.@refill + +@item Environment File +A file used to store browser Environments.@refill + +@item Environment Specification +Unambiguously tells the browser what to include in the construction of +an Environment.@refill + +@item Feature +An element (method/attribute/component) of a class. + +@item Formal Protocol +See @code{Protocol}.@refill + +@item Implementor +A class in which a particular element is defined. This does not include +classes which inherit an element. + +@item Initialization File +See @code{Personal Initialization File}.@refill + +@item Instance +An object which has a particular class as its type. The class serves as +a template for instance creation. + +@item Library Classes +Stable, seldomly changed classes that have been released for general +usage.@refill + +@item Listing Window +One of a number of browser windows used to display lists of classes. +Inheritance relations are shown by class name indentation and by the class +level numbers in the listing buffer mode lines.@refill + +@item Lookup Table +A store used to help the browser quickly determine inter-class +relationships.@refill + +@item Member +See @code{Feature}. + +@item Method +A callable function defined within one or more classes. + +@item Minibuffer Window +The single line window at the bottom of an Emacs frame. It is used to +interact with the user by displaying messages and prompting for +input.@refill + +@item Parents +First level of classes above a class in the inheritance hierarchy. Those +from which a class directly inherits.@refill + +@vindex file, .br-init.el +@item Personal Initialization File +The optional file, @file{~/.br-init.el}, which sets user-specific +options affecting operation of the OO-Browser, thereby configuring the +browser for personal use.@refill + +@item Point +The point in the current buffer in front of the character which the Emacs +cursor is over but after any prior character.@refill + +@item Protocol +An interface specification to which a class conforms. Some languages +use abstract classes for this purpose. Under Objective-C, one may also +define formal protocols which include a set of method signatures which a +class must implement if it conforms to the protocol. Also under +Objective-C, one protocol may inherit from a list of other protocols, +and thus expand the set of methods which a conforming class must +implement. + +@item Routine +See @code{Method}. + +@item Signature +An interface specification for a method. It includes the method's +class, type of return value and the types of its formal parameters. + +@item Smart System +The Smart System is another handy program that helps you to work smarter +and faster. It consists of two parts, the Smart Key System, a direct +manipulation keyboard interface that gives you control of most GNU Emacs +subsystems by using only two keys, and the Smart Menu System. This +provides a hierarchy of menus within Emacs that you use instead of +keyboard commands. Just point and click on a menu entry. One of its +uses is to invoke the OO-Browser on any desired language Environment. +(The Smart Key System is included with the Smart Menu System.)@refill + +@item Smart Menu System +See @code{Smart System}. + +@item System Classes +Classes still in development whose interfaces are likely to change. +They are typically part of a specific project and are often not meant to +be reused elsewhere.@refill + +@item Top-Level Classes +Classes without parents. Those at the top of the inheritance tree for a +given Environment.@refill + +@item Viewer Window +The largest, bottom-most window in the browser used for displaying class +source and help information.@refill +@end table + + +@node References, Keys, Glossary, Top +@unnumbered References + +@table @b +@item [Meyer 88] +Meyer, Bertrand. Object-oriented Software Construction. Prentice Hall +International: UK, 1988. + +@item [Meyer 89] +Meyer, Bertrand. Eiffel: The Language. Interactive Software +Engineering: Santa Barbara, CA, 1989. (Also being republished by +Prentice Hall.) + +@item [Goldberg 83] +Goldberg, Adele and David Robson. @emph{Smalltalk-80: The Language and +its Implementation}. Addison-Wesley, 1983.@refill + +@item [Stallman 87] +Stallman, Richard. @emph{GNU Emacs Manual}. Free Software Foundation, +Cambridge: MA, March 1987.@refill + +@item [Java 95] +@emph{The Java Language Specification}. Sun Microsystems Computer +Corporation, Mountain View, CA, February 1, 1995.@refill +@end table + + +@c *************************** +@c Indices +@c *************************** + +@node Keys, Command Index, References, Top +@unnumbered Key Binding Index + +@printindex ky + +@node Command Index, Concepts, Keys, Top +@unnumbered Command and Variable Index + +@printindex fn + +@node Concepts, , Command Index, Top +@unnumbered Concept Index + +@printindex cp + +@page +@page +@summarycontents +@contents +@bye + +@c Locl Variables: ;;; +@c eval: (progn (load "cmd-doc") (defun doc () (interactive) (br-cmd-doc) (save-buffer))) ;;; +@c End: ;;;