Anonymous avatar Anonymous committed 59f74ac

sync with current upstream 2.24

Comments (0)

Files changed (111)

+2004-04-14  Klaus Berndl  <klaus.berndl@sdm.de>
+	
+	* Sync with current upstream 2.24
+
 2004-02-17  Norbert Koch  <viteno@xemacs.org>
 
 	* Makefile (VERSION): XEmacs package 1.17 released.
 # Boston, MA 02111-1307, USA.
 
 VERSION = 1.17
-AUTHOR_VERSION = 2.21
+AUTHOR_VERSION = 2.24
 MAINTAINER = Klaus Berndl <klaus.berndl@sdm.de>
 PACKAGE = ecb
 PKG_TYPE = regular
 DATA_16_FILES = $(wildcard ecb-images/directories/height-10/*.xpm)
 DATA_16_DEST = $(PACKAGE)/ecb-images/directories/height-10
 
+DATA_17_FILES = $(wildcard ecb-images/methods/height-15_to_21/*.xpm)
+DATA_17_DEST = $(PACKAGE)/ecb-images/methods/height-15_to_21
+
 
 PRELOADS = -l compile -l ecb-util -l ecb-eshell \
 	-l ecb-layout -l tree-buffer -l esh-mode -l em-dirs -l jde-help \

Makefile.upstream

 # Byte-compiling ECB:
 # ------------------------------------------------------------------------
 
-# Define here the correct path to your Emacs or XEmacs binary
+# Define here the correct path to your Emacs or XEmacs binary. Ensure you
+# have set this variable to 'xemacs' if you want byte-compile with XEmacs!
 EMACS=emacs
 
 # -------- Compiling ECB with the cedet-library 1.0 ----------------------
 # to the cedet-installation directory.
 
 #CEDET=
-CEDET=C:/Programme/emacs-21/site-lisp/multi-file-packages/cedet-1.0beta1c
+CEDET=C:/Programme/emacs-21/site-lisp/multi-file-packages/cedet-1.0beta2b
 
 # -------- Compiling ECB with the semantic < 2.0 -------------------------
 
 #
 #      or
 #
-#      make CEDET="path/to/cedet"           #(for compiling with cedet 1.0)
+#      make CEDET="path/to/cedet"           (for compiling with cedet 1.0)
 #
 #      or
 #
 
 # For the ECB-maintainers: Change the version-number here and not
 # elsewhere!
-ecb_VERSION=2.21
+ecb_VERSION=2.24
 
 include ecb-makedef.mk
 
+* Changes for ECB version 2.24
+
+** Enhancements for the Methods-buffer
+   
+*** Enhancements to the icon-display in the Methods-buffer
+
+**** New icon-images for enumerations and abstract/virtual tags (interfaces are
+     currently displayed with the icon for abstract classes - at least til
+     someone provides special icons ;-)
+
+**** Some slightly fixes in the other icons - e.g. a better display with a
+     not-white background
+
+**** Static and abstract tags are no longer underlined rsp. italic when icons are
+     displayed because this is somehow "tautological" when a special static
+     rsp. abstract icon is already displayed.
+
+*** New option for switching on/off distinction of function-prototypes from the
+    real function-definitions: `ecb-methods-separate-prototypes'. This is
+    useful for C++ and C because these languages distinct between a
+    method-prototype (rsp. function-prototype for C) and the method (rsp.
+    function for C) itself. If this option is not nil (default) then ECB
+    separates the prototypes from the real function/methods in the
+    Methods-buffer.
+
+*** New "current-type"-filter for the Methods-buffer
+    In languages which have types (like Java or C++) this filter displays only
+    the current type and all its members \(e.g. attributes and methods). The
+    current-type is either the type of the current tag in the source-buffer or
+    the type of the current node in the methods-buffer. If ECB can not
+    identify the current type in the source-buffer or in the methods-window
+    then nothing will be done.
+    
+** Now directories are prescanned for emptyness so they are displayed as empty
+   in the directories-buffer even without user-interaction (i.e. in previous
+   ECB-versions the emptyness of a directory has been first checked when the
+   user has clicked onto a directory). ECB optimizes this check as best as
+   possible but if a directory contains a lot of subdirectories which contain
+   in turn a lot of entries, then expanding such a directory or selecting it
+   takes of course more time as without this check - at least at the first
+   time (all following selects of a directory uses the cached information if
+   its subdirectories are empty or not). Therefore this feature can be
+   switched of via the new option `ecb-prescan-directories-for-emptyness'.
+
+** Fixed Bugs
+
+*** Fixed some newly introduced bugs which made ECB 2.23 incompatible with
+    semantic 1.4.
+
+*** Fixed a bug which changed the highlighted directory even after just expanding
+    or collapsing other directories.
+
+*** Fixed two small bugs which have influenced `ecb-create-new-layout'
+
+    
+
+* Changes for ECB version 2.23
+
+** New cedet1.0beta2 is supported.
+
+** Enhancements for the Methods-buffer
+
+*** The look&feel of the Methods-buffer is now much nicer because it has been
+    polished with a lot of new icons. ECB contains now a lot of new icons for
+    displaying the Method-buffer as pretty and professional as possible. The
+    new default-value of the option `ecb-tree-image-icons-directories' points
+    autom. to the new icon-images. Thanks a lot to Markus Gritsch
+    <gritsch@iue.tuwien.ac.at> for providing these new icons.
+
+    To use this you should reset the option `ecb-tree-image-icons-directories'
+    to the new default-value if you have customized this option!
+
+    You can disable this icon-display via the new option
+    `ecb-display-image-icons-for-semantic-tags' if you do not like the new
+    icons. 
+
+*** New feature for applying default tag-filters for certain files.
+    The new option `ecb-default-tag-filter' allow to define default
+    tag-filters for certain files which are applied automatically after
+    loading such a file into a buffer. The possible filters are the same as
+    offered by the command `ecb-methods-filter' and they are applied in the
+    same manner - the only difference is they are applied automatically. The
+    files can be specified on a combined major-mode- and
+    filename-regexp-basis.
+
+    Usage-example: This can be used to display for outline-mode files (e.g.
+    NEWS) in the Methods-buffer only the level-1-headings by defining a
+    regexp-filter "^\* .*" (see the default-value of this new option).
+
+*** New keybindings and commands for faster applying certain tag-filters.
+    Here are the new bindings:
+    [C-c . fr] --> `ecb-methods-filter-regexp'
+    [C-c . ft] --> `ecb-methods-filter-tagclass'
+    [C-c . fp] --> `ecb-methods-filter-protection'
+    [C-c . fn] --> `ecb-methods-filter-nofilter'
+    [C-c . fl] --> `ecb-methods-filter-delete-last'
+    [C-c . ff] --> `ecb-methods-filter-function'
+
+*** The popup-menu contains now mode-dependend tag-filter entries.
+    This means for sources not supported by semantic no protection- or
+    tag-class filters will be offered. And for semantic-supported sources
+    exactly these tag-classes are offered the semantic-parser for the current
+    major-mode offers. Same for the command `ecb-methods-filter'. For example
+    texi-sources can only be filtered by the tag-classes "Definitions" and
+    "Sections" and java-sources can be filtered by "Methods", "Variables",
+    "Classes" etc. In general the semantic-variable
+    `semantic-symbol->name-assoc-list' is used to get the right tag-classes.
+
+*** The option `ecb-show-tags' is now defined on a major-mode-basis.
+    This means you can have different settings for each major-mode. ECB autom.
+    upgrades your old setting to the new option-type.
+
+*** Distinction between functions and function-prototypes in the Methods-buffer
+    This is for example useful for C++ and C because these languages distinct
+    between a method-prototype (rsp. function-prototype for C) and the method
+    (rsp. function for C) itself. The new default value of `ecb-show-tags'
+    displayes per default the methods as flattened and the method-prototype as
+    collapsed when opening a C- or C++-buffer. ECB autom. updates your old
+    setting of this option to the new default value.
+
+** The command `ecb-toggle-layout' now has a prefix-argument:
+   If this optional argument is not nil (e.g. if called with a prefix-arg)
+   then always the last selected layout was choosen regardless of the setting
+   in `ecb-toggle-layout-sequence'. The last selected layout is always that
+   layout which was current direct before the most recent layout-switch. So
+   now a user can switch to another layout via `ecb-change-layout' [C-c . l c]
+   and always come back to his previous layout via [C-u C-c . l t].
+
+** Better internal self-monitoring of ECB
+   ECB now monitors itself when Emacs is idle, ie. it monitors if all
+   necessary ecb-functions are still member of the hooks `post-command-hook'
+   and `pre-command-hook'. This is because Emacs resets these hooks to nil if
+   any of the contained hook-functions fails with an error-signal. The
+   ECB-hook-functions are error-save but if any of the "other" hook-functions
+   of these hooks fail then the ECB-hooks would also have been removed from
+   these hooks. The new monitoring-mechanism checks this periodically and
+   re-adds the ECB-hooks if necessary.
+
+** New option group for the integrated speedbar and one new option:
+   The new hook `ecb-speedbar-before-activate-hook' runs directly before ECB
+   activates the integrated speedbar. For example this hook can be used to
+   change the expansion-mode of the integrated speedbar via
+   `speedbar-change-initial-expansion-list'. Example:
+   (speedbar-change-initial-expansion-list "buffers").
+
+** Added a new section in the info-manual which describes how desktop.el can be
+   used best in combination with ECB. This has been done because some
+   conflicts have been reported. See the "Conflicts"-Chapter in the
+   info-manual.
+      
+** Fixed bugs
+
+*** Double-clicking the mouse-1-button now works with integrated speedbar.
+
+*** Fixed two small bugs in the advice of `display-buffer':
+    One bug occured when called for one of the special ECB-buffers. The other
+    bug has not preserved the current-buffer when called for a buffer in the
+    sense of `ecb-compilation-buffer-p' and a hidden compile-window is
+    shown by display-buffer to display this buffer. The latter one for example
+    has prevented the ant-server of JDEE from working properly.
+
+*** Fixed a bug so now always the correct directory in the directories-buffer
+    is higlighted.
+
+    
+
+* Changes for ECB version 2.22
+
+** New nifty feature for filtering the tags displayed in the Methods-buffer
+   You can filter by regexp, protection, tag-class etc. See the new command
+   `ecb-methods-filter' (bound to [C-c . f m] and the new option
+   `ecb-methods-filter-replace-existing' for getting all details.
+
+   Filters can be layered filters, i.e. you can apply filters on top of
+   already applied filters: An example of 3 combined filters would be: Display
+   only all public methods having the string "test" in its name. The modeline
+   of the Methods-buffer always displays the topmost filter. But you can see
+   all currently applied filters by moving the mouse over this section of the
+   modeline: The filters will be displayed as help-echo.
+
+   The new functionality is also completely available via the popup-menu of
+   the Methods-buffer.
+
+   Currently tags of class 'type can not be filtered out, because especially
+   in OO-languages like Java or C++ this makes only less sense because if the
+   class is filtered out then no filter can be applied to its members like
+   methods or attributes.
+
+   These tag-filters can also applied to sources which are not supported by
+   the semantic-parser but "only" by imenu or etags. But because for these
+   sources not all information are avaiable the protection- and tag-class
+   filter can not used with such "non-semantic"-sources.
+
+** All tree-buffer filters are now guarded against filtering out all tags.
+   Each filter which a user can apply to the sources-, methods- or
+   history-buffer is now guarded against filtering out all nodes by accident,
+   ie. if a filter would empty the whole tree-buffer then this filter will be
+   autom. unwinded.
+   
+** Much smarter mechanism to highlight the current tag in the methods-buffer.
+   Previous versions of ECB have always fully expanded the whole tree in the
+   Methods-buffer if the current tag in the source-buffer was not visible in
+   the current tree - e.g. because the variables-bucket was collapsed or the
+   containing type of a tag (e.g. the class of a method) was collapsed. So in
+   most cases much more was expanded as needed to make the current tag
+   visible.
+
+   The mechanism of ECB 2.22 only expands the needed parts of the tree-buffer
+   to make the related node visible: First we try to highlight the current tag
+   with current expansion-state of the Methods-buffer. If the node is not
+   visible so the tag can not be highlighted then we go upstairs the ladder of
+   type-tags the current tag belongs to (e.g. we expand successive the nodes
+   of the whole class-hierachy of the current method-tag until the related
+   node becomes visible). If there is no containing type for the current tag
+   then the node of the tag is probably contained in a toplevel-bucket which
+   is currently collapsed; in this case we expand only this bucket-node and
+   try highlighting again. Only if this has still no success then we expand
+   the full tree-buffer and try to highlight the current tag.
+
+   There is also a new option `ecb-auto-expand-tag-tree-collapse-other': If
+   this option is set then auto. expanding the tag-tree collapses all not
+   related nodes. This means that all nodes which have no relevance for the
+   currently highlighted node will be collapsed, because they are not
+   necessary to make the highlighted node visible. This feature is switched
+   off by default because if always collapses the complete Methods-tree before
+   the the following highlighting of the node for the current tag expands the
+   needed parts of the tree-buffer.
+   
+** The popup-menus can now be nested into 4 levels of submenus. In general there
+   could be an infinite depth of nesting but it makes no sense - if possible
+   at all - to define infinite nested defcustom-types. So there is a limit of
+   4 levels until a user asks for more - then this wish can be satisfied
+   during 1 minute: Just increase the value of the `ecb-max-submenu-depth'
+   before loading ECB. This enhancement affects the four options with name
+   `ecb-*-menu-user-extension'.
+   
+** The indication for ECB in the minor-mode is now hidden when the ECB-windows
+   are visible because in this case the activity of ECB is quite obvious. When
+   the ECB-windows are hidden the the value of `ecb-minor-mode-text' is
+   displayed in the modeline.
+
+** Compatibility enhancements
+
+*** Cause of the fixed bugs the compatibility for `bs-show' has increased when
+    the buffer-selection should be displayed in the permanent compile-window.
+
+** Fixed Bugs
+
+*** Fixed a bug preventing the native Windows-port of XEmacs from working.
+
+*** Makes the behavior of adviced `display-buffer' fully compatible to the
+    original version for all buffers which are neither ecb-tree-buffer nor
+    compilation-buffers in the sense of `ecb-compilation-buffer-p'. These
+    "source-buffers" are now also handled correctly in all situations.
+
+*** Fixed a small bug in `ecb-toggle-compile-window-height'. This bug has
+    influenced the behavior of `display-buffer' when called from programs for
+    "compilation-buffers".
+
+*** Fixed a bug related to the speedbar-integration.
+    This bug complained "Can not switch buffer in dedicated window" when the
+    intergrated speedbar-buffer was selected and the user tries to open a file
+    or to jump to a tag.
+
+*** Fixed a bug for the special ECB-modeline-menu for the XEmacs-modelines.
+    Now only in the special ECB-tree-buffer a special ECB-modeline-menu is
+    bound to mouse-3, all other buffers display the standard modeline-menu of
+    XEmacs.
+
+*** Fixed a bug which occurs with XEmacs in combination with func-menu.
+    But there are still some incompatibilities between ECB and func-menu. So
+    the recommendation is to disable func-menu-support when using ECB.
+    Normally using func-menu makes no sense in combination with ECB because
+    ECB provides the same and even more informations as func-menu - so
+    func-menu is redundant ;-)
+    
+
+
 * Changes for ECB version 2.21
 
 ** Advice for `balance-windows' so only the edit-windows are balanced.
-README for the Emacs Code Browser (ECB) version 2.21
+README for the Emacs Code Browser (ECB) version 2.24
 
 
 About
 
 ECB requires the following packages:
 
-- Semantic, author version between 1.4 and 1.4.9
+- Semantic, author version 1.4 or higher
   (http://cedet.sourceforge.net/semantic.shtml)
   
-- Eieio, author version between 0.17 and 0.17.9
+- Eieio, author version 0.17 or higher
   (http://cedet.sourceforge.net/eieio.shtml).
   
 - speedbar, author version 0.14beta1 or higher
    changing the `load-path' variable directly in your `.emacs' or
    `site-lisp/site-start.el' or by working with a file `subdirs.el'.
 
+   So for example the needed entry for your .emacs-file could be:
+
+      (add-to-list 'load-path
+                   "/path/to/your/ecb/installation/directory")
+
    *ATTENTION*: ECB is NOT properly installed if it's directory is not added
    to `load-path' and for example just loaded by
 
    This loads all available autoloads (e.g. `ecb-activate', `ecb-minor-mode',
    `ecb-show-help' or `ecb-byte-compile') of current ECB.
 
+   Regardless which method you prefer: In both cases the used statement must
+   be placed *after* the statement of step 3!
+
 5. Restart (X)Emacs.
 
 ECB is now ready for use and can be activated by calling `M-x ecb-activate' or
-This file contains some important release-notes for ECB version 2.21
+This file contains some important release-notes for ECB version 2.24
 
 General:
 --------
 No special notes beyond the contents of README.
 
 
+Upgrading from any version:
+---------------------------
+
+The option `ecb-show-tags' has changed its type. ECB autom. upgrades your old
+setting to the new option-type.!
+
+
 Upgrading from versions < 2.20:
 -------------------------------
 

ecb-compatibility.el

     ;; now we handle if bs-show should always display in the compile-window
     (let ((my-bs-buffer (get-buffer-create "*buffer-selection*")))
       ;; ecb-compilation-buffer-p needs a living buffer!
-      (if (and (ecb-compilation-buffer-p my-bs-buffer)
-               ecb-compile-window-height)
-          (ecb-with-adviced-functions
-           (display-buffer (buffer-name my-bs-buffer)))))))
+      (when (and (ecb-compilation-buffer-p my-bs-buffer)
+                 ecb-compile-window-height)
+        (ecb-with-adviced-functions
+         (display-buffer (buffer-name my-bs-buffer)))))))
 
 (defadvice Electric-pop-up-window (around ecb)
   "Ensures that the electric-* commands \(e.g. `electric-buffer-list') work

ecb-compilation.el

   `ecb-compilation-major-modes' or `ecb-compilation-predicates' define the
   buffer as compilation-buffer."
   ;;determine the best valid for the buffer.
-  (let ((buffer (cond ((stringp buffer-or-name)
-                       (get-buffer buffer-or-name))
-                      ((bufferp buffer-or-name)
-                       buffer-or-name)
-                      (t
-                       nil)))
+  (let ((buffer (ecb-buffer-obj buffer-or-name))
         (ecb-comp-predicates (ecb-compilation-predicates)))
     (when buffer
 

ecb-create-layout.el

 
 (require 'ecb-mode-line)
 (require 'ecb-util)
+(require 'ecb-compilation)
 
 ;; XEmacs stuff
 (silentcomp-defvar vertical-divider-map)
   (interactive)
   (when (ecb-create-layout-frame-ok)
     (ecb-create-layout-clear-all (interactive-p))
-    (message "ECB Layout Creation canceled - the layout is not saved!")))
+    (message "ECB Layout Creation canceled - the layout is not saved!")
+    (ecb-activate)))
 
 (defun ecb-create-layout-clear-all (&optional delete-frame)
   "Resets all stuff to state before `ecb-create-new-layout' was called. If
               (ecb-create-layout-save-layout)
             ;; clean the layout creation stuff
             (ecb-create-layout-clear-all delete-frame)
-            (message "ECB Layout Creation finished.")))
+            (message "ECB Layout Creation finished.")
+            (ecb-activate)))
       (ecb-error "You must give every ECB-tree-window a type (use C-t)!"))))
 
 
                                           "Insert the buffer type"))))
       ;; removing the new buffer type from the available-list
       (ecb-create-layout-remove-from-buf-type new-type)
+      ;; TODO: Klaus Berndl <klaus.berndl@sdm.de>: Fix this - it seems not
+      ;; work anymore!!!
       (ecb-mode-line-set (buffer-name (current-buffer))
+                         (selected-frame)
                          (concat "ECB " new-type) nil t)
       ;; setting the new buffer type in the buffer itself
       (ecb-create-layout-set-buffer-type new-type)
   (setq mode-name "ECB Create-Layout")
   (use-local-map ecb-create-layout-mode-map)
   (make-variable-buffer-local 'buffer-read-only)
-  (ecb-mode-line-set (buffer-name (current-buffer)) "" nil t)
+  ;; TODO: Klaus Berndl <klaus.berndl@sdm.de>: Scheint nicht mehr zu
+  ;; funktionieren.
+  (ecb-mode-line-set (buffer-name (current-buffer))
+                     (selected-frame) "" nil t)
   (setq buffer-read-only t))
 
 (defun ecb-create-layout-init-layout (&optional new)
                 ecb-create-layout-help-text-top
               ecb-create-layout-help-text-left-right)))
   (setq ecb-create-layout-edit-window (selected-window))
-  (ecb-mode-line-set (buffer-name (current-buffer)) "   ECB edit-window" nil t)
+  ;; TODO: Klaus Berndl <klaus.berndl@sdm.de>: Scheint nicht mehr zu
+  ;; funktionieren.
+  (ecb-mode-line-set (buffer-name (current-buffer))
+                     (selected-frame) "   ECB edit-window" nil t)
   ;; The edit window must not be dedicated
   (set-window-dedicated-p (selected-window) nil)
   ;; we set the buffer for the (currently unsplitted) ECB-window
                        (menu-bar-lines . 0))))))
          
 
-
+;; TODO: Klaus Berndl <klaus.berndl@sdm.de>: Wir m�ssen ev. ECB vorher
+;; deaktivieren, da sonst ein 2. ECB-menu entsteht. Beim C-c oder C-q eben
+;; dann wieder aktivieren.
 (defun ecb-create-new-layout ()
   "Start interactively layout creating."
   (interactive)
 
+  (ecb-deactivate)
   (ecb-create-layout-initilize)
 
   ;; before- and after make frame stuff

ecb-file-browser.el

   :group 'ecb-directories
   :type `(repeat (regexp :tag "Directory-regexp")))
 
+(defcustom ecb-prescan-directories-for-emptyness t
+  "*Prescan directories for emptyness.
+ECB does this so directories are displayed as empty in the directories-buffer
+even without user-interaction \(i.e. in previous ECB-versions the emptyness of
+a directory has been first checked when the user has clicked onto a
+directory). ECB optimizes this check as best as possible but if a directory
+contains a lot of subdirectories which contain in turn a lot of entries, then
+expanding such a directory or selecting it takes of course more time as
+without this check - at least at the first time \(all following selects of a
+directory uses the cached information if its subdirectories are empty or not).
+Therefore this feature can be switched of via this option."
+  :group 'ecb-directories
+  :type 'boolean)
 
 (defcustom ecb-directories-buffer-name " *ECB Directories*"
   "*Name of the ECB directory buffer.
    non-selectable menu-separator is displayed.
 c) Submenu: A list where the first element is the title of the submenu
    displayed in the main-menu and all other elements are either menu-commands
-   \(see a) or separators \(see b).
+   \(see a) or separators \(see b) or another submenu \(see c). This allows
+   deep nested menu-submenu-structures. Currently a level of 4 is allowed but
+   in general there could be an infinite depth of nesting but it makes no
+   sense - if possible at all - to define infinite nested defcustom-types. So
+   there is a limit of 4 levels but tis is not a hard limit: Just increase the
+   value of the `ecb-max-submenu-depth' *BEFORE* first loading ECB!
 
 The function of a menu-command must follow the following guidelines: Such a
 function must be defined with the macro `tree-buffer-defpopup-command! This
 These menu-extensions are static. A dynamic menu-extension can be achieved via
 `ecb-directories-menu-user-extension-function'."
   :group 'ecb-directories
-  :type '(repeat (choice :tag "Menu-entry" :menu-tag "Menu-entry"
-                         :value (ignore "")
-                         (const :tag "Separator" :value ("---"))
-                         (list :tag "Menu-command"
-                               (function :tag "Function" :value ignore)
-                               (string :tag "Entry-name"))
-                         (cons :tag "Submenu"
-                               (string :tag "Submenu-title")
-                               (repeat (choice :tag "Submenu-entry" :menu-tag "Submenu-entry"
-                                               :value (ignore "")
-                                               (const :tag "Separator" :value ("---"))
-                                               (list :tag "Submenu-command"
-                                                     (function :tag "Function"
-                                                               :value ignore)
-                                                     (string :tag "Entry-name"))))))))
+  :type (ecb-create-menu-user-ext-type 1 ecb-max-submenu-depth))
 
 (defcustom ecb-directories-menu-user-extension-function nil
   "*Dynamic user extensions for the popup-menu of the directories buffer.
 built-in menu-entries of `ecb-sources-menu' but the whole menu can be
 re-arranged with `ecb-sources-menu-sorter'."
   :group 'ecb-sources
-  :type '(repeat (choice :tag "Menu-entry" :menu-tag "Menu-entry"
-                         :value (ignore "")
-                         (const :tag "Separator" :value ("---"))
-                         (list :tag "Menu-command"
-                               (function :tag "Function" :value ignore)
-                               (string :tag "Entry-name"))
-                         (cons :tag "Submenu"
-                               (string :tag "Submenu-title")
-                               (repeat (choice :tag "Submenu-entry" :menu-tag "Submenu-entry"
-                                               :value (ignore "")
-                                               (const :tag "Separator" :value ("---"))
-                                               (list :tag "Submenu-command"
-                                                     (function :tag "Function"
-                                                               :value ignore)
-                                                     (string :tag "Entry-name"))))))))
+  :type (ecb-create-menu-user-ext-type 1 ecb-max-submenu-depth))
 
 (defcustom ecb-sources-menu-user-extension-function nil
   "*Dynamic user extensions for the popup-menu of the sources buffer.
 built-in menu-entries of `ecb-history-menu' but the whole menu can be
 re-arranged with `ecb-history-menu-sorter'."
   :group 'ecb-history
-  :type '(repeat (choice :tag "Menu-entry" :menu-tag "Menu-entry"
-                         :value (ignore "")
-                         (const :tag "Separator" :value ("---"))
-                         (list :tag "Menu-command"
-                               (function :tag "Function" :value ignore)
-                               (string :tag "Entry-name"))
-                         (cons :tag "Submenu"
-                               (string :tag "Submenu-title")
-                               (repeat (choice :tag "Submenu-entry" :menu-tag "Submenu-entry"
-                                               :value (ignore "")
-                                               (const :tag "Separator" :value ("---"))
-                                               (list :tag "Submenu-command"
-                                                     (function :tag "Function"
-                                                               :value ignore)
-                                                     (string :tag "Entry-name"))))))))
-
+  :type (ecb-create-menu-user-ext-type 1 ecb-max-submenu-depth))
 
 (defcustom ecb-history-menu-user-extension-function nil
   "*Dynamic user extensions for the popup-menu of the history buffer.
 (defun ecb-files-from-cvsignore (dir)
   "Return an expanded list of filenames which are excluded by the .cvsignore
 file in current directory."
-  (let ((cvsignore-content (ecb-file-content-as-string
-                            (expand-file-name ".cvsignore" dir)))
+  (let* ((fixed-path (ecb-fix-path dir))
+         (cvsignore-content (ecb-file-content-as-string
+                            (expand-file-name ".cvsignore" fixed-path)))
         (files nil))
     (when cvsignore-content
       (dolist (f (split-string cvsignore-content))
-        (setq files (append (directory-files dir nil (wildcard-to-regexp f) t)
+        (setq files (append (directory-files fixed-path nil
+                                             (wildcard-to-regexp f) t)
                             files)))
       files)))
 
               (throw 'exit elem)))
         nil))))
 
-
+                                                   
 (defun ecb-get-files-and-subdirs (dir)
   "Return a cons cell where car is a list of all files to display in DIR and
 cdr is a list of all subdirs to display in DIR. Both lists are sorted
 according to `ecb-sources-sort-method'."
   (or (ecb-files-and-subdirs-cache-get dir)
       ;; dir is not cached
-      (let ((files (directory-files dir nil nil t))
+      (let ((files (directory-files (ecb-fix-path dir) nil nil t))
             (source-regexps (or (ecb-check-directory-for-source-regexps
                                  (ecb-fix-filename dir))
                                 '("" "")))
          ;; updating the buffer itself
          (tree-buffer-set-root new-tree)
          (tree-buffer-update)
-               
+
          ;; check if the sources buffer for this directory must be
          ;; cached: If yes update the cache
          (when (ecb-check-directory-for-caching
            (if (string-match filter-regexp file)
                (setq filtered-files
                      (cons file filtered-files))))
-         ;; building up the new files-tree
-         (ecb-tree-node-add-files
-          new-tree
-          ecb-path-selected-directory
-          (nreverse filtered-files)
-          0 ecb-show-source-file-extension old-children t)
+         (if (null filtered-files)
+             (message "ECB has not applied this filter because it would filter out all files!")
+           ;; building up the new files-tree
+           (ecb-tree-node-add-files
+            new-tree
+            ecb-path-selected-directory
+            (nreverse filtered-files)
+            0 ecb-show-source-file-extension old-children t)
 
-         ;; updating the buffer itself
-         (tree-buffer-set-root new-tree)
-         (tree-buffer-update)
-         (tree-buffer-scroll (point-min) (point-min))
-         (tree-buffer-highlight-node-data ecb-path-selected-source)
+           ;; updating the buffer itself
+           (tree-buffer-set-root new-tree)
+           (tree-buffer-update)
+           (tree-buffer-scroll (point-min) (point-min))
+           (tree-buffer-highlight-node-data ecb-path-selected-source)
 
-         ;; add the new filter to the cache, so the next call to
-         ;; `ecb-update-sources-buffer' displays the filtered sources.
-         (ecb-sources-cache-add-filtered ecb-path-selected-directory
-                                         (list (tree-buffer-get-root)
-                                               (ecb-copy-list tree-buffer-nodes)
-                                               (buffer-string)
-                                               (cons filter-regexp
-                                                     (or filter-display
-                                                         filter-regexp))))))))
+           ;; add the new filter to the cache, so the next call to
+           ;; `ecb-update-sources-buffer' displays the filtered sources.
+           (ecb-sources-cache-add-filtered ecb-path-selected-directory
+                                           (list (tree-buffer-get-root)
+                                                 (ecb-copy-list tree-buffer-nodes)
+                                                 (buffer-string)
+                                                 (cons filter-regexp
+                                                       (or filter-display
+                                                           filter-regexp)))))))))
   ;; now we update the mode-lines so the current filter (can be no filter) is
   ;; displayed in the mode-line. See `ecb-sources-filter-modeline-prefix'.
   (ecb-mode-line-format))
-    
 
 (defun ecb-set-selected-directory (path &optional force)
   "Set the contents of the ECB-directories and -sources buffer correct for the
   "Reset the `ecb-history-filter' so all file-buffers are displayed."
   (setq ecb-history-filter '(identity . nil)))
 
+(defun ecb-history-filter-reset-p ()
+  (null (cdr ecb-history-filter)))
+
 (ecb-reset-history-filter)
 
 (defun ecb-add-all-buffers-to-history ()
         (reverse (buffer-list)))
   (ecb-sort-history-buffer)
   (ecb-update-history-window (buffer-file-name ecb-last-source-buffer))
+  (when (and (save-excursion
+               (set-buffer ecb-history-buffer-name)
+               (tree-buffer-empty-p))
+             (not (ecb-history-filter-reset-p)))
+    (ecb-add-all-buffers-to-history)
+    (message "ECB has not applied this filter because it would filter out all entries!"))
   ;; now the modeline has to display the current filter
   (ecb-mode-line-format))
 
                        file
                      (file-name-sans-extension file)))
            (displayed-file file-1))
+      ;; TODO: Klaus Berndl <klaus.berndl@sdm.de>: Hier wenn dann den
+      ;; empty-check einbauen wenn type = 0!
       (tree-node-add-child
        node
        (ecb-new-child
         old-children
         displayed-file
         type filename
-        (or not-expandable (= type 1))
+        (or not-expandable
+            (= type 1)
+            (ecb-check-emptyness-of-dir filename))
         (if ecb-truncate-long-names 'end))))))
 
 
       (setq paths (append paths (funcall (car ecb-source-path-functions)))
 	    func (cdr func)))
     (while paths
-      (setq rpaths (cons (expand-file-name (car paths)) rpaths)
+      (setq rpaths (cons (ecb-fix-filename (car paths)) rpaths)
 	    paths (cdr paths)))
     rpaths))
 
 		  (name (if (listp dir) (cadr dir) norm-dir)))
 	     (tree-node-add-child
 	      node
-	      (ecb-new-child old-children name 2 norm-dir nil
+              ;; TODO: Klaus Berndl <klaus.berndl@sdm.de>: Hier wenn dann den
+              ;; empty-check einbauen!
+	      (ecb-new-child old-children name 2 norm-dir
+                             (ecb-check-emptyness-of-dir norm-dir)
 			     (if ecb-truncate-long-names 'beginning)))))
-         ;; 	 (when (not paths)
-         ;; 	   (tree-node-add-child node (tree-node-new "Welcome to ECB! Please select:"
-         ;; 						    3 '(lambda()) t))
-         ;;            (tree-node-add-child node (tree-node-new "" 3 '(lambda()) t))
-         ;;            (tree-node-add-child node (tree-node-new "[F2] Customize ECB" 3
-         ;;                                                     'ecb-customize t))
-         ;;            (tree-node-add-child node (tree-node-new "[F3] ECB Help" 3
-         ;;                                                     'ecb-show-help t))
-         ;;            (tree-node-add-child
-         ;;             node (tree-node-new
-         ;;                   "[F4] Add Source Path" 3
-         ;;                   '(lambda () (call-interactively 'ecb-add-source-path)) t)))
          (tree-buffer-update))))))
 
 
+;; TODO: Klaus Berndl <klaus.berndl@sdm.de>: DAS TESTEN TESTEN TESTEN
+(defvar ecb-directory-empty-cache nil
+  "Cache for every directory if it is empty or not. This is an alist where an
+element looks like:
+   \(<directory> . \(\[nil|t] . <checked-with-show-sources>")
+
+
+(defun ecb-directory-empty-cache-add (cache-elem)
+  (if (not (ecb-directory-empty-cache-get (car cache-elem)))
+      (setq ecb-directory-empty-cache
+            (cons cache-elem ecb-directory-empty-cache))))
+
+
+(defun ecb-directory-empty-cache-get (dir)
+  (cdr (assoc dir ecb-directory-empty-cache)))
+
+
+(defun ecb-directory-empty-cache-remove (dir)
+  (let ((elem (assoc dir ecb-directory-empty-cache)))
+    (if elem
+        (setq ecb-directory-empty-cache
+              (delete elem ecb-directory-empty-cache)))))
+
+
+(defun ecb-clear-directory-empty-cache ()
+  (setq ecb-directory-empty-cache nil))
+
+
+(defun ecb-check-emptyness-of-dir (dir)
+  (if (not ecb-prescan-directories-for-emptyness)
+      nil
+    (let ((cache-value (ecb-directory-empty-cache-get dir))
+          (show-sources (ecb-show-sources-in-directories-buffer-p)))
+      (if (and cache-value
+               (equal (cdr cache-value) show-sources))
+          (car cache-value)
+        (ecb-directory-empty-cache-remove dir)
+        (let ((entries (directory-files dir nil nil t))
+              (just-files-means-empty (not show-sources))
+              (full-file-name nil)
+              (empty-p nil))
+          (setq empty-p
+                (catch 'found
+                  (dolist (e entries)
+                    (when (not (member e '("." ".." "CVS")))
+                      (setq full-file-name (ecb-fix-filename dir e))
+                      (if (file-directory-p full-file-name)
+                          (throw 'found 'nil)
+                        (if (not just-files-means-empty)
+                            (throw 'found 'nil)))))
+                  t))
+          ;; now we add this value to the cache
+          (ecb-directory-empty-cache-add (cons (ecb-fix-filename dir)
+                                               (cons empty-p show-sources)))
+          empty-p)))))
+
+
 (defun ecb-new-child (old-children name type data &optional not-expandable shorten-name)
   "Return a node with type = TYPE, data = DATA and name = NAME. Tries to find
 a node with matching TYPE and DATA in OLD-CHILDREN. If found no new node is
 created but only the fields of this node will be updated. Otherwise a new node
 is created."
+  ;; TODO: Klaus Berndl <klaus.berndl@sdm.de>: Here we prescan for emptyness
+  ;; of directories in case DATA is a directory. We do this with
+  ;; `ecb-get-files-and-subdirs' because:
+  ;; - only this function takes all ecb-options into account which influences
+  ;;   the display of certain directories or files
+  ;; - this function gets its informations from a fast cache access if
+  ;;   possible
+  ;; - stores autom. all scanned directories in its cache so for the next time
+  ;;   the access is as fast as possible.
+  ;; Nevertheless this mechanism increases the time ECB now needs when
+  ;; clicking onto a directory or expanding a directory - the real loss of
+  ;; time depends on the number of entries for the directory of DATA! So it
+  ;; would be good if we good enhance this! The best would be a fast routine
+  ;; which checks only if a directory contains subdirs and/or files and then
+  ;; we give 'ecb-get-files-and-subdirs' a new argument which tells this
+  ;; function if only the dir should be checked for emptyness or if a full
+  ;; files- and subdirs-contents-access should be made. But i doubt if this is
+  ;; possible.
+  ;; When all this performs fast enough then we make an customizable option
+  ;; for `ecb-prescan-directories-for-emptyness'
+;;   (if (and ecb-prescan-directories-for-emptyness
+;;            (file-directory-p data))
+;;       (let ((files-and-subdirs (ecb-get-files-and-subdirs data)))
+;;         (if (and (= (length (cdr files-and-subdirs)) 0)
+;;                  (or (not (ecb-show-sources-in-directories-buffer-p))
+;;                      (= (length (car files-and-subdirs)) 0)))
+;;             (setq not-expandable t))))
+;;   (if (and ecb-prescan-directories-for-emptyness
+;;            (file-directory-p data)
+;;            (ecb-check-emptyness-of-dir data))
+;;       (setq not-expandable t))
   (catch 'exit
     (dolist (child old-children)
       (when (and (equal (tree-node-get-data child) data)
 
 (defun ecb-remove-dir-from-caches (dir)
   (ecb-files-and-subdirs-cache-remove dir)
+  (ecb-directory-empty-cache-remove dir)
   (ecb-sources-cache-remove dir))
 
 (defun ecb-directory-update-speedbar (dir)
         (progn
           (if (= 2 ecb-button)
               (when (tree-node-is-expandable node)
-                (tree-node-toggle-expanded node))
+                (tree-node-toggle-expanded node)
+                (ecb-exec-in-directories-window
+                 ;; Update the tree-buffer with optimized display of NODE
+                 (tree-buffer-update node)))
             
             ;; Removing the element from the sources-cache and the
             ;; files-and-subdirs-cache
             (ecb-set-selected-directory (tree-node-get-data node) shift-mode)
             ;; if we have running an integrated speedbar we must update the
             ;; speedbar 
-            (ecb-directory-update-speedbar (tree-node-get-data node)))
+            (ecb-directory-update-speedbar (tree-node-get-data node))))
           
-          (ecb-exec-in-directories-window
-           ;; Update the tree-buffer with optimized display of NODE
-           (tree-buffer-update node)))
+;;           (ecb-exec-in-directories-window
+;;            ;; Update the tree-buffer with optimized display of NODE
+;;            (tree-buffer-update node)))
       (ecb-set-selected-source (tree-node-get-data node)
                                (ecb-combine-ecb-button/edit-win-nr ecb-button edit-window-nr)
 			       shift-mode))))
   (interactive "nLevel: ")
   (save-selected-window
     (ecb-exec-in-directories-window
-     (tree-buffer-expand-nodes level)))
+     (dolist (node (tree-node-get-children (tree-buffer-get-root)))
+       (tree-buffer-expand-node node level))
+     (tree-buffer-update)))
   (ecb-current-buffer-sync 'force))
 
 
 	("Filter"
          (ecb-popup-history-filter-by-ext "Filter by extension")
          (ecb-popup-history-filter-by-regexp "Filter by regexp")
-         (ecb-popup-history-filter-all-existing "No filter (all file-buffers)"))
+         (ecb-popup-history-filter-all-existing "No filter"))
         ("---")
+        (ecb-popup-history-filter-all-existing "Exactly all living file-buffers")
         (ecb-history-kill-buffer "Kill Buffer")
         (ecb-delete-source "Delete Sourcefile")
         ("---")
                                    dyn-builtin-extension))))))
 
 
+(defun ecb-create-directories-tree-buffer ()
+  "Create the tree-buffer for directories"
+  (tree-buffer-create
+   ecb-directories-buffer-name
+   ecb-frame
+   'ecb-interpret-mouse-click
+   'ecb-tree-buffer-node-select-callback
+   'ecb-tree-buffer-node-expand-callback
+   'ecb-tree-buffer-node-collapsed-callback
+   'ecb-mouse-over-directory-node
+   'equal
+   (list 0)
+   (list 1)
+   'ecb-directories-menu-creator
+   (list (cons 0 ecb-directories-menu-title-creator)
+         (cons 1 ecb-directories-menu-title-creator)
+         (cons 2 ecb-directories-menu-title-creator))
+   (nth 0 ecb-truncate-lines)
+   t
+   ecb-tree-indent
+   ecb-tree-incremental-search
+   nil
+   ecb-tree-navigation-by-arrow
+   ecb-tree-easy-hor-scroll
+   (nth 0 ecb-tree-image-icons-directories)
+   (nth 1 ecb-tree-image-icons-directories)
+   ecb-tree-buffer-style
+   ecb-tree-guide-line-face
+   (list (cons 1 ecb-source-in-directories-buffer-face))
+   ecb-tree-expand-symbol-before
+   ecb-directory-face
+   ecb-directories-general-face
+   ;; we add an after-create-hook to the tree-buffer
+   (append
+    (list (function (lambda ()
+                      (local-set-key [f2] 'ecb-customize)
+                      (local-set-key [f3] 'ecb-show-help)
+                      (local-set-key [f4] 'ecb-add-source-path)
+                      (local-set-key (kbd "C-t")
+                                     'ecb-toggle-RET-selects-edit-window)
+                      (if (not ecb-running-xemacs)
+                          (define-key tree-buffer-key-map
+                            [mode-line mouse-2]
+                            'ecb-toggle-maximize-ecb-window-with-mouse)))))
+    ecb-common-tree-buffer-after-create-hook
+    ecb-directories-buffer-after-create-hook)
+   ))
+
+(defun ecb-create-sources-tree-buffer ()
+  "Create the tree-buffer for sources"
+  (tree-buffer-create
+   ecb-sources-buffer-name
+   ecb-frame
+   'ecb-interpret-mouse-click
+   'ecb-tree-buffer-node-select-callback
+   'ecb-tree-buffer-node-expand-callback
+   'ecb-tree-buffer-node-collapsed-callback
+   'ecb-mouse-over-source-node
+   'equal
+   nil
+   nil                     ;(list 0) ;; set this list if you want leaf-symbols
+   'ecb-sources-menu-creator
+   (list (cons 0 ecb-sources-menu-title-creator))
+   (nth 1 ecb-truncate-lines)
+   t
+   ecb-tree-indent
+   ecb-tree-incremental-search
+   nil
+   ecb-tree-navigation-by-arrow
+   ecb-tree-easy-hor-scroll
+   (nth 0 ecb-tree-image-icons-directories)
+   (nth 2 ecb-tree-image-icons-directories)
+   ecb-tree-buffer-style
+   ecb-tree-guide-line-face
+   nil
+   ecb-tree-expand-symbol-before
+   ecb-source-face
+   ecb-sources-general-face
+   (append
+    (list (function (lambda ()
+                      (local-set-key (kbd "C-t")
+                                     'ecb-toggle-RET-selects-edit-window)
+                      (if (not ecb-running-xemacs)
+                          (define-key tree-buffer-key-map
+                            [mode-line mouse-2]
+                            'ecb-toggle-maximize-ecb-window-with-mouse)))))
+    ecb-common-tree-buffer-after-create-hook
+    ecb-directories-buffer-after-create-hook)))
+
+(defun ecb-create-history-tree-buffer ()
+  "Create the tree-buffer for history"
+  (tree-buffer-create
+   ecb-history-buffer-name
+   ecb-frame
+   'ecb-interpret-mouse-click
+   'ecb-tree-buffer-node-select-callback
+   'ecb-tree-buffer-node-expand-callback
+   'ecb-tree-buffer-node-collapsed-callback
+   'ecb-mouse-over-history-node
+   'equal
+   nil
+   nil
+   'ecb-history-menu-creator
+   (list (cons 0 ecb-history-menu-title-creator))
+   (nth 3 ecb-truncate-lines)
+   t
+   ecb-tree-indent
+   ecb-tree-incremental-search
+   nil
+   ecb-tree-navigation-by-arrow
+   ecb-tree-easy-hor-scroll
+   (nth 0 ecb-tree-image-icons-directories)
+   (nth 4 ecb-tree-image-icons-directories)
+   ecb-tree-buffer-style
+   ecb-tree-guide-line-face
+   nil
+   ecb-tree-expand-symbol-before
+   ecb-history-face
+   ecb-history-general-face
+   (append
+    (list (function (lambda ()
+                      (local-set-key (kbd "C-t")
+                                     'ecb-toggle-RET-selects-edit-window)
+                      (if (not ecb-running-xemacs)
+                          (define-key tree-buffer-key-map
+                            [mode-line mouse-2]
+                            'ecb-toggle-maximize-ecb-window-with-mouse)))))
+    ecb-common-tree-buffer-after-create-hook
+    ecb-directories-buffer-after-create-hook)))
+
 (silentcomp-provide 'ecb-file-browser)
 
 ;;; ecb-file-browser.el ends here
     (let* ((messages-buffer 
 	    (get-buffer
 	     (if ecb-running-xemacs " *Message-Log*" "*Messages*")))
-	   (backtrace-buffer (get-buffer "*Backtrace*")))
+	   (backtrace-buffer (get-buffer "*Backtrace*"))
+           (tag-dump-buffer (get-buffer "*ecb-tag-dump*")))
+
+      ;;insert the contents of the tag-dump buffer if it is there. 
+      (insert "\n\n-----------------------------------------------------\n")
+      (if tag-dump-buffer
+          (progn
+            (insert "The contents of the *ecb-tag-dump* buffer were\n\n")
+	    (insert-buffer tag-dump-buffer)
+            ;; we must force the mark
+	    (goto-char (mark t))
+            (insert "\nEnd Insert *ecb-tag-dump* buffer" ))
+        (insert "There was no *ecb-tag-dump* buffer" ))
+      (insert "\n-----------------------------------------------------\n\n")
 
       ;;insert the contents of the backtrace buffer if it is there. 
       (insert "\n\n-----------------------------------------------------\n")
Add a comment to this file

ecb-images/default/height-10/ecb-close.xpm

Old
Old image
New
New image
-/* XPM */
-static char * close_xpm[] = {
-"16 10 28 1",
+/* XPM */ 
+static char * ecbclose_xpm[] = {
+"16 10 35 1",
 " 	c None",
-".	c #840000",
-"+	c #850404",
-"@	c #911F1F",
-"#	c #8C1313",
-"$	c #911E1E",
-"%	c #9B3333",
-"&	c #9C3636",
-"*	c #8F1616",
-"=	c #860404",
-"-	c #922020",
-";	c #9C3434",
-">	c #9E3B3B",
-",	c #A54545",
-"'	c #AA4F4F",
-")	c #952424",
-"!	c #952727",
-"~	c #9E3A3A",
-"{	c #A44444",
-"]	c #AD5555",
-"^	c #952525",
-"/	c #9C3131",
-"(	c #AB5050",
-"_	c #AA5050",
-":	c #921E1E",
-"<	c #880707",
-"[	c #A13D3D",
-"}	c #932020",
-"                ",
-"   ..           ",
-"  +@#.          ",
-" .$%&*.         ",
-"=-;>,').        ",
-"=!~{']^.        ",
-" ./(_:.         ",
-"  <[}.          ",
-"   ..           ",
-"                "};
+"!	c black",
+"#	c white",
+"$	c #7898B5",
+"%	c #FCFCFB",
+"&	c #FDFDFB",
+"'	c #040404",
+"(	c #FCFCFA",
+")	c #F7F6F3",
+"*	c #F7F7F5",
+"+	c #F7F7F4",
+",	c #F6F6F4",
+"-	c #F1F0EB",
+".	c #E5E1DA",
+"0	c #A5A5C6",
+"1	c #F5F5F1",
+"2	c #DFDBD2",
+"3	c #F2F2EE",
+"4	c #F0F0EC",
+"5	c #EDEDE7",
+"6	c #EAE9E3",
+"7	c #E3E0D9",
+"8	c #DBD6CC",
+"9	c #E4E1D9",
+":	c #DCD8CF",
+";	c #D8D3C9",
+"<	c #D6D1C6",
+"=	c #D2CCC0",
+">	c #CFC8BB",
+"?	c #D2CCBF",
+"@	c #C6BEAE",
+"A	c #C2B8A8",
+"B	c #C1B8A7",
+"C	c #C0B7A6",
+"D	c #C3BAAA",
+" #$$$$$$$#      ",
+" $#######$      ",
+" $%&&'%()$      ",
+" $**+',-.$      ",
+"0$1'''''2$      ",
+" $345'678$      ",
+" $9:;'<=>$      ",
+" $?@ABBCD$      ",
+" #$$$$$$$#      ",
+"                "};
Add a comment to this file

ecb-images/default/height-10/ecb-handle.xpm

Old
Old image
New
New image
-/* XPM */
-static char * handle_xpm[] = {
-"10 10 2 1",
+/* XPM */ 
+static char * ecbhandle_xpm[] = {
+"8 10 3 1",
 " 	c None",
-".	c #ADA5C6",
-"          ",
-"          ",
-"          ",
-"          ",
-"..........",
-"          ",
-"          ",
-"          ",
-"          ",
-"          "};
+"!	c black",
+"#	c #ADA5C6",
+"        ",
+"        ",
+"        ",
+"        ",
+"########",
+"        ",
+"        ",
+"        ",
+"        ",
+"        "};
Add a comment to this file

ecb-images/default/height-10/ecb-no-handle.xpm

Old
Old image
New
New image
-/* XPM */
-static char * no_handle_xpm[] = {
-"10 10 1 1",
+/* XPM */ 
+static char * ecbnohandle_xpm[] = {
+"8 10 2 1",
 " 	c None",
-"          ",
-"          ",
-"          ",
-"          ",
-"          ",
-"          ",
-"          ",
-"          ",
-"          ",
-"          "};
+"!	c black",
+"        ",
+"        ",
+"        ",
+"        ",
+"        ",
+"        ",
+"        ",
+"        ",
+"        ",
+"        "};
Add a comment to this file

ecb-images/default/height-10/ecb-open.xpm

Old
Old image
New
New image
-/* XPM */
-static char * open_xpm[] = {
-"16 10 31 1",
+/* XPM */ 
+static char * ecbopen_xpm[] = {
+"16 10 37 1",
 " 	c None",
-".	c #004200",
-"+	c #044504",
-"@	c #1F591F",
-"#	c #135013",
-"$	c #1E591E",
-"%	c #336633",
-"&	c #366936",
-"*	c #165216",
-"=	c #205B20",
-"-	c #346734",
-";	c #3B6C3B",
-">	c #457345",
-",	c #4B7A4B",
-"'	c #235C23",
-")	c #275E27",
-"!	c #3A6C3A",
-"~	c #447244",
-"{	c #4B794B",
-"]	c #538253",
-"^	c #255E25",
-"/	c #316531",
-"(	c #4C7A4C",
-"_	c #4F7F4F",
-":	c #1E581E",
-"<	c #064706",
-"[	c #3C6F3C",
-"}	c #205920",
-"|	c #24582B",
-"1	c #0C490E",
-"2	c #A5A5C6",
-"                ",
-"   ..           ",
-"  +@#.          ",
-" .$%&*.         ",
-"+=-;>,'.        ",
-"+)!~{]^.        ",
-" ./(_:.         ",
-"  <[}.          ",
-"   |1           ",
-"   2            "};
+"!	c black",
+"#	c white",
+"$	c #7898B5",
+"%	c #FCFCFB",
+"&	c #FDFDFB",
+"'	c #FCFCFA",
+"(	c #F7F6F3",
+")	c #F7F7F5",
+"*	c #F7F7F4",
+"+	c #F6F6F4",
+",	c #F1F0EB",
+"-	c #E5E1DA",
+".	c #A5A5C6",
+"0	c #F5F5F1",
+"1	c #040404",
+"2	c #DFDBD2",
+"3	c #F2F2EE",
+"4	c #F0F0EC",
+"5	c #EDEDE7",
+"6	c #ECEBE6",
+"7	c #EAE9E3",
+"8	c #E3E0D9",
+"9	c #DBD6CC",
+":	c #E4E1D9",
+";	c #DCD8CF",
+"<	c #D8D3C9",
+"=	c #D7D2C7",
+">	c #D6D1C6",
+"?	c #D2CCC0",
+"@	c #CFC8BB",
+"A	c #D2CCBF",
+"B	c #C6BEAE",
+"C	c #C2B8A8",
+"D	c #C1B8A7",
+"E	c #C0B7A6",
+"F	c #C3BAAA",
+" #$$$$$$$#      ",
+" $#######$      ",
+" $%&&&%'($      ",
+" $))**+,-$      ",
+".$0111112$      ",
+" $3456789$      ",
+" $:;<=>?@$      ",
+" $ABCDDEF$      ",
+" #$$$$$$$#      ",
+"     .          "};
Add a comment to this file

ecb-images/default/height-15/ecb-close.xpm

Old
Old image
New
New image
-/* XPM */
-static char *close[] = {
-/* width height num_colors chars_per_pixel */
-"    16    15      256            2",
-/* colors */ 
-"`` c #840000",
-"`. c #942929",
-"`# c #9c3131",
-"`a c #9c3939",
-"`b c #a54242",
-"`c c #a54a4a",
-"`d c #ad4a4a",
-"`e c #ad5252",
-"`f c #ad5a5a",
-"`g c None", 
-"`h c #ffffff",
-"`i c #ffffff",
-"`j c #ffffff",
-"`k c #ffffff",
-"`l c #ffffff",
-"`m c #ffffff",
-"`n c #ffffff",
-"`o c #ffffff",
-"`p c #ffffff",
-"`q c #ffffff",
-"`r c #ffffff",
-"`s c #ffffff",
-"`t c #ffffff",
-"`u c #ffffff",
-"`v c #ffffff",
-"`w c #ffffff",
-"`x c #ffffff",
-"`y c #ffffff",
-"`z c #ffffff",
-"`A c #ffffff",
-"`B c #ffffff",
-"`C c #ffffff",
-"`D c #ffffff",
-"`E c #ffffff",
-"`F c #ffffff",
-"`G c #ffffff",
-"`H c #ffffff",
-"`I c #ffffff",
-"`J c #ffffff",
-"`K c #ffffff",
-"`L c #ffffff",
-"`M c #ffffff",
-"`N c #ffffff",
-"`O c #ffffff",
-"`P c #ffffff",
-"`Q c #ffffff",
-"`R c #ffffff",
-"`S c #ffffff",
-"`T c #ffffff",
-"`U c #ffffff",
-"`V c #ffffff",
-"`W c #ffffff",
-"`X c #ffffff",
-"`Y c #ffffff",
-"`Z c #ffffff",
-"`0 c #ffffff",
-"`1 c #ffffff",
-"`2 c #ffffff",
-"`3 c #ffffff",
-"`4 c #ffffff",
-"`5 c #ffffff",
-"`6 c #ffffff",
-"`7 c #ffffff",
-"`8 c #ffffff",
-".` c #ffffff",
-".. c #ffffff",
-".# c #ffffff",
-".a c #ffffff",
-".b c #ffffff",
-".c c #ffffff",
-".d c #ffffff",
-".e c #ffffff",
-".f c #ffffff",
-".g c #ffffff",
-".h c #ffffff",
-".i c #ffffff",
-".j c #ffffff",
-".k c #ffffff",
-".l c #ffffff",
-".m c #ffffff",
-".n c #ffffff",
-".o c #ffffff",
-".p c #ffffff",
-".q c #ffffff",
-".r c #ffffff",
-".s c #ffffff",
-".t c #ffffff",
-".u c #ffffff",
-".v c #ffffff",
-".w c #ffffff",
-".x c #ffffff",
-".y c #ffffff",
-".z c #ffffff",
-".A c #ffffff",
-".B c #ffffff",
-".C c #ffffff",
-".D c #ffffff",
-".E c #ffffff",
-".F c #ffffff",
-".G c #ffffff",
-".H c #ffffff",
-".I c #ffffff",
-".J c #ffffff",
-".K c #ffffff",
-".L c #ffffff",
-".M c #ffffff",
-".N c #ffffff",
-".O c #ffffff",
-".P c #ffffff",
-".Q c #ffffff",
-".R c #ffffff",
-".S c #ffffff",
-".T c #ffffff",
-".U c #ffffff",
-".V c #ffffff",
-".W c #ffffff",
-".X c #ffffff",
-".Y c #ffffff",
-".Z c #ffffff",
-".0 c #ffffff",
-".1 c #ffffff",
-".2 c #ffffff",
-".3 c #ffffff",
-".4 c #ffffff",
-".5 c #ffffff",
-".6 c #ffffff",
-".7 c #ffffff",
-".8 c #ffffff",
-"#` c #ffffff",
-"#. c #ffffff",
-"## c #ffffff",
-"#a c #ffffff",
-"#b c #ffffff",
-"#c c #ffffff",
-"#d c #ffffff",
-"#e c #ffffff",
-"#f c #ffffff",
-"#g c #ffffff",
-"#h c #ffffff",
-"#i c #ffffff",
-"#j c #ffffff",
-"#k c #ffffff",
-"#l c #ffffff",
-"#m c #ffffff",
-"#n c #ffffff",
-"#o c #ffffff",
-"#p c #ffffff",
-"#q c #ffffff",
-"#r c #ffffff",
-"#s c #ffffff",
-"#t c #ffffff",
-"#u c #ffffff",
-"#v c #ffffff",
-"#w c #ffffff",
-"#x c #ffffff",
-"#y c #ffffff",
-"#z c #ffffff",
-"#A c #ffffff",
-"#B c #ffffff",
-"#C c #ffffff",
-"#D c #ffffff",
-"#E c #ffffff",
-"#F c #ffffff",
-"#G c #ffffff",
-"#H c #ffffff",
-"#I c #ffffff",
-"#J c #ffffff",
-"#K c #ffffff",
-"#L c #ffffff",
-"#M c #ffffff",
-"#N c #ffffff",
-"#O c #ffffff",
-"#P c #ffffff",
-"#Q c #ffffff",
-"#R c #ffffff",
-"#S c #ffffff",
-"#T c #ffffff",
-"#U c #ffffff",
-"#V c #ffffff",
-"#W c #ffffff",
-"#X c #ffffff",
-"#Y c #ffffff",
-"#Z c #ffffff",
-"#0 c #ffffff",
-"#1 c #ffffff",
-"#2 c #ffffff",
-"#3 c #ffffff",
-"#4 c #ffffff",
-"#5 c #ffffff",
-"#6 c #ffffff",
-"#7 c #ffffff",
-"#8 c #ffffff",
-"a` c #ffffff",
-"a. c #ffffff",
-"a# c #ffffff",
-"aa c #ffffff",
-"ab c #ffffff",
-"ac c #ffffff",
-"ad c #ffffff",
-"ae c #ffffff",
-"af c #ffffff",
-"ag c #ffffff",
-"ah c #ffffff",
-"ai c #ffffff",
-"aj c #ffffff",
-"ak c #ffffff",
-"al c #ffffff",
-"am c #ffffff",
-"an c #ffffff",
-"ao c #ffffff",
-"ap c #ffffff",
-"aq c #ffffff",
-"ar c #ffffff",
-"as c #ffffff",
-"at c #ffffff",
-"au c #ffffff",
-"av c #ffffff",
-"aw c #ffffff",
-"ax c #ffffff",
-"ay c #ffffff",
-"az c #ffffff",
-"aA c #ffffff",
-"aB c #ffffff",
-"aC c #ffffff",
-"aD c #ffffff",
-"aE c #ffffff",
-"aF c #ffffff",
-"aG c #ffffff",
-"aH c #ffffff",
-"aI c #ffffff",
-"aJ c #ffffff",
-"aK c #ffffff",
-"aL c #ffffff",
-"aM c #ffffff",
-"aN c #ffffff",
-"aO c #ffffff",
-"aP c #ffffff",
-"aQ c #ffffff",
-"aR c #ffffff",
-"aS c #ffffff",
-"aT c #ffffff",
-"aU c #ffffff",
-"aV c #ffffff",
-"aW c #ffffff",
-"aX c #ffffff",
-"aY c #ffffff",
-"aZ c #ffffff",
-"a0 c #ffffff",
-"a1 c #ffffff",
-"a2 c #ffffff",
-"a3 c #ffffff",
-"a4 c #ffffff",
-"a5 c #ffffff",
-"a6 c #ffffff",
-"a7 c #ffffff",
-"a8 c #ffffff",
-/* pixels */
-"`g`g`g`g`g`g`g`g`g`g`g`g`g`g`g`g",
-"`g`g`g`g`g`g`g`g`g`g`g`g`g`g`g`g",
-"`g`g`g`g```````g`g`g`g`g`g`g`g`g",
-"`g`g`g`````.`````g`g`g`g`g`g`g`g",
-"`g`g`````.`#`a`````g`g`g`g`g`g`g",
-"`g`````.`#`a`a`b`````g`g`g`g`g`g",
-"`````.`#`a`a`b`c`e`````g`g`g`g`g",
-"```.`#`a`a`b`c`e`e`f```g`g`g`g`g",
-"`````a`a`b`c`e`e`f`````g`g`g`g`g",
-"`g`````b`c`e`e`f`````g`g`g`g`g`g",
-"`g`g`````e`e`f`````g`g`g`g`g`g`g",
-"`g`g`g`````f`````g`g`g`g`g`g`g`g",
-"`g`g`g`g```````g`g`g`g`g`g`g`g`g",
-"`g`g`g`g`g`g`g`g`g`g`g`g`g`g`g`g",
-"`g`g`g`g`g`g`g`g`g`g`g`g`g`g`g`g"
-};
+/* XPM */ 
+static char * ecbclose_xpm[] = {
+"16 15 35 1",
+" 	c None",
+"!	c black",
+"#	c white",
+"$	c #7898B5",
+"%	c #FCFCFB",
+"&	c #FDFDFB",
+"'	c #040404",
+"(	c #FCFCFA",
+")	c #F7F6F3",
+"*	c #F7F7F5",
+"+	c #F7F7F4",
+",	c #F6F6F4",
+"-	c #F1F0EB",
+".	c #E5E1DA",
+"0	c #A5A5C6",
+"1	c #F5F5F1",
+"2	c #DFDBD2",
+"3	c #F2F2EE",
+"4	c #F0F0EC",
+"5	c #EDEDE7",
+"6	c #EAE9E3",
+"7	c #E3E0D9",
+"8	c #DBD6CC",
+"9	c #E4E1D9",
+":	c #DCD8CF",
+";	c #D8D3C9",
+"<	c #D6D1C6",
+"=	c #D2CCC0",
+">	c #CFC8BB",
+"?	c #D2CCBF",
+"@	c #C6BEAE",
+"A	c #C2B8A8",
+"B	c #C1B8A7",
+"C	c #C0B7A6",
+"D	c #C3BAAA",
+"                ",
+"                ",
+"                ",
+" #$$$$$$$#      ",
+" $#######$      ",
+" $%&&'%()$      ",
+" $**+',-.$      ",
+"0$1'''''2$      ",
+" $345'678$      ",
+" $9:;'<=>$      ",
+" $?@ABBCD$      ",
+" #$$$$$$$#      ",
+"                ",
+"                ",
+"                "};
Add a comment to this file

ecb-images/default/height-15/ecb-handle.xpm

Old
Old image
New
New image
-/* XPM */
-static char *handle[] = {
-/* width height num_colors chars_per_pixel */
-"    10    15      256            2",
-/* colors */
-"`` c #000000",
-"`. c #a5a5c6",
-"`# c #ada5c6",
-"`a c #cecee7",
-"`b c #ceceff",
-"`c c None",
-"`d c #ffffff",
-"`e c #ffffff",
-"`f c #ffffff",
-"`g c #ffffff",
-"`h c #ffffff",
-"`i c #ffffff",
-"`j c #ffffff",
-"`k c #ffffff",
-"`l c #ffffff",
-"`m c #ffffff",
-"`n c #ffffff",
-"`o c #ffffff",
-"`p c #ffffff",
-"`q c #ffffff",
-"`r c #ffffff",
-"`s c #ffffff",
-"`t c #ffffff",
-"`u c #ffffff",
-"`v c #ffffff",
-"`w c #ffffff",
-"`x c #ffffff",
-"`y c #ffffff",
-"`z c #ffffff",
-"`A c #ffffff",
-"`B c #ffffff",
-"`C c #ffffff",
-"`D c #808000",
-"`E c #ffffff",
-"`F c #ffffff",
-"`G c #ffffff",
-"`H c #ffffff",
-"`I c #ffffff",
-"`J c #ffffff",
-"`K c #ffffff",
-"`L c #ffffff",
-"`M c #ffffff",
-"`N c #ffffff",
-"`O c #ffffff",
-"`P c #ffffff",
-"`Q c #ffffff",
-"`R c #ffffff",
-"`S c #ffffff",
-"`T c #ffffff",
-"`U c #ffffff",
-"`V c #ffffff",
-"`W c #ffffff",
-"`X c #ffffff",
-"`Y c #ffffff",
-"`Z c #ffffff",
-"`0 c #ffffff",
-"`1 c #ffffff",
-"`2 c #ffffff",
-"`3 c #ffffff",
-"`4 c #ffffff",
-"`5 c #ffffff",
-"`6 c #ffffff",
-"`7 c #ffffff",
-"`8 c #ffffff",
-".` c #ffffff",
-".. c #ffffff",
-".# c #ffffff",
-".a c #ffffff",
-".b c #ffffff",
-".c c #ffffff",
-".d c #ffffff",
-".e c #ffffff",
-".f c #ffffff",
-".g c #ffffff",
-".h c #ffffff",
-".i c #ffffff",
-".j c #ffffff",
-".k c #ffffff",
-".l c #ffffff",
-".m c #ffffff",
-".n c #ffffff",
-".o c #ffffff",
-".p c #ffffff",
-".q c #ffffff",
-".r c #ffffff",
-".s c #ffffff",
-".t c #ffffff",
-".u c #ffffff",
-".v c #ffffff",
-".w c #ffffff",
-".x c #ffffff",
-".y c #ffffff",
-".z c #ffffff",
-".A c #ffffff",
-".B c #ffffff",
-".C c #ffffff",
-".D c #ffffff",
-".E c #ffffff",
-".F c #ffffff",
-".G c #ffffff",
-".H c #ffffff",
-".I c #ffffff",
-".J c #ffffff",
-".K c #ffffff",
-".L c #ffffff",
-".M c #ffffff",
-".N c #ffffff",
-".O c #ffffff",
-".P c #ffffff",
-".Q c #ffffff",
-".R c #ffffff",
-".S c #ffffff",
-".T c #ffffff",
-".U c #ffffff",
-".V c #ffffff",
-".W c #ffffff",
-".X c #ffffff",
-".Y c #ffffff",
-".Z c #ffffff",
-".0 c #ffffff",
-".1 c #ffffff",
-".2 c #ffffff",
-".3 c #ffffff",
-".4 c #ffffff",
-".5 c #ffffff",
-".6 c #ffffff",
-".7 c #ffffff",
-".8 c #ffffff",
-"#` c #ffffff",
-"#. c #ffffff",
-"## c #ffffff",
-"#a c #ffffff",
-"#b c #ffffff",
-"#c c #ffffff",
-"#d c #ffffff",
-"#e c #ffffff",
-"#f c #ffffff",
-"#g c #ffffff",
-"#h c #ffffff",
-"#i c #ffffff",
-"#j c #ffffff",
-"#k c #ffffff",
-"#l c #ffffff",
-"#m c #ffffff",
-"#n c #ffffff",
-"#o c #ffffff",
-"#p c #ffffff",
-"#q c #ffffff",
-"#r c #ffffff",
-"#s c #ffffff",
-"#t c #ffffff",
-"#u c #ffffff",
-"#v c #ffffff",
-"#w c #ffffff",
-"#x c #ffffff",
-"#y c #ffffff",
-"#z c #ffffff",
-"#A c #ffffff",
-"#B c #ffffff",
-"#C c #ffffff",
-"#D c #ffffff",
-"#E c #ffffff",
-"#F c #ffffff",
-"#G c #ffffff",
-"#H c #ffffff",
-"#I c #ffffff",
-"#J c #ffffff",
-"#K c #ffffff",
-"#L c #ffffff",
-"#M c #ffffff",
-"#N c #ffffff",
-"#O c #ffffff",
-"#P c #ffffff",
-"#Q c #ffffff",
-"#R c #ffffff",
-"#S c #ffffff",
-"#T c #ffffff",
-"#U c #ffffff",
-"#V c #ffffff",
-"#W c #ffffff",
-"#X c #ffffff",
-"#Y c #ffffff",
-"#Z c #ffffff",
-"#0 c #ffffff",
-"#1 c #ffffff",
-"#2 c #ffffff",
-"#3 c #ffffff",
-"#4 c #ffffff",
-"#5 c #ffffff",
-"#6 c #ffffff",
-"#7 c #ffffff",
-"#8 c #ffffff",
-"a` c #ffffff",
-"a. c #ffffff",
-"a# c #ffffff",
-"aa c #ffffff",
-"ab c #ffffff",
-"ac c #ffffff",
-"ad c #ffffff",
-"ae c #ffffff",
-"af c #ffffff",
-"ag c #ffffff",
-"ah c #ffffff",
-"ai c #ffffff",
-"aj c #ffffff",
-"ak c #ffffff",
-"al c #ffffff",
-"am c #ffffff",
-"an c #ffffff",
-"ao c #ffffff",
-"ap c #ffffff",
-"aq c #ffffff",
-"ar c #ffffff",
-"as c #ffffff",
-"at c #ffffff",
-"au c #ffffff",
-"av c #ffffff",
-"aw c #ffffff",
-"ax c #ffffff",
-"ay c #ffffff",
-"az c #ffffff",
-"aA c #ffffff",
-"aB c #ffffff",
-"aC c #ffffff",
-"aD c #ffffff",
-"aE c #ffffff",
-"aF c #ffffff",
-"aG c #ffffff",
-"aH c #ffffff",
-"aI c #ffffff",
-"aJ c #ffffff",
-"aK c #ffffff",
-"aL c #ffffff",
-"aM c #ffffff",
-"aN c #ffffff",
-"aO c #ffffff",
-"aP c #ffffff",
-"aQ c #ffffff",
-"aR c #ffffff",
-"aS c #ffffff",
-"aT c #ffffff",
-"aU c #ffffff",
-"aV c #ffffff",
-"aW c #ffffff",
-"aX c #ffffff",
-"aY c #ffffff",
-"aZ c #ffffff",
-"a0 c #ffffff",
-"a1 c #ffffff",
-"a2 c #ffffff",
-"a3 c #ffffff",
-"a4 c #ffffff",
-"a5 c #ffffff",
-"a6 c #ffffff",
-"a7 c #ffffff",
-"a8 c #ffffff",
-/* pixels */
-"`c`c`c`c`c`c`c`c`c`c",
-"`c`c`c`c`c`c`c`c`c`c",
-"`c`c`c`c`c`c`c`c`c`c",
-"`c`c`c`c`c`c`c`c`c`c",
-"`c`c`c`c`c`c`c`c`c`c",
-"`c`c`c`c`c`c`c`c`c`c",
-"`c`c`c`c`c`c`c`c`c`c",
-"`#`#`#`#`#`#`#`#`#`#",
-"`c`c`c`c`c`c`c`c`c`c",
-"`c`c`c`c`c`c`c`c`c`c",
-"`c`c`c`c`c`c`c`c`c`c",
-"`c`c`c`c`c`c`c`c`c`c",
-"`c`c`c`c`c`c`c`c`c`c",
-"`c`c`c`c`c`c`c`c`c`c",
-"`c`c`c`c`c`c`c`c`c`c"
-};
+/* XPM */ 
+static char * ecbhandle_xpm[] = {
+"8 15 3 1",
+" 	c None",
+"!	c black",
+"#	c #ADA5C6",
+"        ",
+"        ",
+"        ",
+"        ",
+"        ",
+"        ",
+"        ",