Commits

Anonymous committed aea8b4f

ECB 1.80 moved here from my unsupported area.

Comments (0)

Files changed (23)

+_pkg.el
+auto-autoloads.el
+custom-load.el
+package-info
+pdepends.mk
+ecb*.info*
+ecb*.html
+2002-11-08  Ville Skyttä  <scop@xemacs.org>
+
+	* Moved to xemacs-packages from unsupported/scop/
+
+	* Makefile (CATEGORY): Change to standard.
+	(MAINTAINER): Change to Klaus.
+	* package-info.in (distribution): Change to xemacs.
+
+2002-10-14  Ville Skyttä  <scop@xemacs.org>
+
+	* Makefile (MANUAL): Remove (unused).
+	(VERSION): Bump to 0.99.
+	(srckit): Remove.
+
+2002-09-22  Ville Skyttä  <scop@xemacs.org>
+
+	* Makefile: Include texi stuff in build.
+	(VERSION): Bump to 0.04.
+
+2002-08-13  Ville Skyttä  <scop@xemacs.org>
+
+	* Sync with upstream version 1.80.
+
+2002-08-11  Ville Skyttä  <scop@xemacs.org>
+
+	* Makefile (REQUIRES): Add xemacs-devel.
+	(VERSION): Bump to 0.02.
+
+2002-06-21  Ville Skyttä  <scop@xemacs.org>
+
+	* ecb.el (ecb-activate): Add autoload cookie.
+	* ecb.el (ecb-minor-mode): Ditto.
+	* ecb.el.upstream: New file.
+	* Makefile (all): Put auto-autoloads.elc back.
+
+2002-06-21  Ville Skyttä  <scop@xemacs.org>
+
+	* Makefile (all): Remove auto-autoloads.elc.
+
+2002-06-20  Ville Skyttä  <scop@xemacs.org>
+
+	* Makefile: Include XEmacs.rules the official way.
+	* Makefile (STAGING): Removed.
+
+2002-06-17  Ville Skyttä  <scop@xemacs.org>
+
+	* package-info.in (distribution): Change to unsupported.
+
+2002-06-14  Ville Skyttä  <scop@xemacs.org>
+
+	* Makefile (CATEGORY): Change to unsupported.
+
+2002-06-09  Ville Skyttä  <scop@xemacs.org>
+
+	* First cut at an XEmacs package.
+
+Version 1.80:
+-------------
+
+- ECB now requires:
+  + Latest stable release of semantic: Version 1.4
+  + Latest stable release of eieio: Version 0.17
+  ECB checks at start-time if the correct versions are available and if not
+  ECB offers you to download and install them from within Emacs. After this
+  you have only to restart Emacs and you are fine. (Klaus)
+
+- Byte compiling ECB either interactive with `ecb-byte-compile' or with the
+  supplied Makefile now checks also the versions of semantic and eieio.
+  (Klaus)
+
+- ECB now displays the section "First steps" of the online-manual after
+  activating first time. (Klaus)
+
+- Now the adviced versions of `delete-window' and `delete-other-windows' can
+  also handle the optional WINDOW argument of the original versions correctly
+  so the adviced versions now also work correct if called from program (Klaus).
+
+- New adviced window command: `delete-windows-on' now works correct with ECB.
+  See `ecb-advice-window-functions'. (Klaus)
+
+- In the ECB-directories buffer now F4 adds a new source-path instead of F1.
+  That is because F1 is such an important key in many OS and tools (e.g. opens
+  help in all windows-programs), so ECB should not hardly "rebind" it. (Klaus)
+
+- Enhancing the option 'ecb-window-sync': Now the synchronisation can take
+  place for all buffers which have a relation to files AND directories, i.e.
+  now also for dired-buffers. But per default this is switched off, see the
+  doc-string. (Klaus)
+
+- Now the ECB online help is available in the standard Info-format and also in
+  HTML-format. With the new option 'ecb-show-help-format' you can choose which
+  format is used by the function 'ecb-show-help'. (Klaus)
+
+- New feature and command: ecb-download-ecb. With this function you can
+  download and install any arbitrary ECB-version from the ECB-website from
+  within Emacs. This is especially usefull for upgrading to the latest
+  version. (Klaus)
+
+- New debug mode for ECB which prints some debug informations in the message
+  buffer for certain critical operations with semantic-overlays/extends.
+  New option 'ecb-debug-mode' (also available in the Help-menu of ECB).
+  (Klaus)
+
+- Some default keybindings have changed; see `ecb-key-map'. (Klaus)
+
+- New feature: Possibility to define a sequence of layouts with new option
+  `ecb-toggle-layout-sequence' and toggle very fast between them via
+  `ecb-toggle-layout'. Read the online-help section "Simulation a speedbar
+  without an extra frame"! (Klaus).
+
+- Fixed: Now no empty tooltips are displayed if mouse moves over nodes in the
+  tree-buffers of ECB which can be displayed completely in the tree-window.
+  (Klaus)
+
+- Two new hooks: ecb-hide-ecb-windows-hook and ecb-show-ecb-windows-hook. Read
+  the documentation. (Klaus)
+  Suggested by Daniel Hegyi <daniel_hegyi@hotmail.com>
+
+- Fixed a bug: Sometimes there occurs a a "wrong-type-argument"-error (or
+  "destroyed extent"-error with XEmacs) under some circumstances. Now ECB
+  auto-reparses the buffer and after that ECB is in correct state again.
+  (Klaus)
+
+- Two new options: ecb-major-modes-activate and ecb-major-modes-deactivate.
+  Allow (de)activation of ECB on major-mode base. Instead of deactivation also
+  just hiding the ECB-windows is possible. Read the docstrings. (Klaus)
+  Suggested by Daniel Hegyi <daniel_hegyi@hotmail.com>
+
+- Redefining of the option 'ecb-compile-window-temporally-enlarge': Now you
+  can specify that the compile-window is auto. enlarged after selecting it and
+  auto. shrinked after leaving it. Read the docstring! (Klaus)
+  Suggested by Daniel Hegyi <daniel_hegyi@hotmail.com>
+
+- Much better and more powerful auto. upgrading-mechanism of incompatible or
+  renamed ECB-options to latest ECB-version. See the option
+  ecb-auto-compatibility-check! (Klaus)
+
+- Fixed formatting of "Parent" nodes in token buffer. (Jesper)
+
+- New option ecb-tree-RET-selects-edit-window: Possibility not to select the
+  edit-window of hitting RET in a tree-buffer; see the doc-string. There is
+  also a new function ecb-toggle-RET-selects-edit-window which is bound to
+  [C-t] in each tree-buffer. (Kevin A. Burton,  Klaus)
+
+- Fixed a bug in ecb-eshell.  If we are running with current buffer sync, and
+  there is garbage on the current line, when we change buffers this garbage will
+  be executed which could result in a 'command not found' or even worse, a
+  damaging command executed.  We now cleanse the command line prior to directory
+  changed. (Kevin A. Burton) 
+
+- Fixed a bug in ecb-speedbar.  The speedbar was doing its own updating outside
+  of the ECB.  This means that if you were to change buffers in a frame outside
+  of the ECB frame, the ECB's Speedbar would be updated to reflect a buffer not
+  within the ECB.  We now disable Speedbar's automatic update and have ECB
+  handle this.  (Kevin A. Burton) 
+
+- Better grouping of external methods, i.e. methods which are implemented
+  outside the class-definition, like in C++, CLOS and EIEIO. Now this is done
+  completely by semantic. (Klaus)
+
+- For application programmers using the tree-buffer library:
+  + The function tree-buffer-create has a new argument NODE-DATA-EQUAL-FN. See
+    the doc-string for a description (Klaus).
+  + For each tree-buffer a special user-data-storage (for any arbitrary data)
+    is ceated which can be accessed via `tree-buffer-set-data-store' and
+    `tree-buffer-get-data-store'. See the docstring of `tree-buffer-create'.
+    (Klaus)
+
+    
+Version 1.70:
+-------------
+
+- New option ecb-bucket-token-display. See doc-string for details. (Klaus)
+
+- Reorganisation of the faces used by ECB. The group 'ecb-face-options'
+  contains now all options which type is 'face (i.e. the defcustom's) and the
+  group 'ecb-faces' contains all face-definition (the defface's). In addition
+  it is now possible to change easily and fast the general face for ALL
+  ECB-tree-buffers (same for the highlighting face). See the docstring of the
+  new faces 'ecb-default-general-face' and 'ecb-default-highlight-face' for
+  further details. (Klaus).
+
+- Smarter incr. search in a tree-buffer with the [end]-key: If there are at
+  least two nodes with the same greatest common-prefix than every hit of
+  [end] jumps to the next node with this common prefix. (Klaus)
+
+- New feature ecb-auto-compatibility-check: ECB checks on startup if the
+  current value of an ECB-option OPT is not compatible with the type of OPT in
+  current ECB-release. This is done during activation. If there are
+  incompatible options ECB resets them to the default value of current ECB
+  release and displays after activation in a temporary window which options
+  have been reset, inkl. their old-value (before the reset) and new-value
+  (after the reset). (Klaus)
+
+- New feature ecb-tree-navigation-by-arrow: Smarter navigation in the
+  tree-windows with left- and right-arrow key (Klaus).
+  Thanks for the suggestion and a first implementation to Geert Ribbers
+  <geert.ribbers@realworld.nl>!
+
+- New feature 'ecb-type-token-display'. See the doc-string of this new option
+  for a description. (Klaus)
+
+- Now the option 'ecb-post-process-semantic-tokenlist' has per default an
+  entry for emacs-lisp-mode, so for eieio-code the methods (defmethod) of a
+  class are grouped with respect to the class they belong. The new default
+  value of this option does this for c++- and eieio-code. (Klaus)
+
+- Now in the ECB-tree-buffers RETURN works like the primary button (already in
+  previous versions) and C-RETURN works like the secondary button (new in
+  version 1.70). For an explanation of primary and secondary see the option
+  ecb-primary-secondary-mouse-buttons. (Klaus)
+
+- New feature: Now the token-display function can be defined separated for
+  each major-mode. Furthermore the token-display for C++ has enhanced,
+  especially for template-classes (but template displaying is first available
+  with semantic > version 14beta13!).
+  For this the option ecb-token-display-function has been completely rewritten
+  and is now incompatible with the old values before ECB 1.61. (Klaus)
+
+- Fixed a bug with mouse-avoidance-mode (only relevant for GNU Emacs 20.X)
+  Klaus. 
+
+- New feature, ecb-select-edit-window-on-redraw.  Mostly used if you are running
+  with ecb-redraw-layout-quickly and want to make sure you are always in the
+  edit window. (Kevin)
+
+- New feature, ecb-auto-activate.  If non-nil we can start the ECB after Emacs
+  is started.  See `ecb-auto-activate' for more information.  (Kevin)
+
+- New package, ecb-cycle.el.  Supports cycling through all known compilation
+  buffers. (Kevin)
+    + ecb-cycle-switch-to-compilation-buffer - switch to available compilation
+      buffers.
+    + ecb-cycle-through-compilation-buffers - cycle through all compilation
+      buffers.
+  
+- Much better performance of the directory and file-browser in ECB, especially
+  for directories with a lot of entries (means ~ >1000, dependend on your
+  machine and the net-connection in case of network-drives). See also the new
+  feature: ecb-cache-directory-contents. (Klaus)
+
+- ecb-eshell now supports customization.  (Kevin)
+
+- New feature: ecb-layout-always-operate-in-edit-window. Look at the
+  documentation. (Kevin & Klaus)
+
+- Fixed a bug in `ecb-toggle-ecb-windows'.  For starters we weren't setting
+  `ecb-window-hidden' when we redraw the layout.  This means that the ecb
+  windows could be hidden but never shown.
+  Other things:
+  + ecb-windows-hidden now has documentation
+  + we display status messages when we hide windows. (Kevin)
+
+- Fixed bug in `ecb-redraw-layout-quickly'.  If for come reason any of the ECB
+  windows are not alive, we do not return with a hard error.  Instead, we use
+  the scratch buffer.  (Kevin)
+
+- New function ecb-toggle-enlarged-compilation-window allows users to expand and
+  then contract the compilation window with a new key binding C-c . / (Kevin)
+
+- new option ecb-add-path-for-not-matching-files. Look at the documentation
+  (Klaus).
+
+Version 1.60:
+-------------
+
+- ecb-highlight-token-header-after-jump is now a boolean; which face is used
+  for highlighting is defined in ecb-token-header-face. (Klaus)
+
+- New option 'ecb-post-process-semantic-tokenlist': Special postprocessing of
+  the semantic tokenlist for certain major-modes. This is usefull for
+  c++-mode. Now with the default value of this option all methods in a
+  c++-implementation-file (no class/method-declaration but only method
+  implementations) are grouped with respect to the class they belong. (Klaus)
+
+- Now also with C++ Sources the method- and variable-protection is displayed
+  correct in the ECB-method buffer (Klaus).
+
+- Fixed a bug which prevented ECB using the root path "/" on unix-like systems
+  as a source-path. (Klaus)
+
+- If a file via the standard-mechanisms of Emacs (e.g. find-file) is openend,
+  then the auto. window synch (see `ecb-window-sync') has worked only correct
+  if the new file is located in any of the paths in `ecb-source-path'. Now ECB
+  adds the path of the new file at least temporally via `ecb-add-source-path'
+  to the list of paths in `ecb-source-path', so the window-synch works always
+  correct. ECB asks the user if the new path should saved also for future
+  sessions. (Klaus)
+
+- Added ecb-redraw-layout-hooks so that code can be executed after we redraw the
+  ecb layout.
+
+- New hook ecb-current-buffer-sync-hook allows developers to add code to be
+  evaluated after the ECB is synchronized with the current buffer.
+
+- Now all faces used by ECB for highlighting and displaying it´s own stuff are
+  customizable. See new group 'ecb-faces' (Klaus).
+
+- ECB is now fully prepared for Emacs 21. The new feature
+  `ecb-show-node-info-in-minibuffer' is implemented with the new 'help-echo
+  property of Emacs 21, therefore the ugly `track-mouse' mechanism is not
+  needed anymore with Emacs 21. (Klaus).
+
+- The options `ecb-show-node-name-in-minibuffer',
+  `ecb-show-complete-file-name-in-minibuffer' and
+  `ecb-show-file-info-in-minibuffer' are gone and have been replaced by one
+  single new option `ecb-show-node-info-in-minibuffer' where you can define
+  separately for every tree-buffer when and which node info should be
+  displayed in the minibuffer (Klaus).
+
+- ecb-auto-expand-directory-tree now offers two options:
+  - best: Expand always the best matching source-path for a file
+  - first: Expand always the first matching source-path for a file (Klaus)
+
+- Fixed a bug in auto. expanding directories if a source-path has an alias.
+  (Klaus)
+
+- If mouse is moved over an alias in the directories buffer then the real path
+  is shown in the echo-area; see also 'ecb-show-node-info-in-minibuffer'
+  (Klaus).
+
+- If mouse is moved over an history-entry then the full path is shown in the
+  echo-area so you can distinct better between two entries with the same name
+  but with differnt pathes; see also 'ecb-show-node-info-in-minibuffer'
+  (Klaus).
+
+- New option for the history: ecb-kill-buffer-clears-history defines if
+  `kill-buffer' should also remove the corresponding history entry. There are
+  several options (Klaus).
+
+Version 1.52:
+-------------
+
+- Added EIEIO requirement to ECB.
+
+Version 1.51:
+-------------
+
+- Now the names of all ECB buffers begin with a SPC per default. (Klaus)
+
+- ECB now can handle not only full but also partial buffer reparsing if done
+  by semantic and other tools (e.g. JDE >= 2.2.9). The method buffer will
+  always be uptodate if for a major-mode auto. reparsing after buffer changes
+  is enabled (the auto. buffer reparsing itself is not an ECB feature but must
+  be supplied by the major-mode, e.g. JDE). (Klaus)
+
+- Incremental node-search in the ECB-buffers now uses the value of
+  `case-fold-search'. (Klaus)
+
+- Complete new customization of the ECB-keybindings. The option
+  `ecb-prefix-key' has been removed. There is one new option `ecb-key-map'
+  where you can customize all keysettings of ECB (including a common
+  prefixkey). (Klaus)
+
+- ecb-add-source-path and ecb-delete-source-path now ask if saving should be
+  done for future sessions (Klaus).
+
+- Added new navigator functionality. Makes it easy to go to the back and forward
+  in navigated tokens and buffers. See ecb-nav-goto-next and 
+  ecb-nav-goto-previous. (Jesper)
+
+- Added an option to narrow the buffer to the token that is jumped to. See
+  ecb-token-jump-narrow. (Jesper)
+
+- Fixed a small bug that placed the window start at the beginning of the token
+  instead of the beginning of the token line. (Jesper)
+
+Version 1.50:
+-------------
+
+- Fixed a minor bug that occured when de-activating ECB under XEmacs. (Jesper)
+
+- ecb-layout-window-sizes variable is now an association list, which makes it
+  easier to add and remove layouts. (Jesper)
+
+- Added a new layout (nr. 12). Thanks to Nick Cross
+  <nick.cross@prismtechnologies.com> for this layout.
+
+- Each source path can now have an alias that is displayed instead of the path
+  name in the directories buffer. (Jesper)
+
+- The history items can now use the buffer name instead of the file
+  name. Customizable with ecb-history-item-name. (Jesper)
+
+- When jumping to a token the window can be scrolled so that the token starts 
+  at the top or center of the window. This behaviour is customizable with
+  the variable ecb-scroll-window-after-jump. (Jesper)
+
+- Fixed a bug when retrieving parent names for a token. (Jesper)
+
++ Now the option 'ecb-prefix-key' is customizable so you can define another
+  prefix if there are conflicts with other minor-modes or packages (Klaus).
+
+Version 1.41:
+-------------
+
+- Fixed bug when clicking on token in the methods buffer in XEmacs.
+
+Version 1.40:
+-------------
+
+- Tree-incremental-search in the ecb-windows now ignores all non interesting
+  stuff:
+  + any leading spaces
+  + expand/collapse-buttons: [+] resp. [-]
+  + protection-signs (+, -, #) in the method-window if uml-notation is used
+  + variables types or returntypes in front of variable- or method-names.
+  + const specifier for variables
+  This makes incremental-searching in a tree-buffer much faster and easier.
+  (Klaus)
+
+- ECB now uses Semantic DB to find parents of types. (Jesper)
+
+- Long source paths in the directories buffer are now truncated at the
+  beginning. Customizable with variable ecb-truncate-long-names. (Jesper)
+
+- Tokens can now be sorted by access. (Jesper)
+
+- Added a function to semantic-clean-token-hooks that just updates the token
+  changed instead of re-building the entire token tree. (Jesper)
+
+- Implemented a token tree cache that stores recently opened buffers' token
+  trees. This makes the buffer switching much faster and also saves expanded
+  nodes and window positions. The cache is unlimited at the moment. (Jesper)
+
+- Added a speedbar-like layout nr. 11. This is very useful (like also layout
+  nr. 10) either for users with small screens or users which normally do not
+  need/want the ECB-windows but sometimes browsing/selecting
+  methods/variables. (Klaus)
+
+- Better extraction of tokens from current buffer. ECB now displays any token
+  type in any order. (Jesper)
+
+- ECB now uses Semantic to display tokens in the methods buffer. (Jesper)
+
+- Much saver ecb-redraw-layout: Now the layout can be restored ALWAYS
+  regardless what messy thing has been done before. (Klaus)
+
+- New advice for 'other-window-for-scrolling', so all scroll-functions for the
+  "other" window can also scroll the first edit-window if point stays in the
+  second one. (Klaus)
+
+- ecb-toggle-ecb-windows now preserves the split, the split-amount, the buffer
+  contents, the window starts and current point. (Klaus)
+
+- Some important changes in the ECB-layout concerning displaying compilation-
+  and temp-buffers. (Klaus):
+
+  + 'ecb-select-compile-window' has been gone.
+  
+  + 'ecb-use-dedicated-windows' is not longer a user-customizable option but
+    it is always set to t, because this is essential for correct working of
+    the ecb-layout engine!
+
+  + 'ecb-compile-window-temporally-enlarge' is now a boolean option.  
+
+  + Now ECB does all necessary that your edit-window of ECB seems to be a
+    normal Emacs frame, especially concerning displaying temp-buffers (like
+    help- and completion-buffers) and compilation-buffers.
+    
+  + The variables 'compilation-window-height' and 'temp-buffer-shrink-to-fit'
+    (XEmacs) and 'temp-buffer-resize-mode' (GNU Emacs) are now fully supported
+    by ECB if no durable compilation-window is shown.
+
+- New function to toggle visibility of the ECB windows. Now it´s possible to
+  hide all ECB windows without deactivating ECB (see 'ecb-toggle-ecb-windows')
+  (Klaus).
+
+- ECB is now a global minor mode with it´s own menu "ECB" and it´s own keymap
+  with prefix "C-c .". New function to (de)activate/toggle ECB with
+  'ecb-minor-mode'. (Klaus)
+
+- Fixed a bug in highlighting current token in the method-buffer when
+  font-lock-mode is nil for the source-buffer. (Klaus)
+
+- New option for highlighting the method-header in the edit-window after
+  clicking onto the method in the method-window (like Speedbar does). (Klaus)
+
+- Function for automatically submitting a problem report to the ECB mailing
+  list: ecb-submit-problem-report. (Klaus)
+
+- Now not only for method-highlighting an idle delay can be set but also for
+  synchronizing the ECB windows with current edit window (see option
+  ecb-window-sync and ecb-window-sync-delay; default is 0.25 sec delay)
+  (Klaus).
+
+- Smarter highlighting of current method (Klaus).
+
+- All tree-buffers now have as default-directory the current selected
+  directory in the directory buffer. So you can also open files with find-file
+  etc. from within the tree-buffers. (Klaus).
+
+Version 1.32:
+-------------
+
+- Nil parent bug fixed. (Jesper)
+
+- New advices for find-file and switch-to-buffer (Klaus).
+
+- Now possible to set an idle delay before the current method is highlighted;
+  useful for slow machines but prevents also "jumping backward/forward" during
+  scrolling within java-classes if point goes out of method-definition into
+  class-definition. Default is an idle time of 0.25 seconds. (Klaus).
+
+Version 1.31:
+-------------
+
+- Parents (extends and implements) of the classes in the current buffer is now
+  shown in the methods buffer. (Jesper). Possibility to define a regexp which
+  parents should not be shown. (Klaus).
+
+- Now displaying the complete node name in minibuffer with the track-mouse
+  mechanism works also with mouse-avoidance-mode on; the mouse-avoidance will
+  be deactivated as long ECB is activated and the node-name display-mechanism
+  is on. This refers only to GNU Emacs! (Klaus)
+
+- Fixed a bug in 'ecb-current-buffer-sync' and 'ecb-redraw-layout' (Klaus)
+
+- Fixed a bug in loading semantic 1.3.3 or semantic 1.4 (Klaus)
+
+Version 1.30:
+-------------
+
+- If not all ECB-tree-windows of current layout are visible at redraw-time
+  ('ecb-redraw-layout') then the redraw synchronizes the contents of the
+  tree-windows with the source displayed in current edit-window (Klaus).
+
+- Added a section "Tips and Tricks" to the ECB online-help. (Klaus)
+
+- Added a new layout Nr. 10 for very small screen resolutions where all
+  squarecentimeters are needed for the editing itself. This layout only
+  displays a method-window and a edit-window. (Klaus).
+
+- The messages displayed after moving the mouse over a node in a tree-buffer
+  do not longer wasting the log, means they will not be logged (Klaus).
+
+- ECB now also works with semantic >= 1.4 (Klaus).
+
+- Now the ecb-compile-window-height is also preserved after displaying
+  temp-buffers (e.g. help-buffers after C-h f) - if you want this. See the
+  documentation of the option 'ecb-compile-window-temporally-enlarge'. (Klaus)
+
+- Added menu items for modification of the source paths in the directories
+  buffer. (Jesper)
+
+- Added buttons to directories buffer. (Jesper)
+
+- Mouse over files, methods etc. now work even if follow-mouse isn't
+  activated (Jesper). ECB adds a more intelligent mouse tracking mechanism, so
+  not only the mouse-over-node stuff of ECB works now very well and savely but
+  also follow-mouse itself works better and saver as without activated ECB.
+  (Klaus)
+
+- Popup menus now work in XEmacs. (Jesper)
+
+- You can now specify paths with env-vars like $HOME in the option
+  `ecb-source-path'. (Klaus)
+
+- The user must now confirm if he tries to delete the ECB frame. If he wants
+  to proceed then ECB will be first deactivated before deleting the frame.
+  This works for all ways to delete a frame (shortcut, window-manager-button,
+  ...). (Klaus)
+
+- ECB now optionally create its own frame when activated. See the new option
+  'ecb-new-ecb-frame'. (Klaus)
+
+- Intelligent recentering of tree-buffers now completely implemented without
+  the function 'recenter'. This means no flickering and flashing the whole
+  frame anymore after each 'recenter'. Now the ECB display is stable like a
+  rock :-) (Klaus)
+
+- Mouse over directories now shows directory path. (Jesper)
+
+- Methods and variables with point are now highlighted. (Jesper)
+
+- ECB windows are now updated when saving new files and deleting files. (Jesper)
+
+- incremental-search in every tree-buffer for easier and faster selecting
+  nodes with the keyboard (see new option `ecb-tree-incremental-search' and
+  new function 'tree-buffer-incremental-node-search') for more details.
+  (Klaus)
+
+- ecb-redraw-layout now restores both edit window buffers and the edit window
+  start. (Jesper)
+
+- Spelling corrections. Thanks to Colin Marquardt
+  <colin.marquardt@usa.alcatel.com> for spotting them.
+
+- Mode line prefixes can now be set individually for each ECB-buffer. There is
+  a default-prefix for each buffer but the user can also define a custom
+  prefix or no prefix at all. (Jesper/Klaus)
+
+- Fixed small bug in directory tree that caused directories to be sorted by
+  extension. (Jesper)
+
+Version 1.20 (2001-04-28):
+--------------------------
+
+- Now the ECB-buffers are intelligent in displaying nodes (Klaus):
+  + Expandable nodes: (e.g. a directory with it´s subdirectories). An
+    ECB-tree-window now tries always to make visisble as much as possible of
+    the subnodes of a node if a node is expanded (e.g. by clicking onto it´s
+    expand-symbol).
+  + Other nodes: A ECB-tree-window is always best filled, means no empty lines
+    if there are enough lines to fill the whole window.
+
+- The source file is only parsed if the ECB methods window is visible
+  (Jesper).
+
+- The methods buffer now show fields of EIEIO classes. Only works with
+  semantic 1.4. Thanks to Eric M. Ludlam <eric@siege-engine.com> for
+  this patch.
+
+- Now all adviced functions behave only special in the ECB-frame. In each other
+  frame they behave exactly like the not adviced functions. (Klaus)
+
+- Fix "invalid method-buffer"-bug (Klaus, with a lot of help by Eric Ludlam
+  and David Ponce).
+
+- Source files can now be sorted by name, extension or not sorted at all
+  (Jesper).
+
+- Now you can precisely define by an exclude and include regexp which files
+  should be displayed by ECB. (Jesper).
+
+- Jumping to a method/variable from the ECB-method buffer now sets the mark so
+  the user can easily jump back (see `ecb-method-jump-sets-mark'). (Klaus)
+
+- Now you can define a primary and a secondary mouse-button for ECB. See the
+  new variable `ecb-primary-secondary-mouse-buttons'.
+  Note: The name of the option 'ecb-left-mouse-jump-destination' has been
+  changed to `ecb-primary-mouse-jump-destination'!
+
+- Now ECB is really ediff-friendly: During ediff is active the advices of ECB
+  are temporally deactivated! (Klaus)
+
+- Now all tree-buffers (ECB-buffers) are read-only (Klaus)!
+
+- Better implementation of advising the functions. Now all adviceable
+  functions are completely independent from each other (Klaus)!
+
+- Mon Apr 2 21:20:34 2001 (burton@relativity.yi.org): merge my modeline
+  additions... this removes the redundant modeline info and shows important
+  information.
+
+- Added new option `ecb-advice-window-functions'. Enabling the intelligent
+  window functions via customize. No hook hacking necessary anymore!
+  Now the intelligent window functions are implemented by advicing (klaus).
+
+- Better online help display (Klaus).
+
+- Added new option 'ecb-primary-mouse-jump-destination' (thanks to David Hay
+  for suggestion <David.Hay@requisite.com>.
+
+- Adviced 'other-window' acts now exactly like the original but always related
+  to 'ecb-other-window-jump-behavior' (klaus)!
+
+- Fixed bug with 'ecb-compile-window-height'. Now ECB has always the correct
+  compile-window height after compilation-output (compile, grep etc.)
+
+- New option 'ecb-compile-window-temporally-enlarge'. Allowing
+  Emacs-compilation to enlarge the ECB-compile-window temporally.
+
+Version 1.10 (2001-03-25):
+--------------------------
+
+- Automatic expansion of the directory tree.
+
+- Method parsing is now recursive, so that for example inner classes
+  in Java are shown in the methods buffer.
+
+- Variables are now shown in the methods buffer.
+
+- Selected files and directories now use the secondary-selection
+  face. Thanks to Kevin A. Burton <burton@relativity.yi.org> for this
+  patch.
+
+- Fixed some issues with XEmacs. Thanks to Colin Marquardt
+  <colin.marquardt@usa.alcatel.com> for this.
+
+- Fixed bug with truncating lines in tree-buffer.el.
+
+- The methods buffer can now be automatically updated when the source
+  file is saved.
+
+- Help text is available with "ecb-show-help".
+
+- Moving the mouse over a node shows the name in the
+  mini-buffer. Currently this only works when follow-mouse is
+  activated.
+
+Version 1.0 (2001-03-17):
+-------------------------
+
+- Changed name from JCB to ECB and prefix from "jde-jcb-" to "ecb-".
+
+- Works with semantic 1.3.1 and higher.
+
+- Fixed a couple of bugs when creating and deleting files.
+
+- Grouped customization variables.
+
+Contributed by Klaus Berndl <klaus.berndl@sdm.de>:
+
+- A lot of intelligent ECB window-functions (e.g. ecb-delete-window) which
+  gives you the feeling as if the edit-window is the only window of the ECB
+  frame.
+
+- New layout functionality.
+
+- The history buffer can optionally be sorted and also cleared.
+
+- The package expanded symbol can optionally be placed before the package name.
+
+- Syntax highlighting of the methods buffer.
+
+- Show argument names and return type in the methods buffer.
+
+- History clear function: ecb-clear-history.
+
+- Added pop-up menu to the history buffer.
+
+- Fixed edit buffer sync bug.
+
+Version 0.04 (2000-11-07):
+--------------------------
+
+- Keyboard navigation in JCB buffers. Use Return to select and Tab to expand.
+
+- Tree view of packages.
+
+- Class files can be viewed in the packages buffer.
+
+- Better handling of mouse events.
+
+- Automatic update of the packages buffer.
+
+- Added pop-up menus to the packages and classes buffers. They are activated 
+  with mouse button 3 (right button).
+
+- Added method sorting. Thanks to Brian Anderson <brian.anderson@luna.com> 
+  for this improvement.
+
+Version 0.03 (2000-07-28):
+--------------------------
+
+- Fixed naming of variables.
+
+- Fixed license and copyright comments.
+
+- Fixed class file regular expression bug. 
+  Thanks to Jim Loverde <loverde@str.com> for finding it.
+
+- Added three new layouts.
+
+- The JCB buffers can now be (almost) synchronized with the edit window.
+
+- When clicking on a class or method using mouse button 2, it will be loaded
+  into another window. A new customization variable was added for this.
+
+- Minor changes. Thanks to Jim for his suggestions.
+
+- Removed the "jde-jcb-window-skips-from-methods-buffer" and 
+  "jde-jcb-window-skips-from-history-buffer" customization variables.
+
+Version 0.02 (2000-07-15):
+--------------------------
+
+- Changed prefix from "jcb-" to "jde-jcb-". This will cause JCB customization 
+  variables to be saved in JDE project files.
+
+- Lists and parses non-Java file types. Currently the C and Lisp parsers from 
+  semantic-ex.el are used.
+
+- History buffer implemented.
+
+- Layout function implement. Thanks to Jim Loverde <loverde@str.com> for 
+  helping out with this.
+
+- Packages matching a regular expression can be excluded from the packages 
+  buffer. Thanks to Mark Gibson <mark@markg.co.uk> for this feature.
+
+Version 0.01 (2000-07-08):
+--------------------------
+
+- Initial version.
+
+
+# Makefile for the ecb package.
+
+# This file is part of XEmacs.
+
+# XEmacs is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by the
+# Free Software Foundation; either version 2, or (at your option) any
+# later version.
+
+# XEmacs is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+# for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with XEmacs; see the file COPYING.  If not, write to
+# the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+# Boston, MA 02111-1307, USA.
+
+VERSION = 0.99
+AUTHOR_VERSION = 1.80
+MAINTAINER = Klaus Berndl <klaus.berndl@sdm.de>
+PACKAGE = ecb
+PKG_TYPE = regular
+REQUIRES = xemacs-base semantic eieio fsf-compat edit-utils jde mail-lib \
+	eshell ediff xemacs-devel speedbar
+CATEGORY = standard
+
+ELCS = ecb-compilation.elc ecb-cycle.elc ecb.elc ecb-eshell.elc ecb-face.elc \
+	ecb-help.elc ecb-layout.elc ecb-mode-line.elc ecb-navigate.elc \
+	ecb-util.elc tree-buffer.elc ecb-buffertab.elc ecb-speedbar.elc \
+	ecb-upgrade.elc
+
+EXTRA_SOURCES = HISTORY README RELEASE_NOTES
+
+INFO_FILES = $(PACKAGE).info*
+HTML_FILES = $(PACKAGE)*.html
+HTML_DEP = $(PACKAGE).html
+TEXI_FILES = $(PACKAGE).texi
+
+PRELOADS = -l overlay -l compile -l timer -l ecb-util -l ecb-eshell \
+	-l ecb-layout -l tree-buffer -l esh-mode -l em-dirs -l jde-help \
+	-l semantic -l semantic-load -l semanticdb -l sendmail -l ediff-init
+
+include ../../XEmacs.rules
+
+GENERATED += custom-load.elc
+
+all:: $(ELCS) auto-autoloads.elc custom-load.elc $(PACKAGE).info
+
+binkit: binkit-common

Makefile.upstream

+# This Makefile byte-compiles the ECB lisp files and generates online-help.
+
+# ========================================================================
+# User configurable section
+
+# ------------------------------------------------------------------------
+# Byte-compiling ECB:
+# ------------------------------------------------------------------------
+
+# Define here the correct path to your Emacs or XEmacs binary
+EMACS=emacs
+
+# Set here the load-path of the semantic-version and eieio-version loaded
+# into your Emacs. If you use JDE then add also the path to the lisp
+# directory of JDE. (use always forward-slashes as directory-separator even
+# with MS Windows systems). Make sure you compile ECB with the semantic-
+# and eieio-, (and jde-) version you load into Emacs!
+LOADPATH=../semantic ../eieio ../jde/lisp
+
+# Two ways to build ECB:
+# - Call "make" to byte-compile the ECB. You can savely ignore the messages.
+# - Or call "make LOADPATH=<your loadpath> EMACS=<path to emacs binary>" if
+#   you want to set a different LOADPATH and or Emacs-binary and you do not
+#   want edit the makefile.
+
+
+# ------------------------------------------------------------------------
+# Generating different online-help formats
+# ------------------------------------------------------------------------
+
+# If you want to generate all formats of online-help from the texi-source
+# you must set here the FULL paths to the required tools. The Makefile
+# tests if the tools are available on these locations, so if a tool x is
+# not available let the related setting X empty! NOTE: For generating the
+# PDF-format you will need an installed TeX and Ghostscript!
+MAKEINFO=/usr/bin/makeinfo
+TEXI2DVI=/D/Programme/Tools/tex/texmf/miktex/bin/texi2dvi
+# You need either the dvipdfm-tool
+DVIPDFM=/D/Programme/Tools/tex/texmf/miktex/bin/dvipdfm
+# or the tools dvips and ps2pdf. If dvipdfm is available the Makefile uses
+# this one!
+DVIPS=/D/Programme/Tools/tex/texmf/miktex/bin/dvips
+PS2PDF=/D/home/bin/ps2pdf
+
+# To generate the online-formats just call "make online-help"
+
+# ------------------------------------------------------------------------
+# Installing the info online-help in the Top-directory of (X)Emacs-info
+# ------------------------------------------------------------------------
+
+# Set here the path of the info subdirectory of your (X)Emacs installation
+# which contains the dir file.
+EMACSINFOPATH=/D/Programme/Tools/Editor/emacs-21.2/info
+
+# If you want to install the info-format of the online-help in the
+# Top-directory of the info-directory of (X)Emacs (see above EMACSINFOPATH)
+# then you must specify the full path of the tool install-info.
+INSTALLINFO=/usr/bin/install-info
+
+# To install the online-help just call "make install-help"
+
+# end of user configurable section
+# ========================================================================
+
+# Do not change anything below!
+
+# $Id$
+
+RM=rm -f
+CP=cp
+
+ecb_LISP_EL=tree-buffer.el ecb-util.el ecb-mode-line.el ecb-help.el ecb-layout.el ecb-navigate.el ecb.el ecb-eshell.el ecb-cycle.el ecb-face.el ecb-compilation.el ecb-upgrade.el
+ecb_LISP_ELC=$(ecb_LISP_EL:.el=.elc)
+ecb_TEXI=ecb.texi
+ecb_INFO=$(ecb_TEXI:.texi=.info)
+ecb_HTML=$(ecb_TEXI:.texi=.html)
+ecb_DVI=$(ecb_TEXI:.texi=.dvi)
+ecb_PS=$(ecb_TEXI:.texi=.ps)
+ecb_PDF=$(ecb_TEXI:.texi=.pdf)
+
+ecb: $(ecb_LISP_EL)
+	@echo "Byte-compiling ECB with LOADPATH=${LOADPATH} ..."
+	@$(RM) $(ecb_LISP_ELC) ecb-compile-script
+	@echo "(add-to-list 'load-path nil)" > ecb-compile-script
+	@if test ! -z "${LOADPATH}" ; then\
+	   for loadpath in ${LOADPATH}; do \
+	      echo "(add-to-list 'load-path \"$$loadpath\")" >> ecb-compile-script; \
+	   done; \
+	fi
+	@echo "(if (locate-library \"jde\") (require 'jde))" >> ecb-compile-script
+	@echo "(require 'ecb)" >> ecb-compile-script
+	@echo "(setq debug-on-error t)" >> ecb-compile-script
+	$(EMACS) -batch -no-site-file -l ecb-compile-script --eval '(ecb-byte-compile t)'
+	@$(RM) ecb-compile-script
+
+all: ecb online-help
+
+online-help: $(ecb_TEXI)
+	@if test -x "$(MAKEINFO)" ; then\
+	   $(RM) $(ecb_INFO) $(ecb_HTML); \
+	   echo Generating info-format...; \
+	   $(MAKEINFO) --no-split $<; \
+	   echo Generating html-format...; \
+	   $(MAKEINFO) --no-split --html $<; \
+	else \
+	   echo No info- and html-format generating because the tool; \
+	   echo - makeinfo in $(MAKEINFO); \
+	   echo is not available!; \
+	fi
+	@if test -x "$(TEXI2DVI)" -a -x "$(DVIPDFM)"; then\
+	   $(RM) $(ecb_DVI) $(ecb_PDF); \
+	   echo Generating pdf-format with dvipdfm ...; \
+	   $(TEXI2DVI) --clean $<; \
+	   $(DVIPDFM) $(ecb_DVI); \
+	   $(RM) $(ecb_DVI); \
+	elif test -x "$(TEXI2DVI)" -a -x "$(DVIPS)" -a -x "$(PS2PDF)" ; then\
+	   $(RM) $(ecb_DVI) $(ecb_PS) $(ecb_PDF); \
+	   echo Generating pdf-format with dvips and ps2pdf ...; \
+	   $(TEXI2DVI) --clean $<; \
+	   $(DVIPS) -Pcmz -q $(ecb_DVI) -o $(ecb_PS); \
+	   $(PS2PDF) $(ecb_PS); \
+	   $(RM) $(ecb_DVI) $(ecb_PS); \
+	else \
+	   echo No pdf-format generating because at least one of the tools; \
+	   echo - texi2dvi in $(TEXI2DVI); \
+	   echo - dvips in $(DVIPS); \
+	   echo - ps2pdf in $(PS2PDF); \
+	   echo is not available!; \
+	fi
+
+
+install-help: $(ecb_INFO)
+	@if test -x "$(INSTALLINFO)" -a -f "$(EMACSINFOPATH)/dir" ; then\
+	   echo Installing the Online-help in $(INSTALLINFO)...; \
+	   $(CP) $< $(EMACSINFOPATH); \
+	   $(INSTALLINFO) $< $(EMACSINFOPATH)/dir; \
+	else \
+	   echo Can not install the online-help because either; \
+	   echo - the tool $(INSTALLINFO) or; \
+	   echo - the file $(EMACSINFOPATH)/dir; \
+	   echo is not available!; \
+	fi
+
+clean:
+	@$(RM) $(ecb_LISP_ELC) ecb-compile-script
+
+# End of Makefile
+Readme for the Emacs Code Browser (ECB) v1.80
+---------------------------------------------
+
+About
+-----
+
+This package contains a code browser for several languages for Emacs. For
+instructions on how to use the browser read the online-help (see "Usage"
+below). The latest version of this package can be found at:
+
+http://home.swipnet.se/mayhem/ecb.html
+
+
+Requirements
+------------
+
+ECB requires the following packages being properly installed:
+- Semantic, version 1.4 or higher
+  (http://cedet.sourceforge.net/semantic.shtml)
+- Eieio, version 0.17 or higher (http://cedet.sourceforge.net/eieio.shtml).
+- If Java code is edited the ECB works best when the JDE package
+  (http://sunsite.auc.dk/jde) is installed.
+
+If you use XEmacs you must have the fsf-compat package installed (contains
+overlay.el).
+
+
+Installation
+------------
+
+1. Unpack the ECB archive.
+
+2. Install the required semantic- and eieio-version.
+
+   Note: ECB maybe requires a newer version of these libraries than shipped
+   with Emacs or XEmacs. You have to install exactly a version ECB requires
+   and also to make sure that the correct version is loaded into (X)Emacs!
+
+3. Add the new directory to your load-path.
+
+   You MUST add the ECB-install-directory to the 'load-path' either by
+   changing the 'load-path' variable directly in your .emacs or
+   site-lisp/site-start.el or by working with a file subdirs.el.
+
+   ATTENTION: ECB is NOT properly installed if it's directory is not added to
+   'load-path' and for example just loaded by
+
+     (load-file "/path/to/ecb/ecb.el")
+
+   Do not do this!
+
+4. Add to your .emacs or site-start.el file the line:
+   (require 'ecb)
+
+5. Restart Emacs.
+
+ECB is now ready for use and can be activated by calling 'M-x ecb-activate'.
+Now you can either starting using ECB or you can do these optional
+installation steps:
+
+6. Call `ecb-byte-compile'. Byte compiles ECB. You can safely ignore all
+   messages. (You can also bytecompile ECB from the command-line either by
+   using the Makefile or by using the batch-file make.bat. Just read the
+   comments in that file you choose.)
+
+7. Install the supplied ecb.info
+
+   The ECB distribution contains a file ecb.info which is the online-help of
+   ECB in Info-format. You can install this online help so it's available in
+   the Top-directory of Info. There are two ways to do this:
+
+   * Use install-info (recommended):
+     1. Copy the file ecb.info into the info-directory of Emacs
+     2. Install it with the command install-info (if available on your system)
+        in the dir-file.
+
+     The supplied Makefile offers a target install-help which does both of
+     these steps. You have just to call "make install-help" with the correct
+     EMACSINFOPATH set (see the comment in Makefile). Here is an
+     example:
+
+        make EMACSINFOPATH=/path/to/emacs/info install-help
+
+    * Manual Installation:
+      Copy the file ecb.info into the info-directory of Emacs and
+      modify the file dir manually.
+
+   But it doesn't matter if you do not execute this step (7.) because the
+   online help of ECB is always available though, see `ecb-show-help'!
+
+
+Usage
+-----
+
+Call "M-x ecb-activate" to activated ECB.
+Call "M-x ecb-show-help" to get a detailed online-help for ECB.
+If you are using ECB the first time you should read the complete
+online help accurately!
+
+
+Contacts
+--------
+
+Send comments, bug reports and improvement suggestions to:
+
+ecb-list@lists.sourceforge.net
+
+This file contains some important release-notes for ECB 1.80
+
+General:
+--------
+
+Please read also the sections "Known conflicts and bugs" and "Tips and Tricks"
+in the online help ('ecb-show-help'). The former one is a small list of known
+conflicts and for each conflict a proper and easy solution! Please read also
+carefully the upgrade informations below!
+
+
+Installing ECB first time:
+--------------------------
+
+No special notes beyond the contents of README.
+
+
+Upgrading from any previous version:
+------------------------------------
+
+The type of the following options has changed:
+
+- 'ecb-token-display-function'
+- 'ecb-window-sync'
+
+ECB has a new feature 'ecb-auto-compatibility-check' which enables a check for
+incompatible or renamed ECB-options at ECB startup. These options are then
+auto. upgraded to the new type or reset to the default-values of current
+ECB-version if no upgrade is possible. All upgraded or reset options are
+displayed to the user with their old and new values!
+
+ECB now requires Semantic version 1.4 and eieio version 0.17! Any previous
+beta version is not supported anymore!
+
+
+Upgrading from any version < 1.60:
+----------------------------------
+
+- The options `ecb-show-node-name-in-minibuffer',
+  `ecb-show-complete-file-name-in-minibuffer' and
+  `ecb-show-file-info-in-minibuffer' are gone and have been replaced by one
+  single new option `ecb-show-node-info-in-minibuffer' where you can define
+  separately for every tree-buffer when and which node info should be
+  displayed in the minibuffer
+
+  
+Upgrading from versions < 1.52:
+-------------------------------
+
++ ECB now requires eieio >= 0.16 (see also README)
+
++ The option ecb-prefix-key has been removed. Now all customization of
+  keybindings is done via the new option ecb-key-map.
+
++ ecb-layout-window-sizes is now an association list. If you have customized
+  this variable or used the ecb-store-window-sizes function, there will be an
+  error when drawing the ECB layout. Reset ecb-layout-window-sizes to it's
+  default value (nil) and store your window sizes using ecb-store-window-sizes.
+
++ A new customization variable ecb-show-tokens controls the behaviour of the
+  methods buffer. Read the documentation for more information.
+
+  
+Upgrading from versions < 1.20:
+-------------------------------
+
++ Now mouse-1 and mouse-2 for opening source-files and jumping to
+  methods/variables is not longer the default keybinding. Please take a look
+  at the new options 'ecb-primary-secondary-mouse-buttons' and
+  'ecb-primary-mouse-jump-destination'.
+
++ Now it is no longer necessary to bind in the ECB-hooks (ecb-activate-hook
+  and ecb-deactivate-hook) some standard-Emacs-keys for window-handling to the
+  ECB replacements for the related standard-functions to get proper
+  window-handling within the edit-window(s) of ECB.
+
+  Example: With ECB < 1.20 it was necessary to bind [C-x o] to
+  'ecb-other-window' in 'ecb-activate-hook' (and also "unbinding" it back to
+  the standard other-window in the 'ecb-deactivate-hook') to get a more
+  ECB-suitable other-window behavior. Same for other window-keys.
+
+  This way will work also in ECB 1.20 but it is NOT the recommended way
+  because the new option 'ecb-advice-window-functions' makes this much easier
+  and better. Please read the documentation of this option exactly!
+
++ Default-value of `ecb-other-window-jump-behavior' is now 'all.
+
++ Interactively calling 'ecb-update-methods-buffer' is not longer necessary as
+  work-around for the bug, that sometimes the error "Wrong type argument,
+  integer-or-marker-p nil" is displayed after clicking onto a method/variable
+  in the ECB-method-buffer. This bug is fixed!
+
++ For a complete list of changes and new features for versions > 1.20 see the
+  HISTORY file.
+
+;;; ecb-buffertab.el --- 
+
+;; $Id$
+
+;; Copyright (C) 2000-2003 Free Software Foundation, Inc.
+;; Copyright (C) 2000-2003 Kevin A. Burton (burton@openprivacy.org)
+
+;; Author: Kevin A. Burton (burton@openprivacy.org)
+;; Maintainer: Kevin A. Burton (burton@openprivacy.org)
+;; Location: http://relativity.yi.org
+;; Keywords: 
+;; Version: 1.0.0
+
+;; This file is [not yet] part of GNU Emacs.
+
+;; This program is free software; you can redistribute it and/or modify it under
+;; the terms of the GNU General Public License as published by the Free Software
+;; Foundation; either version 2 of the License, or any later version.
+;;
+;; This program is distributed in the hope that it will be useful, but WITHOUT
+;; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+;; FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
+;; details.
+;;
+;; You should have received a copy of the GNU General Public License along with
+;; this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+;; Place - Suite 330, Boston, MA 02111-1307, USA.
+
+;;; Commentary:
+
+;; NOTE: If you enjoy this software, please consider a donation to the EFF
+;; (http://www.eff.org)
+
+;;; Code:
+
+;;; TODO: make sure we don't do this TOO many times.
+;;
+;; - we need to define a property with 'local-map set correctly.
+;;
+;; - write a function that generates a popup menu
+;;
+;; - the popup menu should allow the user to check a buffer view to set it as
+;;   the default when opening new files.
+;;
+;;   - is this possible?  I think it might but I would need to set it up
+;;   correctly.
+
+(require 'ecb-compilation)
+
+(defface ecb-buffertab-face '((t (:bold t :foreground "lightyellow")))
+  "Face used to highlight the annotation lines to the left of the annotate buffer.")
+
+(defcustom ecb-buffertab-map (make-sparse-keymap)
+  "Key map used for buffertab navigation")
+
+(define-key ecb-buffertab-map [mode-line down-mouse-1] 'ecb-buffertab-popup-menu)
+
+(defun ecb-buffertab-popup-menu()
+  ""
+  (interactive)
+  
+  (popup-menu (ecb-buffertab-make-menu "Compilation Buffers")))
+
+(defun ecb-buffertab-make-menu(name)
+  "Make a menu for use on the buffertab."
+
+  (let((menu (list 'keymap name)))
+
+    (dolist(entry (ecb-compilation-get-buffers))
+
+      (add-to-list 'menu (list 'menu-item 'menu-item (car entry) (car entry)) t))
+
+    menu))
+
+(defun ecb-buffertab-setup-modeline()
+  ""
+  (interactive)
+
+  (let((modeline-tab ""))
+
+    ;;FIXME: figure out what modeline tab to use
+    (setq modeline-tab "   ECB: ")
+
+    (set-text-properties 0 (length modeline-tab) (list 'local-map ecb-buffertab-map
+                                                       'face 'ecb-buffertab-face) modeline-tab)
+
+    (setq mode-line-format modeline-tab)))
+
+(provide 'ecb-buffertab)
+
+;;; ecb-buffertab.el ends here

ecb-compilation.el

+;;; ecb-compilation.el --- 
+
+;; $Id$
+
+;; Copyright (C) 2000-2003 Free Software Foundation, Inc.
+;; Copyright (C) 2000-2003 Kevin A. Burton (burton@openprivacy.org)
+
+;; Author: Kevin A. Burton (burton@openprivacy.org)
+;; Maintainer: Kevin A. Burton (burton@openprivacy.org)
+;; Location: http://relativity.yi.org
+;; Keywords: 
+;; Version: 1.0.0
+
+;; This file is [not yet] part of GNU Emacs.
+
+;; This program is free software; you can redistribute it and/or modify it under
+;; the terms of the GNU General Public License as published by the Free Software
+;; Foundation; either version 2 of the License, or any later version.
+;;
+;; This program is distributed in the hope that it will be useful, but WITHOUT
+;; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+;; FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
+;; details.
+;;
+;; You should have received a copy of the GNU General Public License along with
+;; this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+;; Place - Suite 330, Boston, MA 02111-1307, USA.
+
+;;; Commentary:
+
+;; NOTE: If you enjoy this software, please consider a donation to the EFF
+;; (http://www.eff.org)
+
+;;; Code:
+
+(defgroup ecb-compilation nil
+  "Settings for all things displayed in the compile window of ECB."
+  :group 'ecb
+  :prefix "ecb-compilation-")
+
+(defcustom ecb-compilation-buffer-names (list ecb-eshell-buffer-name
+                                              "*Apropos*"
+                                              "*Help*"
+                                              "*Backtrace*"
+                                              "*shell*"
+                                              "*bsh*"
+                                              "*Messages*")
+  "*Additional buffer names that should be displayed in compilation
+window even if `compilation-buffer-p' says nil."
+  :group 'ecb-compilation
+  :type '(repeat (string :tag "Buffer name")))
+
+(defun ecb-compilation-get-buffers()
+  "Get all known compilation buffer names.  See `ecb-compilation-buffer-p'."
+
+  (let((buffer-names '())
+       (buffer-list (buffer-list))
+       (index 0))
+
+    (setq buffer-list (sort buffer-list (lambda(first second)
+                                          (string-lessp (buffer-name first)
+                                                        (buffer-name second)))))
+
+    (dolist(buffer buffer-list)
+
+      (when (ecb-compilation-buffer-p buffer)
+
+        (add-to-list 'buffer-names (cons (buffer-name buffer) index) t)
+        
+        (setq index (1+ index))))
+
+    buffer-names))
+  
+(defun ecb-compilation-buffer-p(buffer)
+  "Test if the given buffer is a compilation buffer. Note that in this case we
+define 'compilation buffer' as a buffer that should ideally be displayed in
+the `ecb-compile-window'. This means that in some situations this might not be
+the result of a `compile-internal'. A good example would be the *Help* buffer
+or the `ecb-eshell-buffer-name'.
+
+BUFFER can be the name of a buffer or a buffer-objekt.
+
+This function returns true if the name of BUFFER is either contained in
+`ecb-compilation-buffer-names' or if `compilation-buffer-p' returns true."
+
+  (let ((buf (cond ((stringp buffer)
+                    (get-buffer buffer))
+                   ((bufferp buffer)
+                    buffer)
+                   (t
+                    nil))))
+    (if buf
+        (or (member (buffer-name buf) ecb-compilation-buffer-names)
+            (compilation-buffer-p buf)))))
+
+(provide 'ecb-compilation)
+
+;;; ecb-compilation.el ends here
+;;; ecb-cycle.el --- cycle buffers through ecb windows.
+
+;; $Id$
+
+;; Copyright (C) 2000-2003 Free Software Foundation, Inc.
+;; Copyright (C) 2000-2003 Kevin A. Burton (burton@openprivacy.org)
+
+;; Author: Kevin A. Burton (burton@openprivacy.org)
+;; Maintainer: Kevin A. Burton (burton@openprivacy.org)
+;; Location: http://relativity.yi.org
+;; Keywords: 
+;; Version: 1.0.0
+
+;; This file is [not yet] part of GNU Emacs.
+
+;; This program is free software; you can redistribute it and/or modify it under
+;; the terms of the GNU General Public License as published by the Free Software
+;; Foundation; either version 2 of the License, or any later version.
+;;
+;; This program is distributed in the hope that it will be useful, but WITHOUT
+;; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+;; FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
+;; details.
+;;
+;; You should have received a copy of the GNU General Public License along with
+;; this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+;; Place - Suite 330, Boston, MA 02111-1307, USA.
+
+;;; Commentary:
+
+;; NOTE: If you enjoy this software, please consider a donation to the EFF
+;; (http://www.eff.org)
+
+;;; History:
+
+;; Fri Jan 25 2002 05:07 PM (burton@openprivacy.org): init
+
+;;; TODO:
+;;
+;; - What is the pattern we should use for cycling through other windows?
+;;
+;;   - ecb-cycle-through-X-buffers (select the next X buffer)
+;;   - ecb-cycle-switch-to-X-buffer (set the X buffer using completion)
+;;
+;; - How do we setup the menubar?
+;;
+;;          - ECB
+;;                Cycle
+;;                     - Forward Compilation Buffer
+;;                     - Set Compilation Buffer
+;;
+;; - What do we use for key bindings?
+;;
+;; - We need an easier way to setup completion and a better way to get the
+;;   index.
+;;
+;; - If possible, try to put fit the buffer so that the end of buffer is at the
+;; end of the window... if necessary.
+
+;;; Code:
+
+(require 'ecb-compilation)
+(require 'ecb-layout)
+
+(defgroup ecb-cycle nil
+  "Setting for cycling through misc ECB buffers."
+  :group 'ecb
+  :prefix "ecb-cycle-")
+
+
+(defun ecb-cycle-through-compilation-buffers(&optional choose-buffer)
+  "Cycle through all compilation buffers currently open and display them
+within the compilation window `ecb-compile-window'. If the currently opened
+buffer within the compilation window is not a compilation buffer, we jump to
+the first compilation buffer. If not we try to loop through all compilation
+buffers. If we hit the end we go back to the beginning.
+
+If CHOOSE-BUFFER is not nil then the user will be prompted for the
+compilation-buffer to swtich to.
+
+See also the option `ecb-layout-switch-to-compilation-window'! The difference
+is that this cycling-function offers only compilation-buffers in the sense of
+`ecb-compilation-buffer-p' whereas the adviced version of `switch-to-buffer'
+offers any buffer but switches to `ecb-compile-window' if a compilation-buffer!"
+  
+  (interactive "P")
+
+  (if choose-buffer
+      (when (ecb-compile-window-live-p 'display-msg)
+        (let ((ecb-layout-switch-to-compilation-window '(switch-to-buffer)))
+          (switch-to-buffer (completing-read "ECB compilation buffer: "
+                                             (ecb-compilation-get-buffers)))))
+    (when (ecb-compile-window-live-p 'display-msg)
+      (let*((compilation-buffers (ecb-compilation-get-buffers))
+            (current-buffer (window-buffer ecb-compile-window))
+            (current-buffer-name (buffer-name current-buffer)))
+      
+        (when (null compilation-buffers)
+          (ecb-error "No compilation buffers"))
+      
+        (if (not (ecb-compilation-buffer-p current-buffer))
+          ;;if the current bufffer is not a compilation buffer, goto the first
+            ;;compilation buffer.
+          
+            (ecb-cycle-set-compilation-buffer 0 compilation-buffers)
+        
+          ;;else... we need to determine what buffer to display.
+        
+          (let(current index)
+          
+            (setq current (assoc current-buffer-name compilation-buffers))
+          
+            (setq index (cdr current))
+          
+            (if (= (1+ index) (length compilation-buffers))
+                ;;go back to the first buffer.
+                (ecb-cycle-set-compilation-buffer 0 compilation-buffers)
+              (ecb-cycle-set-compilation-buffer (1+ index)
+                                                compilation-buffers))))))))
+
+(defun ecb-cycle-set-compilation-buffer(index compilation-buffers)
+  "Set the buffer in the compilation window."
+
+  (when (ecb-compile-window-live-p 'display-msg)
+    (let((buffer-name (car (nth index compilation-buffers)))
+         (ecb-layout-switch-to-compilation-window '(switch-to-buffer)))
+      (message "ECB: setting compilation buffer %d/%d - %s"
+               (1+ index) (length compilation-buffers) buffer-name)
+      (switch-to-buffer buffer-name))))
+
+(provide 'ecb-cycle)
+
+;;; ecb-cycle.el ends here
+;;; ecb-eshell.el --- eshell integration for the ECB.
+
+;; $Id$
+
+;; Copyright (C) 2000-2003 Free Software Foundation, Inc.
+;; Copyright (C) 2000-2003 Kevin A. Burton (burton@openprivacy.org)
+
+;; Author: Kevin A. Burton (burton@openprivacy.org)
+;; Maintainer: Kevin A. Burton (burton@openprivacy.org)
+;; Location: http://relativity.yi.org
+;; Keywords: 
+;; Version: 1.0.0
+
+;; This file is [not yet] part of GNU Emacs.
+
+;; This program is free software; you can redistribute it and/or modify it under
+;; the terms of the GNU General Public License as published by the Free Software
+;; Foundation; either version 2 of the License, or any later version.
+;;
+;; This program is distributed in the hope that it will be useful, but WITHOUT
+;; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+;; FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
+;; details.
+;;
+;; You should have received a copy of the GNU General Public License along with
+;; this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+;; Place - Suite 330, Boston, MA 02111-1307, USA.
+
+;;; Commentary:
+
+;; This package provides eshell integration for the ECB.  This basically allows
+;; you to jump to the eshell in the compilation window, synch up the current
+;; eshell with the current ECB buffer and run commands without getting in the
+;; way.
+;;
+;; It provides the following features:
+;;
+;; - ability to jump to the eshell buffer within the compilation window ( C-.e )
+;;   If the eshell isn't running it will be started
+;;
+;; - expands the compilation window when you run commands.  So for example it
+;;   allows you to view the eshell in minimized mode and then when you run 'ls'
+;;   the window automatically expands.
+;;
+;; - Sychronizes the current directory of the eshell with the current buffer
+;;   with each every ECB buffer.
+;;
+;; - Provides smart window layout of the eshell buffer.  This makes sure that
+;;   the eshell is taking up the exact amount of space and that nothing is
+;;   hidden.
+;; 
+;; The goal is to make it easy to jump to a command prompt to run OS level
+;; commands.  
+;; 
+;; If you enjoy this software, please consider a donation to the EFF
+;; (http://www.eff.org)
+
+;;; History:
+
+;; - Mon Feb 04 2002 10:44 PM (burton@openprivacy.org): BUG: I think at certain
+;; conditions, we might be able to get the eshell window to expand after we
+;; automatically change directories.  I think this has to be:
+;;
+;; - Mon Feb 04 2002 10:43 PM (burton@openprivacy.org): BUGFIX: make sure the
+;; eshell is not buffer-read-only.  This is manifested by desktop.el for some
+;; reason.
+;;
+;; - Tue Jan 29 2002 03:33 AM (burton@openprivacy.org): Include the ability to
+;; startup the eshell when the ECB is started.
+;;
+;;
+;; - Tue Jan 29 2002 03:31 AM (burton@openprivacy.org): RFE: make the
+;; auto-enlargement on command execution optional, true by default.
+;;
+;; - Tue Jan 22 2002 11:38 PM (burton@openprivacy.org): enable customization
+;; 
+;; - Tue Dec 25 2001 07:54 PM (burton@openprivacy.org): We now enlarge the ecb
+;;   window when you go to it.
+;;    
+;; - Sat Dec 15 2001 01:50 AM (burton@openprivacy.org): We are not being much
+;;   smarter about saving selected windows.
+;;
+;; - Fri Dec 14 2001 05:57 PM (burton@openprivacy.org): fixed a bug which caused 
+;;
+;; - Fri Dec 14 2001 04:48 PM (burton@openprivacy.org): only run eshell/cd if
+;; the current directory is different than the eshell/pwd (this is a performance
+;; issue and needs to be added in ecb-eshell-current-buffer-sync
+;;
+;;   - we can't do this.  eshell/pwd does't return a string.  Instead we should
+;;     change to the eshell-buffer and see what the directory default-directory
+;;     is there.
+;;
+;; - Fri Dec 14 2001 03:24 PM (burton@openprivacy.org): use
+;; eshell-pre-command-hook to increase the size of the window if we are in an
+;; ECB layout (and the ecb is activated)...
+;;
+;; - Sun Nov 18 2001 07:20 PM (burton@openprivacy.org): putting the cursor one
+;;   line from the bottom of the window.
+
+;;; Design:
+;;
+;; Synching the current buffer with the eshell is done two ways.  If the buffer
+;; is visible in a window, we always resynch.  If it is not visible then
+;; ecb-eshell-goto-eshell will synch up when the user goes to the eshell buffer.
+
+;;; TODO:
+;;
+;; - Right now ecb-eshell doesn't work with dired.  Why?  Try to setup a hook
+;; and an ecb-eshell-dired-buffer-sync function that will take care of this.
+;;
+;; - BUG: when we exit the eshell, we enlarge the compilation buffer.... there
+;; is not needed since the buffer is about to exit.
+;;
+;;    - this might be fixed by using an eshell post command hook.
+;;
+;; - RFE: could we possibly find a way to avoid window enlargement if we launch
+;; a background process like 'xterm &'.  This would require determining what the
+;; command is and then making sure it is acceptable.
+;;
+;; - BUG: when ecb-eshell-enlarge-when-selecting is nil we need to recenter.  If
+;; we don't we just end up with the point in the middle of the eshell.
+;;
+;; - BUG: enable just-in-time current-buffer-sync... only execute if the current
+;; buffer's directlry is not equal to the ecb directory.
+
+;;; Code:
+
+(defgroup ecb-eshell nil
+  "Settings for eshell integration within the ECB."
+  :group 'ecb
+  :prefix "ecb-eshell-")
+
+(defcustom ecb-eshell-enlarge-when-selecting t
+  "*Enlarge the `ecb-eshell-buffer-name' buffer if it has been selected."
+  :group 'ecb-eshell
+  :type 'boolean)
+
+(defcustom ecb-eshell-enlarge-when-starting t
+  "*When starting the eshell, enlarge the buffer if non-nil."
+  :group 'ecb-eshell
+  :type 'boolean)
+
+(defcustom ecb-eshell-auto-activate nil
+  "*Startup the eshell when the ECB is activated."
+  :group 'ecb-eshell
+  :type 'boolean)
+
+(defvar ecb-eshell-buffer-name "*eshell*"
+  "Buffer name for the eshell.  We define it here so that we don't need to have
+the eshell loaded for ecb-eshell to function properly.")
+
+(defun ecb-eshell-current-buffer-sync()
+  "Synchronize the eshell with the current buffer.  This is only done if the
+eshell is currently visible."
+  (interactive)
+
+  ;;only do this if the user is looking at the eshell buffer
+
+  (if (ecb-eshell-running-p)      
+      (let((source-buffer-directory nil)
+           (ecb-buffer-directory nil)
+           (window nil))
+
+        ;;make sure we are clean.
+        (ecb-eshell-cleanse)
+        
+        ;;get copies of the current source directory.
+        
+        (setq source-buffer-directory default-directory)
+
+        (setq window (get-buffer-window ecb-eshell-buffer-name))
+
+        (save-excursion
+          (set-buffer (get-buffer-create ecb-eshell-buffer-name))
+
+          (setq buffer-read-only nil)
+          
+          (setq ecb-buffer-directory default-directory))
+
+        ;;at this point source-buffer-directory is a snapshot of the source
+        ;;buffer window and default directory is the directory in the eshell
+        ;;window
+        
+        (when (and window
+                   (window-live-p window)
+                   (not (string-equal source-buffer-directory ecb-buffer-directory)))
+          (save-excursion
+
+            (set-buffer ecb-eshell-buffer-name)
+            
+            ;;change the directory without showing the cd command
+            (eshell/cd source-buffer-directory)
+            
+            ;;execute the command
+            (save-selected-window
+              (select-window window)
+              
+              (eshell-send-input)))
+          
+          (ecb-eshell-recenter)))))
+
+(defun ecb-eshell-recenter()
+  "Recenter the eshell window so that the prompt is at the end of the buffer."
+  (interactive)
+
+  (save-selected-window
+  
+    (let(window)
+      
+      (setq window (get-buffer-window ecb-eshell-buffer-name))
+      
+      (when (and (ecb-eshell-running-p)
+                 window
+                 (window-live-p window)
+                 (equal window ecb-compile-window))
+        
+        (select-window window)
+
+        ;;this needs to be present under GNU Emacs or recenter will fail.
+        (end-of-buffer) 
+        
+        (recenter -2)))))
+
+(defun ecb-eshell-running-p()
+  "Return true if eshell is currently running."
+
+  (and (boundp 'ecb-eshell-buffer-name)
+       ecb-eshell-buffer-name
+       (get-buffer ecb-eshell-buffer-name)))
+  
+(defun ecb-eshell-goto-eshell()
+  "Go ot the eshell buffer"
+  (interactive)
+  
+  ;;first... make sure that we change the compilation window to the eshell
+  ;;buffer.
+
+  (if (ecb-eshell-running-p)
+      (when (ecb-compile-window-live-p 'display-msg)
+        (set-window-buffer ecb-compile-window ecb-eshell-buffer-name)
+        (select-window ecb-compile-window)
+        (if ecb-eshell-enlarge-when-selecting
+            (ecb-eshell-enlarge)
+          ;;else just recenter
+          (ecb-eshell-recenter)))
+
+    ;;we auto start the eshell here?  I think so..
+    (ecb-eshell-activate)
+    (when ecb-eshell-enlarge-when-starting
+      (ecb-eshell-enlarge))))
+
+(defun ecb-eshell-activate()
+  "Startup the eshell in the compile window."
+
+  (when (ecb-compile-window-live-p 'display-msg)
+    (select-window ecb-compile-window)
+    (eshell)))
+  
+(defun ecb-eshell-enlarge()
+  "Enlarge the eshell so more information is visible.  This is usually done so
+that the eshell has more screen space after we execute a command. "
+  (interactive)
+
+  (let(window)
+  
+    (setq window (get-buffer-window ecb-eshell-buffer-name))
+    
+    (when (and (ecb-eshell-running-p)
+               (window-live-p window)
+               (equal (selected-window) ecb-compile-window)
+               ecb-minor-mode)
+
+      ;;is there a better way to do this?  It seems that there should be a way
+      ;;to have emacs split or expand a window by 50% like it is done in a lot
+      ;;of other places (display-buffer, etc)
+
+      (ecb-enlarge-window window)))
+  (ecb-eshell-recenter))
+
+(defun ecb-eshell-cleanse()
+  "If the user has entered text in the eshell, we need to clean it.  If we don't
+  do this we could end up executing a strange command resulting in a 'command
+  not found'."
+  
+  (save-excursion
+
+    (set-buffer ecb-eshell-buffer-name)
+
+    (end-of-buffer)
+
+    (eshell-bol)
+
+    (delete-region (point) (point-at-eol))))
+
+(defun ecb-eshell-auto-activate-hook()
+  "Activate the eshell when ECB is activated.  See `ecb-eshell-auto-activate'."
+
+  (when ecb-eshell-auto-activate
+    (ecb-eshell-activate)))
+
+(add-hook 'ecb-activate-hook 'ecb-eshell-auto-activate-hook)
+  
+(add-hook 'ecb-current-buffer-sync-hook 'ecb-eshell-current-buffer-sync)
+
+(add-hook 'ecb-redraw-layout-hook 'ecb-eshell-recenter)
+
+(add-hook 'eshell-pre-command-hook 'ecb-eshell-enlarge)
+
+(provide 'ecb-eshell)
+
+;;; ecb-eshell.el ends here
+;;; ecb-face.el --- all face-options of ECB
+
+;; Copyright (C) 2000, 2001 Jesper Nordenberg
+
+;; Author: Klaus Berndl <klaus.berndl@sdm.de>
+;; Maintainer: Jesper Nordenberg <mayhem@home.se>
+;; Keywords: java, class, browser
+;; Created: Feb 2002
+
+;; This program is free software; you can redistribute it and/or modify it under
+;; the terms of the GNU General Public License as published by the Free Software
+;; Foundation; either version 2, or (at your option) any later version.
+
+;; This program is distributed in the hope that it will be useful, but WITHOUT
+;; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+;; FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
+;; details.
+
+;; You should have received a copy of the GNU General Public License along with
+;; GNU Emacs; see the file COPYING.  If not, write to the Free Software
+;; Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+;;; Commentary:
+
+;; This file contains all options with type 'face and all face-definitions of
+;; ECB.
+
+(defgroup ecb-face-options nil
+  "Settings for all faces used in ECB."
+  :group 'ecb
+  :prefix "ecb-")
+
+(defgroup ecb-faces nil
+  "Definitions of all ECB-faces"
+  :group 'ecb-face-options 
+  :group 'faces
+  :prefix "ecb-")
+
+(defmacro ecb-face-default (&optional height bold-p italic-p
+                                      inherit
+                                      fg-light-col fg-dark-col
+                                      bg-light-col bg-dark-col
+                                      fg-rest bg-rest
+                                      reverse-video-p)
+  "Macro for setting default values for an ECB face.
+The parameters are set for the following display-types:
+- ((class color) (background light)): HEIGHT, BOLD-P, ITALIC-P, INHERIT
+                                      FG-LIGHT-COL, BG-LIGHT-COL
+- ((class color) (background dark)): HEIGHT, BOLD-P, ITALIC-P, INHERIT
+                                     FG-DARK-COL, BG-DARK-COL
+- t: HEIGHT, BOLD-P, ITALIC-P, INHERIT, FG-REST, BG-REST, REVERSE-VIDEO."
+  `(list (list '((class color) (background light))
+               (append (if (and ,height running-emacs-21) (list :height ,height))
+                       (if ,bold-p (if running-emacs-21
+                                       (list :weight 'bold)
+                                     (list :bold t)))
+                       (if ,italic-p (if running-emacs-21
+                                         (list :slant 'italic)
+                                       (list :italic t)))
+                       (if (and ,inherit running-emacs-21) (list :inherit ,inherit))
+                       (if ,fg-light-col (list :foreground ,fg-light-col))
+                       (if ,bg-light-col (list :background ,bg-light-col))))
+         (list '((class color) (background dark))
+               (append (if (and ,height running-emacs-21) (list :height ,height))
+                       (if ,bold-p (if running-emacs-21
+                                       (list :weight 'bold)
+                                     (list :bold t)))
+                       (if ,italic-p (if running-emacs-21
+                                         (list :slant 'italic)
+                                       (list :italic t)))
+                       (if (and ,inherit running-emacs-21) (list :inherit ,inherit))
+                       (if ,fg-dark-col (list :foreground ,fg-dark-col))
+                       (if ,bg-dark-col (list :background ,bg-dark-col))))
+         (list 't (append (if (and ,height running-emacs-21) (list :height ,height))
+                          (if ,bold-p (if running-emacs-21
+                                          (list :weight 'bold)
+                                        (list :bold t)))
+                          (if ,italic-p (if running-emacs-21
+                                            (list :slant 'italic)
+                                          (list :italic t)))
+                          (if (and ,inherit running-emacs-21) (list :inherit ,inherit))
+                          (if ,fg-rest (list :foreground ,fg-rest))
+                          (if ,bg-rest (list :foreground ,bg-rest))
+                          (if ,reverse-video-p (list :reverse-video t))))))
+
+(defface ecb-default-general-face (ecb-face-default 1.0)
+  "*Basic face for all ECB tree-buffers.
+It´s recommended to define here the font-family, the font-size, the basic
+color etc.
+
+In GNU Emacs 21.X all faces \(even the face 'ecb-default-highlight-face') used
+in the ECB tree-buffers inherit from this face. Therefore the default
+attributes like font etc. of a face used in a tree-buffer can be very easily
+changed with face 'ecb-default-general-face'.
+
+With XEmacs and GNU Emacs 20.X there is no inheritance-feature but the options
+`ecb-directories-general-face', `ecb-sources-general-face',
+`ecb-methods-general-face' and `ecb-history-general-face' offer the choice to
+use the face 'ecb-default-general-face' so also with XEmacs and GNU Emacs 20.X
+the basic face-settings can be easily changed just by customizing the face
+'ecb-default-general-face'!"
+  :group 'ecb-faces)
+
+(defface ecb-directories-general-face (ecb-face-default 1.0 nil nil
+                                                        'ecb-default-general-face)
+  "*Basic face for the ECB directories buffer.
+It´s recommended to define here the font-family, the font-size, the basic
+color etc."
+  :group 'ecb-faces)
+
+(defcustom ecb-directories-general-face 'ecb-default-general-face
+  "*Basic face for the ECB directories buffer. This defines the basic
+face the whole directory buffer should displayed with. If the face
+'ecb-default-general-face' is used then the display of all ECB-tree-buffers
+can be changed by modifying only the face 'ecb-default-general-face'."
+  :group 'ecb-face-options
+  :group 'ecb-directories
+  :type '(radio (const :tag "Use ecb-default-general-face"
+                       :value ecb-default-general-face)
+                (face :tag "Special face"
+                      :value ecb-directories-general-face)))
+
+(defface ecb-sources-general-face (ecb-face-default 1.0 nil nil
+                                                    'ecb-default-general-face)
+  "*Basic face for the ECB sources buffer.
+It´s recommended to define here the font-family, the font-size, the basic
+color etc."
+  :group 'ecb-faces)
+
+(defcustom ecb-sources-general-face 'ecb-default-general-face
+  "*Basic face for the ECB sources buffer. This defines the basic
+face the whole directory buffer should displayed with. If the face
+'ecb-default-general-face' is used then the display of all ECB-tree-buffers
+can be changed by modifying only the face 'ecb-default-general-face'."
+  :group 'ecb-face-options
+  :group 'ecb-sources
+  :type 'face
+  :type '(radio (const :tag "Use ecb-default-general-face"
+                       :value ecb-default-general-face)
+                (face :tag "Special face"
+                      :value ecb-sources-general-face)))
+
+(defface ecb-methods-general-face (ecb-face-default 1.0 nil nil
+                                                    'ecb-default-general-face)
+  "*Basic face for the ECB methods buffer.
+It´s recommended to define here the font-family, the font-size, the basic
+color etc."
+  :group 'ecb-faces)
+
+(defcustom ecb-methods-general-face 'ecb-default-general-face
+  "*Basic face for the ECB methods buffer. This defines the basic
+face the whole directory buffer should displayed with. If the face
+'ecb-default-general-face' is used then the display of all ECB-tree-buffers
+can be changed by modifying only the face 'ecb-default-general-face'."
+  :group 'ecb-face-options
+  :group 'ecb-methods
+  :type '(radio (const :tag "Use ecb-default-general-face"
+                       :value ecb-default-general-face)
+                (face :tag "Special face"
+                      :value ecb-methods-general-face)))
+
+(defface ecb-history-general-face (ecb-face-default 1.0 nil nil
+                                                    'ecb-default-general-face)
+  "*Basic face for the ECB history buffer.
+It´s recommended to define here the font-family, the font-size, the basic
+color etc."
+  :group 'ecb-faces)
+
+(defcustom ecb-history-general-face 'ecb-default-general-face
+  "*Basic face for the ECB directory buffer. This defines the basic
+face the whole directory buffer should displayed with. If the face
+'ecb-default-general-face' is used then the display of all ECB-tree-buffers
+can be changed by modifying only the face 'ecb-default-general-face'."
+  :group 'ecb-face-options
+  :group 'ecb-history
+  :type '(radio (const :tag "Use ecb-default-general-face"
+                       :value ecb-default-general-face)
+                (face :tag "Special face"
+                      :value ecb-history-general-face)))
+
+;; this face should also inherit from 'ecb-default-general-face': Then
+;; changing the font in 'ecb-default-general-face' changes the font in all
+;; faces of the tree-buffers.
+(defface ecb-default-highlight-face (ecb-face-default nil nil nil
+                                                      'ecb-default-general-face
+                                                      "yellow" nil
+                                                      "cornflower blue" "magenta"
+                                                      nil nil t)
+  "*Define basic face for highlighting the selected node in an ECB
+tree-buffer.
+
+In GNU Emacs 21.X all highlighting faces in the ECB tree-buffers inherit from
+this face. Therefore the default attributes like font etc. of a face used in a
+tree-buffer for highlighting the current token can be very easily changed with
+face 'ecb-default-highlight-face'.
+
+With XEmacs and GNU Emacs 20.X there is no inheritance-feature but the options
+`ecb-directory-face', `ecb-source-face', `ecb-method-face' and
+`ecb-history-face' offer the choice to use the face
+'ecb-default-highlight-face' so also with XEmacs and GNU Emacs 20.X the basic
+face-settings can be easily changed just by customizing the face
+'ecb-default-highlight-face'!"
+  :group 'ecb-faces)
+
+(defface ecb-directory-face (ecb-face-default nil nil nil
+                                              'ecb-default-highlight-face
+                                              "yellow" nil
+                                              "cornflower blue" "magenta"
+                                              nil nil t)
+  "*Define face used for highlighting current directory in the
+directories buffer."
+  :group 'ecb-faces)
+
+(defcustom ecb-directory-face 'ecb-default-highlight-face
+  "*Face used for highlighting current directory in the directories
+buffer. If the face 'ecb-default-highlight-face' is used then the display of
+all ECB-tree-buffers can be changed by modifying only the face
+'ecb-default-highlight-face'."
+  :group 'ecb-face-options
+  :group 'ecb-directories
+  :type '(radio (const :tag "Use ecb-default-highlight-face"
+                       :value ecb-default-highlight-face)
+                (face :tag "Special face"
+                      :value ecb-directory-face)))
+
+(defface ecb-source-face (ecb-face-default nil nil nil
+                                           'ecb-default-highlight-face
+                                           "yellow" nil
+                                           "cornflower blue" "magenta"
+                                           nil nil t)
+  "*Define face used for highlighting current source in the
+sources buffer."
+  :group 'ecb-faces)
+
+(defcustom ecb-source-face 'ecb-default-highlight-face
+  "*Face used for highlighting current source in the sources buffer.
+If the face 'ecb-default-highlight-face' is used then the display of all
+ECB-tree-buffers can be changed by modifying only the face
+'ecb-default-highlight-face'."
+  :group 'ecb-face-options
+  :group 'ecb-sources
+  :type '(radio (const :tag "Use ecb-default-highlight-face"
+                       :value ecb-default-highlight-face)
+                (face :tag "Special face"
+                      :value ecb-sources-face)))
+
+(defface ecb-method-face (ecb-face-default nil nil nil
+                                           'ecb-default-highlight-face
+                                           "yellow" nil
+                                           "cornflower blue" "magenta"
+                                           nil nil t)
+  "*Define face used for highlighting current method, class or variable
+in the methods buffer."
+  :group 'ecb-faces)
+
+(defcustom ecb-method-face 'ecb-default-highlight-face
+  "*Face used for highlighting current method, class or variable in the
+methods buffer. If the face 'ecb-default-highlight-face' is used then the
+display of all ECB-tree-buffers can be changed by modifying only the face
+'ecb-default-highlight-face'."
+  :group 'ecb-face-options
+  :group 'ecb-methods
+  :type '(radio (const :tag "Use ecb-default-highlight-face"
+                       :value ecb-default-highlight-face)
+                (face :tag "Special face"
+                      :value ecb-method-face)))
+
+(defface ecb-history-face (ecb-face-default nil nil nil
+                                            'ecb-default-highlight-face
+                                            "yellow" nil
+                                            "cornflower blue" "magenta"
+                                            nil nil t)
+  "*Define face used for highlighting current history-entry in the
+history buffer."
+  :group 'ecb-faces)
+
+(defcustom ecb-history-face 'ecb-default-highlight-face
+  "*Face used for highlighting current history-entry in the history
+buffer. If the face 'ecb-default-highlight-face' is used then the display of
+all ECB-tree-buffers can be changed by modifying only the face
+'ecb-default-highlight-face'."
+  :group 'ecb-face-options
+  :group 'ecb-history
+  :type '(radio (const :tag "Use ecb-default-highlight-face"
+                       :value ecb-default-highlight-face)
+                (face :tag "Special face"
+                      :value ecb-history-face)))
+
+(defface ecb-token-header-face (ecb-face-default nil nil nil nil nil nil
+                                                 "SeaGreen1" "SeaGreen1"
+                                                 nil nil t)
+  "*Define face used for highlighting the token header after jumping to
+  it by clicking onto a node in the methods buffer."
+  :group 'ecb-faces)
+  
+(defcustom ecb-token-header-face 'ecb-token-header-face
+  "*Face used for highlighting the token header after jumping to
+it by clicking onto a node in the methods buffer."
+  :group 'ecb-face-options
+  :group 'ecb-methods
+  :type 'face)
+
+(defface ecb-source-in-directories-buffer-face (ecb-face-default nil nil nil
+                                                                 'ecb-default-general-face
+                                                                 "medium blue"
+                                                                 "LightBlue1"
+                                                                 nil nil
+                                                                 nil "gray")
+  "*Define a face for displaying sources in the directories buffer."
+  :group 'ecb-faces)
+ 
+(defcustom ecb-source-in-directories-buffer-face
+  'ecb-source-in-directories-buffer-face
+  "*Face for source files in the directories buffer."
+  :group 'ecb-directories
+  :group 'ecb-face-options
+  :type 'face)
+
+(defface ecb-type-token-class-face (ecb-face-default nil t)
+  "*Define face used with option `ecb-type-token-display'."
+  :group 'ecb-faces)
+
+(defface ecb-type-token-interface-face (ecb-face-default nil t)
+  "*Define face used with option `ecb-type-token-display'."
+  :group 'ecb-faces)
+
+(defface ecb-type-token-struct-face (ecb-face-default nil t)
+  "*Define face used with option `ecb-type-token-display'."
+  :group 'ecb-faces)
+
+(defface ecb-type-token-typedef-face (ecb-face-default nil t)
+  "*Define face used with option `ecb-type-token-display'."
+  :group 'ecb-faces)
+
+(defface ecb-type-token-enum-face (ecb-face-default nil t)
+  "*Define face used with option `ecb-type-token-display'."
+  :group 'ecb-faces)
+
+(defface ecb-type-token-group-face (ecb-face-default nil t nil nil
+                                                     (if running-xemacs
+                                                         "dimgray"
+                                                       "dim gray")
+                                                     (if running-xemacs
+                                                         "dimgray"
+                                                       "dim gray"))
+  "*Define face used with option `ecb-type-token-display'."
+  :group 'ecb-faces)
+
+(defface ecb-bucket-token-face (ecb-face-default nil t)
+  "*Face which can be used for displaying bucket tokens in the methods
+buffer. See also `ecb-bucket-token-display'."
+  :group 'ecb-faces)
+
+
+(provide 'ecb-face)
+
+;;; ecb-face.el ends here
+;;; ecb-help.el --- online help for ECB and bug reporting
+
+;; Copyright (C) 2001 Jesper Nordenberg
+;; Copyright (C) 2001 Free Software Foundation, Inc.
+;; Copyright (C) 2001 Klaus Berndl <klaus.berndl@sdm.de>
+
+;; Author: Klaus Berndl <klaus.berndl@sdm.de>
+;; Maintainer: Klaus Berndl <klaus.berndl@sdm.de>
+;; Keywords: java, class, browser
+
+;; This program is free software; you can redistribute it and/or modify it
+;; under the terms of the GNU General Public License as published by the Free
+;; Software Foundation; either version 2, or (at your option) any later
+;; version.
+
+;; This program is distributed in the hope that it will be useful, but WITHOUT
+;; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+;; FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+;; more details.
+
+;; You should have received a copy of the GNU General Public License along
+;; with GNU Emacs; see the file COPYING. If not, write to the Free Software
+;; Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+;;; Commentary:
+;;
+;; Contains all online-help for ECB (stolen something from recentf.el)
+
+;; $Id$
+
+;;; Code
+
+(require 'ecb-layout)
+(require 'ecb-util)
+
+
+(defcustom ecb-show-help-format 'info
+  "*The format `ecb-show-help' shows its online help. Allowed values are 'info
+\(for the Info format) and 'html \(for HTML format). If the value is 'html
+then `browse-url-browser-function' says which browser is used."
+  :group 'ecb-general
+  :type '(choice :tag "Online-help format" :menu-tag "Online-help format"
+                 (const :tag "Info" :value info)
+                 (const :tag "Html" :value html)))
+
+(defun ecb-show-help (&optional format)
+  "Shows the online help of ECB in Info or HTML-format depending on the value
+of the option `ecb-show-help-format'. If called with prefix argument, i.e. if
+FORMAT is not nil then the user is prompted to choose the format of the help
+\(Info or Html)."
+  (interactive "P")
+  (let ((f (if format
+               (intern (ecb-query-string "Choose format of online-help:"
+                                         (if (equal 'ecb-show-help-format
+                                                    'html)
+                                             '("info" "html")
+                                           '("html" "info"))))
+             ecb-show-help-format)))
+    (if (equal f 'info)
+        (if (file-exists-p (concat ecb-ecb-dir "ecb.info"))
+            (info (concat ecb-ecb-dir "ecb.info"))
+          (ecb-error "File %s does not exist" (concat ecb-ecb-dir "ecb.info")))
+      (message "Opening ECB online-help in a web-browser...")
+      (if (file-exists-p (concat ecb-ecb-dir "ecb.html"))
+          (progn
+            (browse-url (concat "file://"
+                                (ecb-fix-filename ecb-ecb-dir "ecb.html"))
+                        (if (boundp 'browse-url-new-window-flag)
+                            browse-url-new-window-flag
+                          browse-url-new-window-p))
+            (message "Opening ECB online-help in a web-browser...done"))
+        (ecb-error "File %s does not exist" (concat ecb-ecb-dir "ecb.html"))))))
+
+;;
+;; Problem reporting functions stolen from JDE
+;;
+(defvar ecb-problem-report-mail-address "ecb-list@lists.sourceforge.net" )
+
+(defconst ecb-problem-report-message
+  "Please enter the details of your bug report here")
+
+(defun ecb-submit-problem-report()
+  "Submit a problem report for the ECB to the ECB mailing-list. This command
+generates in the edit-window a problem-report which contains already the
+current values of all ECB options, the current backtrace-buffer if there is
+any and the current message-buffer. You will be asked for a problem-report
+subject and then you must insert a description of the problem. Please describe
+the problem as detailed as possible!"
+  (interactive)
+  (if (not (ecb-point-in-edit-window))
+      (ecb-select-edit-window))