Remove xetla pkg
authorSteve Youngs <steve@sxemacs.org>
Sun, 12 Jun 2016 10:26:45 +0000 (20:26 +1000)
committerSteve Youngs <steve@sxemacs.org>
Sun, 12 Jun 2016 10:26:45 +0000 (20:26 +1000)
Signed-off-by: Steve Youngs <steve@sxemacs.org>
16 files changed:
package-compile.el
xemacs-packages/Makefile
xemacs-packages/xetla/ChangeLog [deleted file]
xemacs-packages/xetla/ChangeLog.d/ChangeLog-0.1 [deleted file]
xemacs-packages/xetla/ChangeLog.d/ChangeLog-0.2 [deleted file]
xemacs-packages/xetla/ChangeLog.d/ChangeLog-1.0 [deleted file]
xemacs-packages/xetla/ChangeLog.d/ChangeLog-1.1 [deleted file]
xemacs-packages/xetla/Makefile [deleted file]
xemacs-packages/xetla/ewoc.el [deleted file]
xemacs-packages/xetla/package-info.in [deleted file]
xemacs-packages/xetla/xetla-browse.el [deleted file]
xemacs-packages/xetla/xetla-core.el [deleted file]
xemacs-packages/xetla/xetla-defs.el [deleted file]
xemacs-packages/xetla/xetla-tips.el [deleted file]
xemacs-packages/xetla/xetla-version.el [deleted file]
xemacs-packages/xetla/xetla.el [deleted file]

index 341d933..d32ede0 100644 (file)
     ("x-symbol" . "xemacs-packages")
     ("xemacs-base" . "xemacs-packages")
     ("xemacs-devel" . "xemacs-packages")
-    ("xetla" . "xemacs-packages")
     ("xlib" . "xemacs-packages")
     ("xslide" . "xemacs-packages")
     ("xslt-process" . "xemacs-packages")
index 75b69fb..da1e9fc 100644 (file)
@@ -57,7 +57,7 @@ PACKAGES := xemacs-base fsf-compat mail-lib \
        sieve slider sml-mode sounds-au sounds-wav strokes \
        supercite textools time tm tpu tramp \
        vc vhdl view-process viper vm w3 x-symbol \
-       xetla xslide xslt-process xwem zenirc
+       xslide xslt-process xwem zenirc
 else
 PACKAGES := $(NONMULE_PACKAGES)
 endif
diff --git a/xemacs-packages/xetla/ChangeLog b/xemacs-packages/xetla/ChangeLog
deleted file mode 100644 (file)
index 2dd3f2f..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-2014-05-15  Norbert Koch  <viteno@xemacs.org>
-
-       * Makefile (VERSION): XEmacs package 1.04 released.
-
-2014-05-15  Norbert Koch  <viteno@xemacs.org>
-
-       * Makefile (VERSION): XEmacs package 1.03 released.
-
-2014-05-13  Jerry James  <james@xemacs.org>
-
-       * .hgignore: New file.
-
-2008-02-11  Norbert Koch  <viteno@xemacs.org>
-
-       * Makefile (VERSION): XEmacs package 1.02 released.
-
-2007-11-30  Michael Sperber  <mike@xemacs.org>
-
-       * xetla-browse.el (jde-tree-widget): tree-widget.el has been
-       renamed to jde-tree-widget.el.
-
-2005-12-29  Norbert Koch  <viteno@xemacs.org>
-
-       * Makefile (VERSION): XEmacs package 1.01 released.
-
-2005-12-24  Steve Youngs  <steve@sxemacs.org>
-
-       * steve@eicq.org--2005/xetla--main--1.1--version-0 is released.
-       See ./ChangeLog.d/ChangeLog-1.1 for details.
-
-       * ChangeLog.d/*: New files.
-
-       * package-info.in (description): Mention (S)XEmacs in the
-       description. 
-       (provides): Remove smerge, it isn't part of XEtla anymore.
-
-       * Makefile (AUTHOR_VERSION): Bump to
-       steve@eicq.org--2005/xetla--main--1.1--version-0 
-       (ELCS): Remove smerge.el, it isn't part of XEtla anymore.
-
-2005-04-04  Norbert Koch  <viteno@xemacs.org>
-
-       * Makefile (VERSION): XEmacs package 1.00 released.
-
-2005-04-04  Steve Youngs  <steve@sxemacs.org>
-
-       * New package
-
diff --git a/xemacs-packages/xetla/ChangeLog.d/ChangeLog-0.1 b/xemacs-packages/xetla/ChangeLog.d/ChangeLog-0.1
deleted file mode 100644 (file)
index 433cb25..0000000
+++ /dev/null
@@ -1,706 +0,0 @@
-# do not edit -- automatically generated by arch changelog
-# non-id: automatic-ChangeLog--steve@eicq.org--2004/xetla--main--0.1
-#
-
-2004-12-21 04:18:48 GMT        Steve Youngs <steve@eicq.org>   patch-24
-
-    Summary:
-      Font lock updates.
-    Revision:
-      xetla--main--0.1--patch-24
-
-    * xetla-defs.el (xetla-log-edit-font-lock-keywords): Add some colour to
-      the Summary and Keywords header content.
-      (xetla-cat-log-font-lock-keywords): Add font-locking to the entire
-      buffer, not just the log headers.
-    
-
-    modified files:
-     xetla-defs.el
-
-
-2004-12-20 17:40:42 GMT        Steve Youngs <steve@eicq.org>   patch-23
-
-    Summary:
-      remove unnecessary defvar from xetla-build.el
-    Revision:
-      xetla--main--0.1--patch-23
-
-
-    modified files:
-     xetla-build.el
-
-
-2004-12-20 17:26:41 GMT        Steve Youngs <steve@eicq.org>   patch-22
-
-    Summary:
-      Fix font-locking and "markerp nil" error from `C-x T a'
-    Revision:
-      xetla--main--0.1--patch-22
-
-    * xetla.el (xetla-log-edit-mode): Call `font-lock-mode'.
-    (xetla-cat-log-mode): Ditto.
-    (xetla-changes-mode): Ditto.
-    (xetla-changelog-mode): Ditto.
-    (xetla-show-changes-buffer): Remove void variable
-    `global-font-lock-mode'. 
-    
-    * xetla-defs.el (xetla-changelog-font-lock-keywords): Rewrite, specifying
-      the keywords without relying on `change-log-font-lock-keywords'.  The
-      format from `tla changelog' is slightly different from GNU style Changelog
-      files so just using `change-log-font-lock-keywords' will not work.
-    
-    * xetla-defs.el (xetla-log-edit-font-lock-keywords): Use
-      `xetla-changelog-font-lock-keywords'. 
-    
-
-    modified files:
-     xetla-defs.el xetla.el
-
-
-2004-12-17 05:59:49 GMT        Steve Youngs <steve@eicq.org>   patch-21
-
-    Summary:
-      Add autoload cookie to xetla-version<f>
-    Revision:
-      xetla--main--0.1--patch-21
-
-
-    modified files:
-     xetla.el
-
-
-2004-12-17 03:24:56 GMT        Steve Youngs <steve@eicq.org>   patch-20
-
-    Summary:
-      Improve `xetla-reload'.
-    Revision:
-      xetla--main--0.1--patch-20
-
-    * xetla-core.el (xetla-reload): Handle XEtla's auto-autoloads.el file.
-    
-
-    modified files:
-     xetla-core.el
-
-
-2004-12-17 03:06:31 GMT        Steve Youngs <steve@eicq.org>   patch-19
-
-    Summary:
-      Get rid of the need for xetla-xemacs.el.
-    Revision:
-      xetla--main--0.1--patch-19
-
-    This patch removes the need to have xetla-xemacs.el.
-    
-    All of the "Use `foo' instead of `bar' are GNU/Emacs -> XEmacs
-    corrections. 
-    
-    * Makefile (SOURCES): Remove xetla-xemacs.el
-    
-    * xetla-browse.el (xetla-widget-archives-root-node-register-archive): Use
-      `match-string' instead of `match-string-no-properties'.
-    
-    * xetla-browse.el (xetla-widget-archive-node-convert-to-source): Ditto.
-    
-    * xetla-browse.el (xetla-widget-version-control-show-revisions): Use
-      `point-at-*' instead of `line-*-position' functions.
-    
-    * xetla-browse.el (xetla-browse-toggle-subtree-maybe): Ditto.
-    
-    * xetla-browse.el (xetla-browse-dash): Ditto.
-    
-    * xetla-build.el: No need to conditionalise on featurep 'xemacs.
-      Remove cruft about mouse-avoidance.
-      Add a defvar for `global-font-lock-mode' and
-      `xetla-dead-process-buffer-queue'. 
-    
-    * xetla-core.el: Don't require xetla-xemacs.
-    
-    * xetla-core.el (xetla-version-head): Use `point-at-*' instead of
-      `line-*-position' functions.
-    
-    * xetla-core.el (xetla-archive-tree-build-archives): Ditto.
-    
-    * xetla-core.el (xetla-archive-tree-build-categories): Ditto.
-    
-    * xetla-core.el (xetla-archive-tree-build-branches): Ditto.
-    
-    * xetla-core.el (xetla-archive-tree-build-versions): Ditto.
-    
-    * xetla-core.el (xetla-archive-tree-build-revisions): Ditto.
-    
-    * xetla-core.el (xetla-revlib-tree-build-archives): Ditto.
-    
-    * xetla-core.el (xetla-revlib-tree-build-categories): Ditto.
-    
-    * xetla-core.el (xetla-revlib-tree-build-branches): Ditto.
-    
-    * xetla-core.el (xetla-revlib-tree-build-versions): Ditto.
-    
-    * xetla-core.el (xetla-revlib-tree-build-revisions): Ditto.
-    
-    * xetla-core.el (xetla-name-read-refresh-cache): Use `buffer-substring'
-      instead of `minibuffer-contents'.
-    
-    * xetla-core.el (xetla-reload): Don't try to unload `xetla-xemacs' or
-      `xetla-emacs'. 
-    
-    * xetla-defs.el (clone-process): Define it with `defun-when-void'.
-    
-    * xetla-defs.el (clone-buffer): Moved here from xetla-xemacs.el and
-      defined with `defun-when-void'.
-    
-    * xetla-defs.el (xetla-name-read-minibuf-map): Use `window-minibuffer-p'
-      and `buffer-substring' in place of `minibufferp' and
-      `minibuffer-contents' respectively.
-    
-    * xetla-tips.el: Don't require xetla-xemacs or xetla-emacs.
-    
-    * xetla.el: Don't require xetla-xemacs.
-    
-    * xetla.el (xetla-generic-popup-menu-by-keyboard): Use `point-at-*'
-      instead of `line-*-position'.
-    
-    * xetla.el (xetla-edit-log): Ditto.
-    
-    * xetla.el (xetla-add-log-entry-internal): Ditto.
-    
-    * xetla.el (xetla-show-changes-buffer): Ditto.
-    
-    * xetla.el (xetla-view-conflicts): Ditto.
-    
-    * xetla.el (xetla-file-get-revision-in-file): Ditto.
-    
-    * xetla.el (xetla-revisions-parse-list): Ditto.
-    
-    * xetla.el (xetla-bookmarks-missing-parse-changes): Ditto.
-    
-    * xetla.el (xetla-log-edit-next-field): Ditto.
-    
-    * xetla.el (xetla-log-edit-insert-log-for-merge): Ditto.
-    
-    * xetla.el (xetla-log-edit-insert-memorized-log): Ditto.
-    
-    * xetla.el (xetla-log-edit-keywords): Ditto.
-    
-    * xetla.el (xetla-log-edit-keywords-insert): Ditto.
-    
-    * xetla.el (xetla-changes-jump-to-change): Ditto.
-    
-    * xetla.el (xetla-changes-diff-or-list): Ditto.
-    
-    * xetla.el (xetla-changes-prev): Ditto.
-    
-    * xetla.el (xetla-changes-ediff): Ditto.
-    
-    * xetla.el (xetla-changes-get-file-at-point): Ditto.
-    
-    * xetla.el (xetla-tree-lint-parse-buffer): Ditto.
-    
-    * xetla.el (xetla-version): Ditto.
-    
-    * xetla.el (xetla-gnus-article-extract-log-message): Ditto.
-    
-    * xetla.el (xetla-generic-popup-menu-by-keyboard): Remove mouse-avoidence
-      crud.
-    
-    * xetla.el (xetla-name-read-insert-default-archive): Use
-      `window-minibuffer-p' and `buffer-substring' in place of `minibufferp'
-      and `minibuffer-contents' respectively.
-    
-    * xetla.el (xetla-name-read-insert-info-at-point): Ditto.
-    
-    * xetla.el (xetla-name-read-insert-partner-previous): Ditto.
-    
-    * xetla.el (xetla-name-read-insert-partner-next): Ditto.
-    
-    * xetla.el (xetla-name-read-insert-ancestor): Ditto.
-    
-    * xetla.el (xetla-name-read-insert-bookmark-previous): Ditto.
-    
-    * xetla.el (xetla-name-read-insert-bookmark-next): Ditto.
-    
-    * xetla.el (xetla-register-archive): Use `match-string' instead of
-      `match-string-no-properties'. 
-    
-    * xetla.el (xetla-merge-summary-line-for-log): Ditto.
-    
-    * xetla.el: Defvar `vc-ignore-vc-files' at compile time.
-    
-    * xetla.el (xetla-find-file-hook): Simplify somebody's idea of logic by
-      removing a useless `if' sexp.
-    
-
-    removed files:
-     .arch-ids/xetla-xemacs.el.id xetla-xemacs.el
-
-    modified files:
-     Makefile xetla-browse.el xetla-build.el xetla-core.el
-     xetla-defs.el xetla-tips.el xetla.el
-
-
-2004-12-16 23:57:55 GMT        Steve Youngs <steve@eicq.org>   patch-18
-
-    Summary:
-      Improve the list of log keywords.
-    Revision:
-      xetla--main--0.1--patch-18
-
-    * xetla-defs.el (xetla-log-edit-keywords): Richer set of keywords.
-      Remove autoload cookie.
-    
-
-    modified files:
-     xetla-defs.el
-
-
-2004-12-16 17:45:45 GMT        Steve Youngs <steve@eicq.org>   patch-17
-
-    Summary:
-      Remove a bogus doc string
-    Revision:
-      xetla--main--0.1--patch-17
-
-
-    modified files:
-     xetla.el
-
-
-2004-12-16 17:40:06 GMT        Steve Youngs <steve@eicq.org>   patch-16
-
-    Summary:
-      Make `xetla-log-edit-done' mimic `add-log-exit' a bit more.
-    Revision:
-      xetla--main--0.1--patch-16
-
-    * xetla.el (xetla-log-edit-done): Don't run `tla commit' unless there's a
-      prefix arg.
-    
-
-    modified files:
-     xetla.el
-
-
-2004-12-16 14:39:53 GMT        Steve Youngs <steve@eicq.org>   patch-15
-
-    Summary:
-      merge from hrop (finish removing buffers menu crap)
-    Revision:
-      xetla--main--0.1--patch-15
-
-    Patches applied:
-    
-     * hroptatyr@sxemacs.org--sxemacs/xetla--hrop--0.1--patch-14
-       flush install-buffers instead of commenting'em out
-    
-
-    modified files:
-     xetla-browse.el xetla-core.el xetla.el
-
-    new patches:
-     hroptatyr@sxemacs.org--sxemacs/xetla--hrop--0.1--patch-14
-
-
-2004-12-16 05:20:45 GMT        Steve Youngs <steve@eicq.org>   patch-14
-
-    Summary:
-      merge from hrop (remove buffers menu)
-    Revision:
-      xetla--main--0.1--patch-14
-
-    Patches applied:
-    
-     * hroptatyr@sxemacs.org--sxemacs/xetla--hrop--0.1--patch-12
-       star merge from steve --patch-12 --patch-13
-    
-     * hroptatyr@sxemacs.org--sxemacs/xetla--hrop--0.1--patch-13
-       flushing xetla-buffers menu
-    
-
-    modified files:
-     xetla-browse.el xetla-core.el xetla.el
-
-    new patches:
-     hroptatyr@sxemacs.org--sxemacs/xetla--hrop--0.1--patch-12
-     hroptatyr@sxemacs.org--sxemacs/xetla--hrop--0.1--patch-13
-
-
-2004-12-09 09:09:55 GMT        Steve Youngs <steve@eicq.org>   patch-13
-
-    Summary:
-      merge from hrop... yet another -- to - fubar
-    Revision:
-      xetla--main--0.1--patch-13
-
-    Patches applied:
-    
-     * hroptatyr@sxemacs.org--sxemacs/xetla--hrop--0.1--patch-11
-       fix, some more s/-/--/ issue
-    
-
-    modified files:
-     xetla.el
-
-    new patches:
-     hroptatyr@sxemacs.org--sxemacs/xetla--hrop--0.1--patch-11
-
-
-2004-12-06 23:34:26 GMT        Steve Youngs <steve@eicq.org>   patch-12
-
-    Summary:
-      merge from hrop
-    Revision:
-      xetla--main--0.1--patch-12
-
-    Patches applied:
-    
-     * hroptatyr@sxemacs.org--sxemacs/xetla--hrop--0.1--patch-9
-       fix, some more parsing corrections for dealing with tla archive strings
-    
-     * hroptatyr@sxemacs.org--sxemacs/xetla--hrop--0.1--patch-10
-       fix, inventory mode now correctly respects prefix arguments
-    
-
-    modified files:
-     xetla-core.el xetla.el
-
-    new patches:
-     hroptatyr@sxemacs.org--sxemacs/xetla--hrop--0.1--patch-9
-     hroptatyr@sxemacs.org--sxemacs/xetla--hrop--0.1--patch-10
-
-
-2004-12-02 09:00:45 GMT        Steve Youngs <steve@eicq.org>   patch-11
-
-    Summary:
-      merge from hrop
-    Revision:
-      xetla--main--0.1--patch-11
-
-    Patches applied:
-    
-     * hroptatyr@sxemacs.org--sxemacs/xetla--hrop--0.1--patch-8
-       abstraction
-    
-
-    modified files:
-     xetla-core.el
-
-    new patches:
-     hroptatyr@sxemacs.org--sxemacs/xetla--hrop--0.1--patch-8
-
-
-2004-11-29 21:19:36 GMT        Steve Youngs <steve@eicq.org>   patch-10
-
-    Summary:
-      merge from hrop (fix xetla-tree-version-list)
-    Revision:
-      xetla--main--0.1--patch-10
-
-    Patches applied:
-    
-     * hroptatyr@sxemacs.org--sxemacs/xetla--hrop--0.1--patch-7
-       minor fix to correctly identify tree version
-    
-
-    modified files:
-     xetla.el
-
-    new patches:
-     hroptatyr@sxemacs.org--sxemacs/xetla--hrop--0.1--patch-7
-
-
-2004-11-27 00:36:28 GMT        Steve Youngs <steve@eicq.org>   patch-9
-
-    Summary:
-      merge from hrop (overlay -> extent conversion)
-    Revision:
-      xetla--main--0.1--patch-9
-
-    Patches applied:
-    
-     * hroptatyr@sxemacs.org--sxemacs/xetla--hrop--0.1--patch-5
-       star-merge <=patch-8 of steve-line
-    
-     * hroptatyr@sxemacs.org--sxemacs/xetla--hrop--0.1--patch-6
-       evaporation of overlay cruft
-    
-
-    modified files:
-     xetla-browse.el xetla-xemacs.el xetla.el
-
-    new patches:
-     hroptatyr@sxemacs.org--sxemacs/xetla--hrop--0.1--patch-5
-     hroptatyr@sxemacs.org--sxemacs/xetla--hrop--0.1--patch-6
-
-
-2004-11-25 11:28:01 GMT        Steve Youngs <steve@eicq.org>   patch-8
-
-    Summary:
-      Fix faces to work with XEmacs and fix tla cmd line args
-    Revision:
-      xetla--main--0.1--patch-8
-
-    Looks like the initial xtla -> xetla renaming caused more problems than
-    it solved.  All the external tla command line args (the long options) got
-    one of the leading dashes deleted.  This fixes it.
-    
-    This patch goes a long way toward getting faces and font-locking working
-    properly.  It's not quite right yet, but at least there aren't any errors
-    any more.
-    
-    * xetla-defs.el: Redo all the faces to work properly with XEmacs.
-    (xetla-inventory-file-font-lock-keywords): Syntax fix for XEmacs.
-    (xetla-log-edit-font-lock-keywords): Ditto.
-    (xetla-changes-font-lock-keywords): Ditto.
-    (xetla-changelog-font-lock-keywords): Ditto.
-    
-    * xetla-browse.el: Ditto.
-    
-    * xetla.el (xetla-inventory): Fix tla command line args that got messed
-      up with the initial renaming.
-    
-    * xetla.el (xetla-changes): Ditto.
-    
-    * xetla.el (xetla-changes-internal): Ditto.
-    
-    * xetla.el (xetla-show-changeset): Ditto.
-    
-    * xetla.el (xetla-apply-changeset-internal): Ditto.
-    
-    * xetla.el (xetla-commit): Ditto.
-    
-    * xetla.el (xetla-logs): Ditto.
-    
-    * xetla.el (xetla-library-delete): Ditto.
-    
-    * xetla.el (xetla-library-find): Ditto.
-    
-    * xetla.el (xetla-star-merge): Ditto.
-    
-    * xetla.el (xetla-replay): Ditto.
-    
-    * xetla.el (xetla-tag): Ditto.
-    
-    * xetla.el (xetla-missing-refresh): Ditto.
-    
-    * xetla.el (xetla-bookmarks-tag): Ditto.
-    
-    * xetla.el (xetla-unregister-archive): Ditto.
-    
-    * xetla.el (xetla-make-archive-internal): Ditto.
-    
-    * xetla.el (xetla-mirror-archive): Ditto.
-    
-    * xetla.el (xetla-mirror-from-archive): Ditto.
-    
-    * xetla.el (xetla-cat-config): Ditto.
-    
-    * xetla.el (xetla-add): Ditto.
-    
-    * xetla.el (xetla-remove): Ditto.
-    
-    * xetla.el (xetla-start-project): Ditto.
-    
-    * xetla-core.el (xetla-archive-tree-build-revisions): Ditto.
-    
-    * xetla-core.el (xetla-revlib-tree-build-revisions): Ditto.
-    
-    * xetla-core.el (xetla-compute-direct-ancestor): Ditto.
-    
-    * xetla-core.el (xetla-escape): Ditto.
-    
-    * xetla-xemacs.el: Remove the font compatibility code.
-
-    modified files:
-     xetla-browse.el xetla-core.el xetla-defs.el xetla-xemacs.el
-     xetla.el
-
-
-2004-11-25 05:55:35 GMT        Steve Youngs <steve@eicq.org>   patch-7
-
-    Summary:
-      Code audit - removing xtla/gna.org references.
-    Revision:
-      xetla--main--0.1--patch-7
-
-    * xetla-tips.el (xetla-tips-array): Remove reference to gna.org.
-    
-    * xetla.el (xetla-submit-patch): Send patches to
-      xetla-devel@youngs.au.com. 
-    
-    * xetla.el (xetla-submit-bug-report): Send bugs to
-      xetla-devel@youngs.au.com. 
-    
-    * xetla.el (xetla): Update displayed info to be XEtla-centric.
-    
-
-    modified files:
-     xetla-tips.el xetla.el
-
-
-2004-11-25 03:46:36 GMT        Steve Youngs <steve@eicq.org>   patch-6
-
-    Summary:
-      Build fixes for ewoc.el
-    Revision:
-      xetla--main--0.1--patch-6
-
-    * ewoc.el (ewoc-dll): Remove this dummy variable and undo the `dll ->
-      ewoc-dll' renaming.
-      (dll): Bind as a variable at compile time only.
-    
-    This patch gives a clean compile for ewoc.el, and pretty much undoes
-    Sebastian's attempt to fix it. :-P  The problem with Sebastian's patch
-    was that he did a global `dll -> ewoc-dll' replacement and there was a
-    data type that relied on having 'dll'.
-    
-      
-    
-
-    modified files:
-     ewoc.el
-
-
-2004-11-25 01:27:46 GMT        Steve Youngs <steve@eicq.org>   patch-5
-
-    Summary:
-      syncing up patch logs from hrop
-    Revision:
-      xetla--main--0.1--patch-5
-
-    Patches applied:
-    
-     * hroptatyr@sxemacs.org--sxemacs/xetla--hrop--0.1--base-0
-       tag of steve@eicq.org--2004/xetla--main--0.1--base-0
-    
-     * hroptatyr@sxemacs.org--sxemacs/xetla--hrop--0.1--patch-2
-       bypass compiler warnings
-    
-     * hroptatyr@sxemacs.org--sxemacs/xetla--hrop--0.1--patch-3
-       fixing my fuckups
-    
-
-    new patches:
-     hroptatyr@sxemacs.org--sxemacs/xetla--hrop--0.1--base-0
-     hroptatyr@sxemacs.org--sxemacs/xetla--hrop--0.1--patch-2
-     hroptatyr@sxemacs.org--sxemacs/xetla--hrop--0.1--patch-3
-
-
-2004-11-25 01:26:24 GMT        Steve Youngs <steve@eicq.org>   patch-4
-
-    Summary:
-      merge from hrop (ewoc.el warning fix)
-    Revision:
-      xetla--main--0.1--patch-4
-
-    Patches applied:
-    
-     * hroptatyr@sxemacs.org--sxemacs/xetla--hrop--0.1--patch-4
-       bypass compiler warnings
-    
-
-    modified files:
-     ewoc.el
-
-    new patches:
-     hroptatyr@sxemacs.org--sxemacs/xetla--hrop--0.1--patch-4
-
-
-2004-11-24 23:42:57 GMT        Steve Youngs <steve@eicq.org>   patch-3
-
-    Summary:
-      New file xetla.texi
-    Revision:
-      xetla--main--0.1--patch-3
-
-
-    new files:
-     .arch-ids/xetla.texi.id xetla.texi
-
-
-2004-11-24 23:41:43 GMT        Steve Youngs <steve@eicq.org>   patch-2
-
-    Summary:
-      Fix the rest of the renaming fubars and add a Makefile
-    Revision:
-      xetla--main--0.1--patch-2
-
-    * xetla.el (xetla-revision-sync-tree): buxetlast -> butlast
-    (xetla-revision-star-merge): Ditto.
-    (xetla-revision-replay): Ditto.
-    (xetla-library-add-internal): New, renamed from `xetla-library-add'.  In
-    the initial xtla -> xetla renaming there was a `tla-library-add' and a
-    `tla--library-add', the keyboard macro I used to do the renaming didn't
-    take this situation into account.
-    (xetla-library-add-interactive): Use `xetla-library-add-internal'.
-    (xetla-register-archive): Use `xetla-register-archive-internal'.
-    (xetla-register-archive-internal): New.
-    (xetla-edit-archive-location): Use `xetla-register-archive-internal'.
-    (xetla-use-as-default-mirror): Ditto.
-    (xetla-archive-convert-to-source-archive): Ditto.
-    (xetla-make-archive-internal): New.
-    (xetla-make-archive): Use it.
-    
-    * xetla-core.el (xetla-name-read-refresh-cache): Ditto.
-    
-    * xetla-browse.el (xetla-widget-archives-root-node-register-archive): Use
-      `xetla-register-archive-internal'.
-    
-    * xetla-browse.el (xetla-widget-archives-root-node-make-archive): Use
-      `xetla-make-archive-internal'. 
-    
-    * Makefile: New.
-    
-    When I did the initial global renaming from xtla to xetla my keyboard
-    macro didn't take into account things like `tla-foo-bar' and
-    `tla--foo-bar' both existing.  This patch takes care of that.
-    
-    It also introduces a Makefile for people who wish to byte-compile xetla.
-    
-
-    new files:
-     .arch-ids/Makefile.id Makefile
-
-    modified files:
-     xetla-browse.el xetla-core.el xetla.el
-
-
-2004-11-24 21:17:37 GMT        Steve Youngs <steve@eicq.org>   patch-1
-
-    Summary:
-      from hrop... minor renaming fixes
-    Revision:
-      xetla--main--0.1--patch-1
-
-    Patches applied:
-    
-     * hroptatyr@sxemacs.org--sxemacs/xetla--hrop--0.1--patch-1
-       minor fixes
-    
-
-    modified files:
-     xetla-core.el xetla-defs.el xetla.el
-
-    new patches:
-     hroptatyr@sxemacs.org--sxemacs/xetla--hrop--0.1--patch-1
-
-
-2004-11-24 15:43:59 GMT        Steve Youngs <steve@eicq.org>   base-0
-
-    Summary:
-      Initial import of XEtla
-    Revision:
-      xetla--main--0.1--base-0
-
-    Initial import of XEtla.
-    XEtla is based heavily on xtla, except that the emphasis is
-    on XEmacs.  We suspect that XEtla will diverge quite significantly
-    from xtla.
-
-    new files:
-     BINDINGS COPYING FEATURES TODO ewoc.el smerge.el
-     xetla-browse.el xetla-build.el xetla-core.el xetla-defs.el
-     xetla-tips.el xetla-xemacs.el xetla.el
-
-
diff --git a/xemacs-packages/xetla/ChangeLog.d/ChangeLog-0.2 b/xemacs-packages/xetla/ChangeLog.d/ChangeLog-0.2
deleted file mode 100644 (file)
index 7818b8e..0000000
+++ /dev/null
@@ -1,248 +0,0 @@
-# do not edit -- automatically generated by arch changelog
-# non-id: automatic-ChangeLog--steve@eicq.org--2005/xetla--main--0.2
-#
-
-2005-03-11 13:31:17 GMT        Steve Youngs <steve@eicq.org>   version-0
-
-    Summary:
-      0.2--version-0 is released
-    Revision:
-      xetla--main--0.2--version-0
-
-
-
-2005-03-11 06:34:11 GMT        Steve Youngs <steve@eicq.org>   patch-7
-
-    Summary:
-      Keymap fixes -- use `buttonN' not `mouse-N'
-    Revision:
-      xetla--main--0.2--patch-7
-
-    * xetla.el (xetla-insert-button): Use `button' not `mouse' in keymaps.
-      (xetla-inventory-insert-headers): Ditto.
-    
-    * xetla-defs.el (xetla-context-map-template): Ditto.
-      (xetla-bookmarks-entry-map): Ditto.
-      (xetla-inventory-item-map): Ditto.
-      (xetla-inventory-tagging-method-map): Ditto.
-      (xetla-tree-lint-file-map): Ditto.
-      (xetla-archive-archive-map): Ditto.
-      (xetla-category-category-map): Ditto.
-      (xetla-branch-branch-map): Ditto.
-      (xetla-version-version-map): Ditto.
-      (xetla-revision-revision-map): Ditto.
-      (xetla-changes-file-map): Ditto.
-    
-    * xetla-browse.el (xetla-widget-node-map): Ditto.
-    
-    * xetla-core.el (xetla-log-printer-print-buffer): Ditto.
-    
-
-    modified files:
-     xetla-browse.el xetla-core.el xetla-defs.el xetla.el
-
-
-2005-03-10 06:29:43 GMT        Steve Youngs <steve@eicq.org>   patch-6
-
-    Summary:
-      Fix up some of the tips... Xetla -> XEtla
-    Revision:
-      xetla--main--0.2--patch-6
-
-    * xetla-tips.el (xetla-tips-popup): Typo fix.
-    (xetla-tips-array): Ditto.
-    
-
-    modified files:
-     xetla-tips.el
-
-
-2005-03-10 06:18:31 GMT        Steve Youngs <steve@eicq.org>   patch-5
-
-    Summary:
-      Nuke the local vars in the source to avoid merge conflicts
-    Revision:
-      xetla--main--0.2--patch-5
-
-    * xetla-browse.el: Remove local vars and "Last-Modified" header, it
-      causes too many conflicts when merging.
-    
-    * xetla-build.el: Ditto.
-    
-    * xetla-core.el: Ditto.
-    
-    * xetla-defs.el: Ditto.
-    
-    * xetla-tips.el: Ditto.
-    
-    * xetla.el: Ditto.
-    
-    * xetla.texi: Ditto.
-    
-
-    modified files:
-     xetla-browse.el xetla-build.el xetla-core.el xetla-defs.el
-     xetla-tips.el xetla.el xetla.texi
-
-
-2005-03-10 06:11:01 GMT        Steve Youngs <steve@eicq.org>   patch-4
-
-    Summary:
-      Fix commit max-specpdl-size bug
-    Revision:
-      xetla--main--0.2--patch-4
-
-    * xetla.el (xetla-commit): Set the :finished key to "handler" only.  If
-      handler is nil the default `xetla-default-finish-function' will be
-      used. 
-    
-    This fixes the variable exceeds max-specpdl-size bug.
-    
-    This patch was committed from XEtla itself using `C-u C-c C-c' in the
-    xetla-log-edit buffer without error or warning.
-
-    modified files:
-     xetla.el
-
-
-2005-01-30 00:21:36 GMT        Steve Youngs <steve@eicq.org>   patch-3
-
-    Summary:
-      Typo in `xetla-delta', add a couple of keywords.
-    Revision:
-      xetla--main--0.2--patch-3
-
-    * xetla.el (xetla-delta): `-diffs' -> `--diffs'.
-    
-    * xetla-defs.el (xetla-log-edit-keywords): Add `sync' and `security'.
-    
-
-    modified files:
-     xetla-defs.el xetla.el
-
-
-2005-01-07 07:34:52 GMT        Steve Youngs <steve@eicq.org>   patch-2
-
-    Summary:
-      Some doc string clean up "xetla" -> "tla"
-    Revision:
-      xetla--main--0.2--patch-2
-
-    * xetla.el (xetla-changes): Update doc strings -- "Run xetla foo" => "Run
-      tla foo"
-      (xetla-delta): Ditto.
-      (xetla-show-changeset): Ditto.
-      (xetla-redo): Ditto.
-      (xetla-commit): Ditto.
-      (xetla-import): Ditto.
-      (xetla-logs): Ditto.
-      (xetla-help): Ditto.
-      (xetla-tree-root-xetla): Ditto.
-      (xetla-my-id): Ditto.
-      (xetla-my-revision-library): Ditto.
-      (xetla-library-config): Ditto.
-      (xetla-archive-fixup): Ditto.
-      (xetla-tag): Ditto.
-      (xetla-set-tree-version): Ditto.
-      (xetla-tree-revisions): Ditto.
-      (xetla-build-config): Ditto.
-      (xetla-cat-config): Ditto.
-      (xetla-get): Ditto.
-      (xetla-update): Ditto.
-      (xetla-inventory-star-merge): Ditto.
-      (xetla-inventory-changes): Ditto.
-      (xetla-inventory-replay): Ditto.
-      (xetla-inventory-update): Ditto.
-      (xetla-inventory-missing): Ditto.
-      (xetla-inventory-delta): Ditto.
-      (xetla-generic-set-tree-version): Ditto.
-      (xetla-version-tag): Ditto.
-      (xetla-revision-delta): Ditto.
-      (xetla-revision-tag-from-head): Ditto.
-      (xetla-revision-tag-from-here): Ditto.
-      (xetla-revision-update): Ditto.
-      (xetla-changes-diff): Ditto.
-      (xetla-tree-lint): Ditto.
-    
-    * xetla-browse.el (xetla-widget-version-node-tag): Ditto.
-    
-    * xetla-core.el (xetla-run-tla-async): Ditto.
-      (xetla-run-tla-sync): Ditto.
-    
-
-    modified files:
-     xetla-browse.el xetla-core.el xetla.el
-
-
-2004-12-31 23:39:42 GMT        Steve Youngs <steve@eicq.org>   patch-1
-
-    Summary:
-      Add changelog from prev version, bump VER in Makefile
-    Revision:
-      xetla--main--0.2--patch-1
-
-
-    new files:
-     ChangeLog.d/.arch-ids/=id
-     ChangeLog.d/.arch-ids/ChangeLog-0.1.id
-     ChangeLog.d/ChangeLog-0.1
-
-    modified files:
-     Makefile
-
-    new directories:
-     ChangeLog.d ChangeLog.d/.arch-ids
-
-
-2004-12-31 21:40:56 GMT        Steve Youngs <steve@eicq.org>   base-0
-
-    Summary:
-      tag of steve@eicq.org--2004/xetla--main--0.1--patch-24
-    Revision:
-      xetla--main--0.2--base-0
-
-    (automatically generated log message)
-
-    new patches:
-     hroptatyr@sxemacs.org--sxemacs/xetla--hrop--0.1--base-0
-     hroptatyr@sxemacs.org--sxemacs/xetla--hrop--0.1--patch-1
-     hroptatyr@sxemacs.org--sxemacs/xetla--hrop--0.1--patch-2
-     hroptatyr@sxemacs.org--sxemacs/xetla--hrop--0.1--patch-3
-     hroptatyr@sxemacs.org--sxemacs/xetla--hrop--0.1--patch-4
-     hroptatyr@sxemacs.org--sxemacs/xetla--hrop--0.1--patch-5
-     hroptatyr@sxemacs.org--sxemacs/xetla--hrop--0.1--patch-6
-     hroptatyr@sxemacs.org--sxemacs/xetla--hrop--0.1--patch-7
-     hroptatyr@sxemacs.org--sxemacs/xetla--hrop--0.1--patch-8
-     hroptatyr@sxemacs.org--sxemacs/xetla--hrop--0.1--patch-9
-     hroptatyr@sxemacs.org--sxemacs/xetla--hrop--0.1--patch-10
-     hroptatyr@sxemacs.org--sxemacs/xetla--hrop--0.1--patch-11
-     hroptatyr@sxemacs.org--sxemacs/xetla--hrop--0.1--patch-12
-     hroptatyr@sxemacs.org--sxemacs/xetla--hrop--0.1--patch-13
-     hroptatyr@sxemacs.org--sxemacs/xetla--hrop--0.1--patch-14
-     steve@eicq.org--2004/xetla--main--0.1--base-0
-     steve@eicq.org--2004/xetla--main--0.1--patch-1
-     steve@eicq.org--2004/xetla--main--0.1--patch-2
-     steve@eicq.org--2004/xetla--main--0.1--patch-3
-     steve@eicq.org--2004/xetla--main--0.1--patch-4
-     steve@eicq.org--2004/xetla--main--0.1--patch-5
-     steve@eicq.org--2004/xetla--main--0.1--patch-6
-     steve@eicq.org--2004/xetla--main--0.1--patch-7
-     steve@eicq.org--2004/xetla--main--0.1--patch-8
-     steve@eicq.org--2004/xetla--main--0.1--patch-9
-     steve@eicq.org--2004/xetla--main--0.1--patch-10
-     steve@eicq.org--2004/xetla--main--0.1--patch-11
-     steve@eicq.org--2004/xetla--main--0.1--patch-12
-     steve@eicq.org--2004/xetla--main--0.1--patch-13
-     steve@eicq.org--2004/xetla--main--0.1--patch-14
-     steve@eicq.org--2004/xetla--main--0.1--patch-15
-     steve@eicq.org--2004/xetla--main--0.1--patch-16
-     steve@eicq.org--2004/xetla--main--0.1--patch-17
-     steve@eicq.org--2004/xetla--main--0.1--patch-18
-     steve@eicq.org--2004/xetla--main--0.1--patch-19
-     steve@eicq.org--2004/xetla--main--0.1--patch-20
-     steve@eicq.org--2004/xetla--main--0.1--patch-21
-     steve@eicq.org--2004/xetla--main--0.1--patch-22
-     steve@eicq.org--2004/xetla--main--0.1--patch-23
-     steve@eicq.org--2004/xetla--main--0.1--patch-24
-
-
diff --git a/xemacs-packages/xetla/ChangeLog.d/ChangeLog-1.0 b/xemacs-packages/xetla/ChangeLog.d/ChangeLog-1.0
deleted file mode 100644 (file)
index fc4b507..0000000
+++ /dev/null
@@ -1,255 +0,0 @@
-# do not edit -- automatically generated by arch changelog
-# non-id: automatic-ChangeLog--steve@eicq.org--2005/xetla--main--1.0
-#
-
-2005-03-30 22:03:25 GMT        Steve Youngs <steve@eicq.org>   version-0
-
-    Summary:
-      XEtla 1.0 is released
-    Revision:
-      xetla--main--1.0--version-0
-
-
-
-2005-03-30 01:13:07 GMT        Steve Youngs <steve@eicq.org>   patch-7
-
-    Summary:
-      Fix tips buffer display
-    Revision:
-      xetla--main--1.0--patch-7
-
-    Under certain circumstances the tips buffer was being split into two
-    windows and displayed twice.  This fixes that by not trying to split the
-    tips buffer, just display it in the current window.
-    
-    * xetla-tips.el (xetla-tips-popup-number): Remove NOSWITCH arg and don't
-      split any windows when displaying the tips.
-      (xetla-tips-popup): Remove NOSWITCH arg.
-      (xetla-tips-next-tip): Call `xetla-tips-popup' with one arg not two.
-      (xetla-tips-previous-tip): Ditto.
-    
-
-    modified files:
-     xetla-tips.el
-
-
-2005-03-28 04:51:49 GMT        Steve Youngs <steve@eicq.org>   patch-6
-
-    Summary:
-      Clean up the build in readiness for XE package inclusion
-    Revision:
-      xetla--main--1.0--patch-6
-
-    * xetla-core.el: Autoload `xetla-tree-root' and `xetla-flash-line' at
-      compile time.  This ensures a clean build in XE packages hierarchy.
-    
-    * xetla-defs.el (xetla-clone-process): Renamed from `clone-process'.  For
-      avoiding a compiler warning in XE packages hierarchy.
-    
-    * xetla-defs.el (clone-buffer): Use it.
-    
-    * xetla.el (xetla-insinuate-gnus): Don't require any Gnus libs directly
-      in this function.  Autoload what is required at compile time instead.
-    
-
-    modified files:
-     xetla-core.el xetla-defs.el xetla.el
-
-
-2005-03-20 13:22:14 GMT        Steve Youngs <steve@eicq.org>   patch-5
-
-    Summary:
-      fix my stupidity
-    Revision:
-      xetla--main--1.0--patch-5
-
-
-    modified files:
-     xetla.el
-
-
-2005-03-20 09:50:41 GMT        Steve Youngs <steve@eicq.org>   patch-4
-
-    Summary:
-      Add missing face for bookmark names
-    Revision:
-      xetla--main--1.0--patch-4
-
-    * xetla.el (xetla-bookmark-face): Add definition of missing face.
-    
-
-    modified files:
-     xetla.el
-
-
-2005-03-18 09:19:09 GMT        Steve Youngs <steve@eicq.org>   patch-3
-
-    Summary:
-      General code clean up.
-    Revision:
-      xetla--main--1.0--patch-3
-
-    * Makefile (VER): Bump to 1.0
-      (INSTALL): Don't set any args to install so mere mortal users can install
-      too.
-      (PRELOADS): Don't load xetla-build... it doesn't exist anymore.
-    
-    * xetla-browse.el: Autoload `easy-mmode-define-keymap' at compile time.
-      (xetla-widget-branch-node-get-branch): Use `read-directory-name'
-      instead of `xetla-read-directory-name'.
-      (xetla-widget-version-node-get-version): Ditto.
-    
-    * xetla-core.el: Autoload `read-passwd' at compile time.
-      (xetla-temp-directory): Set default with `temp-directory'.
-      (xetla-read-directory-name): Removed.  It didn't give anything that
-      `read-directory-name' didn't already give.
-      (xetla-add-to-list): Removed.  It didn't give anything that
-      `add-to-list' didn't already give.
-      (xetla-show-internal-buffers-on-menu): Default to nil.
-    
-    * xetla-defs.el: Remove a gazillion useless autoload cookies.
-      Lots of typo updates:
-           Xetla -> XEtla
-           xetla -> tla
-               - -> --
-      Set all the hook variable defcustoms to nil instead of `()
-      Put the call to `auto-mode-alist' inline with the autoload cookie
-      comment.  This avoids it getting loaded twice.
-    
-    * xetla-tips.el: Typo fixes.
-    
-    * xetla.el: Fix a condition-case form designed to skip an error.
-      Move the guts of xetla-build.el here.  Some went to other files, the
-      but majority is here.
-      (xetla-tree-version-list-xetla): Renambed to
-      `xetla-tree-version-list-tla'.
-      (xetla-tree-version-list-tla): New. from
-      `xetla-tree-version-list-xetla' .
-      (xetla-delete-file): New.  Replaces hack to maybe define
-      `dired-delete-file'.
-      Also lots of typo fixes.
-      Use `read-directory-name' instead of `xetla-read-directory-name'
-      throughout. 
-      Use `add-to-list' instead of `xetla-add-to-list' throughout.
-
-    removed files:
-     .arch-ids/xetla-build.el.id xetla-build.el
-
-    modified files:
-     Makefile xetla-browse.el xetla-core.el xetla-defs.el
-     xetla-tips.el xetla.el
-
-
-2005-03-11 14:44:57 GMT        Steve Youngs <steve@eicq.org>   patch-2
-
-    Summary:
-      Typo fixes -- xetla -> tla
-    Revision:
-      xetla--main--1.0--patch-2
-
-    * xetla.el (xetla-changes-internal): xetla -> tla typo fixes.
-    (xetla-changes): Ditto.
-    (xetla-changes-save): Ditto.
-    (xetla-changes-save-as-tgz): Ditto.
-    (xetla-delta-show-diff-on-buffer): Ditto.
-    (xetla-prepare-changes-buffer): Ditto.
-    (xetla-file-diff): Ditto.
-    (xetla-pristines): Ditto.
-    (xetla-changelog): Ditto.
-    (xetla-bookmarks-tag): Ditto.
-    (xetla-bookmarks-inventory): Ditto.
-    (xetla-bookmarks-get): Ditto.
-    (xetla-start-project): Ditto.
-    (xetla-cat-log-any): Ditto.
-    
-    * xetla-defs.el: Ditto.
-    (xetla-read-project-tree-mode): Ditto.
-    
-    * xetla-core.el (xetla-build-xetla-command): Ditto.
-    (minor-mode-alist): Ditto.
-    (xetla-unescape): Ditto.
-    
-    * xetla-browse.el (xetla-widget-branch-node-get-branch): Ditto.
-    (xetla-widget-version-node-get-version): Ditto.
-    
-    
-    
-
-    modified files:
-     xetla-browse.el xetla-core.el xetla-defs.el xetla.el
-
-
-2005-03-11 13:52:10 GMT        Steve Youngs <steve@eicq.org>   patch-1
-
-    Summary:
-      Add the 0.2 ChangeLog file
-    Revision:
-      xetla--main--1.0--patch-1
-
-
-    new files:
-     ChangeLog.d/.arch-ids/ChangeLog-0.2.id
-     ChangeLog.d/ChangeLog-0.2
-
-
-2005-03-11 13:43:46 GMT        Steve Youngs <steve@eicq.org>   base-0
-
-    Summary:
-      tag of steve@eicq.org--2005/xetla--main--0.2--version-0
-    Revision:
-      xetla--main--1.0--base-0
-
-    (automatically generated log message)
-
-    new patches:
-     hroptatyr@sxemacs.org--sxemacs/xetla--hrop--0.1--base-0
-     hroptatyr@sxemacs.org--sxemacs/xetla--hrop--0.1--patch-1
-     hroptatyr@sxemacs.org--sxemacs/xetla--hrop--0.1--patch-2
-     hroptatyr@sxemacs.org--sxemacs/xetla--hrop--0.1--patch-3
-     hroptatyr@sxemacs.org--sxemacs/xetla--hrop--0.1--patch-4
-     hroptatyr@sxemacs.org--sxemacs/xetla--hrop--0.1--patch-5
-     hroptatyr@sxemacs.org--sxemacs/xetla--hrop--0.1--patch-6
-     hroptatyr@sxemacs.org--sxemacs/xetla--hrop--0.1--patch-7
-     hroptatyr@sxemacs.org--sxemacs/xetla--hrop--0.1--patch-8
-     hroptatyr@sxemacs.org--sxemacs/xetla--hrop--0.1--patch-9
-     hroptatyr@sxemacs.org--sxemacs/xetla--hrop--0.1--patch-10
-     hroptatyr@sxemacs.org--sxemacs/xetla--hrop--0.1--patch-11
-     hroptatyr@sxemacs.org--sxemacs/xetla--hrop--0.1--patch-12
-     hroptatyr@sxemacs.org--sxemacs/xetla--hrop--0.1--patch-13
-     hroptatyr@sxemacs.org--sxemacs/xetla--hrop--0.1--patch-14
-     steve@eicq.org--2004/xetla--main--0.1--base-0
-     steve@eicq.org--2004/xetla--main--0.1--patch-1
-     steve@eicq.org--2004/xetla--main--0.1--patch-2
-     steve@eicq.org--2004/xetla--main--0.1--patch-3
-     steve@eicq.org--2004/xetla--main--0.1--patch-4
-     steve@eicq.org--2004/xetla--main--0.1--patch-5
-     steve@eicq.org--2004/xetla--main--0.1--patch-6
-     steve@eicq.org--2004/xetla--main--0.1--patch-7
-     steve@eicq.org--2004/xetla--main--0.1--patch-8
-     steve@eicq.org--2004/xetla--main--0.1--patch-9
-     steve@eicq.org--2004/xetla--main--0.1--patch-10
-     steve@eicq.org--2004/xetla--main--0.1--patch-11
-     steve@eicq.org--2004/xetla--main--0.1--patch-12
-     steve@eicq.org--2004/xetla--main--0.1--patch-13
-     steve@eicq.org--2004/xetla--main--0.1--patch-14
-     steve@eicq.org--2004/xetla--main--0.1--patch-15
-     steve@eicq.org--2004/xetla--main--0.1--patch-16
-     steve@eicq.org--2004/xetla--main--0.1--patch-17
-     steve@eicq.org--2004/xetla--main--0.1--patch-18
-     steve@eicq.org--2004/xetla--main--0.1--patch-19
-     steve@eicq.org--2004/xetla--main--0.1--patch-20
-     steve@eicq.org--2004/xetla--main--0.1--patch-21
-     steve@eicq.org--2004/xetla--main--0.1--patch-22
-     steve@eicq.org--2004/xetla--main--0.1--patch-23
-     steve@eicq.org--2004/xetla--main--0.1--patch-24
-     steve@eicq.org--2005/xetla--main--0.2--base-0
-     steve@eicq.org--2005/xetla--main--0.2--patch-1
-     steve@eicq.org--2005/xetla--main--0.2--patch-2
-     steve@eicq.org--2005/xetla--main--0.2--patch-3
-     steve@eicq.org--2005/xetla--main--0.2--patch-4
-     steve@eicq.org--2005/xetla--main--0.2--patch-5
-     steve@eicq.org--2005/xetla--main--0.2--patch-6
-     steve@eicq.org--2005/xetla--main--0.2--patch-7
-     steve@eicq.org--2005/xetla--main--0.2--version-0
-
-
diff --git a/xemacs-packages/xetla/ChangeLog.d/ChangeLog-1.1 b/xemacs-packages/xetla/ChangeLog.d/ChangeLog-1.1
deleted file mode 100644 (file)
index d902dd4..0000000
+++ /dev/null
@@ -1,657 +0,0 @@
-# do not edit -- automatically generated by arch changelog
-# non-id: automatic-ChangeLog--steve@eicq.org--2005/xetla--main--1.1
-#
-
-2005-12-24 03:53:37 GMT        Steve Youngs <steve@eicq.org>   version-0
-
-    Summary:
-      xetla--main--1.1--version-0 is released!
-    Revision:
-      xetla--main--1.1--version-0
-
-
-
-2005-12-24 02:45:19 GMT        Steve Youngs <steve@eicq.org>   patch-26
-
-    Summary:
-      Tiny cleanup before release.
-    Revision:
-      xetla--main--1.1--patch-26
-
-    * TODO: Re-write.  I've missed a lot of stuff that should be in this
-      file, so ADD TO IT!!
-    
-
-    removed files:
-     .arch-ids/BINDINGS.id .arch-ids/FEATURES.id BINDINGS FEATURES
-
-    modified files:
-     TODO
-
-
-2005-12-18 23:30:21 GMT        Steve Youngs <steve@eicq.org>   patch-25
-
-    Summary:
-      Merged from hrop (patch 10) -- fix buffer-live-p errors
-    Revision:
-      xetla--main--1.1--patch-25
-
-    Patches applied:
-    
-     * hroptatyr@sxemacs.org--sxemacs/xetla--hrop--1.1--patch-10
-       minor fix, improve handling of killed buffers
-
-    modified files:
-     xetla-core.el
-
-    new patches:
-     hroptatyr@sxemacs.org--sxemacs/xetla--hrop--1.1--patch-10
-
-
-2005-11-27 03:27:38 GMT        Steve Youngs <steve@eicq.org>   patch-24
-
-    Summary:
-      Enhance the tips buffer with `substitute-command-keys'.
-    Revision:
-      xetla--main--1.1--patch-24
-
-    * xetla-tips.el (xetla-tips-array): Add more tips and use a syntax
-      compatible with `substitute-command-keys'.
-      (xetla-tips-popup-number): Pass the tip through
-      `substitute-command-keys'.
-    
-
-    modified files:
-     xetla-tips.el
-
-
-2005-11-26 22:53:44 GMT        Steve Youngs <steve@eicq.org>   patch-23
-
-    Summary:
-      Support `tla changelog ARCHIVE/VERSION' in `xetla-changelog'
-    Revision:
-      xetla--main--1.1--patch-23
-
-    This changeset improves `xetla-changelog'.  With a prefix arg you can now
-    specify a archive/version to show a ChangeLog for.
-    
-    It also puts the changelog buffer in `view-mode' to make it easier to
-    scroll around the buffer.
-    
-    * xetla.el (xetla-changelog): Support the VERSION arg to `tla
-      changelog'.  And put the changelog buffer into `view-mode' for easier
-      scrolling. 
-    
-
-    modified files:
-     xetla.el
-
-
-2005-11-13 09:15:07 GMT        Steve Youngs <steve@sxemacs.org>        patch-22
-
-    Summary:
-      Tidy up bookmark code
-    Revision:
-      xetla--main--1.1--patch-22
-
-    This changeset tidies up the bookmark code.  It ensures that anything
-    that can operate on a local tree takes the situation of multiple local
-    trees into account.
-    
-    It also makes sure that all bookmark operations that switch buffers
-    honour `xetla-switch-to-buffer-mode'.
-    
-    * xetla.el (xetla-bookmarks-inventory): Support
-      `xetla-switch-to-buffer-mode'. 
-      (xetla-bookmarks-inventory): Support the possibility of having mulitple
-      local trees.
-      (xetla-bookmarks-load-from-file-OBSOLETE): Removed.
-      (xetla-bookmarks-load-from-file): Remove condition-case.
-      (xetla-bookmarks-missing): Use `substitute-command-keys' to show how to
-      get to the bookmarks buffer.
-      (xetla-bookmarks-open-tree): Update doc string, mention prefix arg usage.
-      (xetla-bookmarks-find-file): Support multiple local trees via a prefix
-      arg. 
-      (xetla-bookmarks-tag): Use `substitute-command-keys' to show how to get
-      to the bookmarks buffer.
-      (xetla-bookmarks-changes): Support both "full" and "summary" format
-      changes as well as mulitple local trees.  All done through prefix
-      args...
-          No prefix arg -- full format, default tree.
-          One prefix arg -- summary format, default tree.
-          Two prefix args -- full format, prompt for tree.
-          Three prefix args -- summary format, prompt for tree.
-      (xetla-bookmarks): xetla -> XEtla in doc string.
-      (xetla-bookmarks-mode): Ditto.
-    
-    
-
-    modified files:
-     xetla.el
-
-
-2005-11-10 04:08:35 GMT        Steve Youngs <steve@eicq.org>   patch-21
-
-    Summary:
-      Make xetla-star-merge interactive
-    Revision:
-      xetla--main--1.1--patch-21
-
-    * xetla.el (xetla-star-merge): Make it interactive so it can be called
-      directly instead of just from bookmarks or inventory buffers.
-    
-
-    modified files:
-     xetla.el
-
-
-2005-11-09 00:28:43 GMT        Steve Youngs <steve@eicq.org>   patch-20
-
-    Summary:
-      Open non-default local tree of a bookmark
-    Revision:
-      xetla--main--1.1--patch-20
-
-    I discovered the other day that if a bookmark had more than one local
-    tree associated with it there was no way to open any tree apart from the
-    "default" tree.  This fixes that.
-    
-       In the bookmarks buffer:
-    
-            `o'     -- open "default tree"
-            `C-u o' -- ask user which tree to open, completing on the trees
-                       associated with that particular bookmark.  User is
-                       then asked if they want to make their choice the
-                       default.
-    
-    * xetla.el (xetla-bookmarks-open-tree): Use a prefix arg to handle a
-      bookmark having multiple local trees.
-    
-
-    modified files:
-     xetla.el
-
-
-2005-10-30 15:14:36 GMT        Steve Youngs <steve@sxemacs.org>        patch-19
-
-    Summary:
-      Make bookmarks honour `xetla-switch-to-buffer-mode'
-    Revision:
-      xetla--main--1.1--patch-19
-
-    * xetla.el (xetla-bookmarks-open-tree): Only run dired in another window
-      if `xetla-switch-to-buffer-mode' is something other than
-      `single-window'.
-      (xetla-bookmarks): Put the bookmarks buffer in the same window if
-      `xetla-switch-to-buffer-mode' is `single-window'.
-    
-
-    modified files:
-     xetla.el
-
-
-2005-07-28 10:21:43 GMT        Steve Youngs <steve@sxemacs.org>        patch-18
-
-    Summary:
-      Fix `xetla-arch-version-number' 
-    Revision:
-      xetla--main--1.1--patch-18
-
-    * xetla.el (xetla-arch-version-number): Fix regexp.
-    
-
-    modified files:
-     xetla.el
-
-
-2005-07-01 12:20:53 GMT        Steve Youngs <steve@eicq.org>   patch-17
-
-    Summary:
-      Update tips
-    Revision:
-      xetla--main--1.1--patch-17
-
-    * xetla-tips.el (xetla-tips-array): Remove tip about smerge.
-    
-
-    modified files:
-     xetla-tips.el
-
-
-2005-07-01 12:10:26 GMT        Steve Youngs <steve@eicq.org>   patch-16
-
-    Summary:
-      Fix committing from the log buffer.
-    Revision:
-      xetla--main--1.1--patch-16
-
-    * xetla.el (xetla-commit-fix): Fix regex.
-      (xetla-log-edit-done): When current-prefix-arg is numeric, it's
-      actually a list, so use its `car'.  Also, kill the log buffer _before_
-      running `tla commit', otherwise the user gets asked a cryptic question
-      about killing a process.
-    
-
-    modified files:
-     xetla.el
-
-
-2005-07-01 09:58:58 GMT        Steve Youngs <steve@eicq.org>   patch-15
-
-    Summary:
-      Ignore the duplicate logs for patch-12 to patch-14 (whee hiccup with XEtla)
-    Revision:
-      xetla--main--1.1--patch-15
-
-
-
-2005-07-01 09:37:07 GMT        Steve Youngs <steve@eicq.org>   patch-14
-
-    Summary:
-      Improve handling of seal/fix commits
-    Revision:
-      xetla--main--1.1--patch-14
-
-    This improves the implementation of seal/fix commits.  It makes it
-    possible to seal/fix from the log edit buffer by using the normal
-    existing C-c C-c keybinding...
-    
-        C-c C-c             -- Save and bury the log buffer
-        C-u C-c C-c         -- Save and kill the log + commit
-        C-u C-u C-c C-c     -- Save and kill the log + commit with seal
-        C-u C-u C-u C-c C-c -- Save and kill the log + commit with fix
-    
-    It also guards against trying to seal or fix when that isn't
-    appropriate.  For example, it won't let you "fix" an archive that isn't
-    sealed.  Neither will it let you "seal" an archive that is already sealed
-    or fixed.
-    
-    * xetla.el (xetla-get-current-revision): New.  Returns the latest fully
-      qualified revision in the current directory.
-      (xetla-commit-seal): Check against sealing when sealing is the wrong
-      thing to do.
-      (xetla-commit-fix): Ditto.
-      (xetla-log-edit-done): Rewrite.  Handle sealing and fixing commits.
-      Make it possible to seal and fix from the existing keymap using prefix
-      args.  See the doc string for the details.
-      (xetla-log-edit-done-with-sealing): Removed.  This isn't needed
-      anymore. 
-      (xetla-log-edit-done-with-fixing): Ditto.
-    
-
-
-2005-07-01 09:32:48 GMT        Steve Youngs <steve@eicq.org>   patch-13
-
-    Summary:
-      Improve handling of seal/fix commits
-    Revision:
-      xetla--main--1.1--patch-13
-
-    This improves the implementation of seal/fix commits.  It makes it
-    possible to seal/fix from the log edit buffer by using the normal
-    existing C-c C-c keybinding...
-    
-        C-c C-c             -- Save and bury the log buffer
-        C-u C-c C-c         -- Save and kill the log + commit
-        C-u C-u C-c C-c     -- Save and kill the log + commit with seal
-        C-u C-u C-u C-c C-c -- Save and kill the log + commit with fix
-    
-    It also guards against trying to seal or fix when that isn't
-    appropriate.  For example, it won't let you "fix" an archive that isn't
-    sealed.  Neither will it let you "seal" an archive that is already sealed
-    or fixed.
-    
-    * xetla.el (xetla-get-current-revision): New.  Returns the latest fully
-      qualified revision in the current directory.
-      (xetla-commit-seal): Check against sealing when sealing is the wrong
-      thing to do.
-      (xetla-commit-fix): Ditto.
-      (xetla-log-edit-done): Rewrite.  Handle sealing and fixing commits.
-      Make it possible to seal and fix from the existing keymap using prefix
-      args.  See the doc string for the details.
-      (xetla-log-edit-done-with-sealing): Removed.  This isn't needed
-      anymore. 
-      (xetla-log-edit-done-with-fixing): Ditto.
-    
-
-
-2005-07-01 09:32:04 GMT        Steve Youngs <steve@eicq.org>   patch-12
-
-    Summary:
-      Improve handling of seal/fix commits
-    Revision:
-      xetla--main--1.1--patch-12
-
-    This improves the implementation of seal/fix commits.  It makes it
-    possible to seal/fix from the log edit buffer by using the normal
-    existing C-c C-c keybinding...
-    
-        C-c C-c             -- Save and bury the log buffer
-        C-u C-c C-c         -- Save and kill the log + commit
-        C-u C-u C-c C-c     -- Save and kill the log + commit with seal
-        C-u C-u C-u C-c C-c -- Save and kill the log + commit with fix
-    
-    It also guards against trying to seal or fix when that isn't
-    appropriate.  For example, it won't let you "fix" an archive that isn't
-    sealed.  Neither will it let you "seal" an archive that is already sealed
-    or fixed.
-    
-    * xetla.el (xetla-get-current-revision): New.  Returns the latest fully
-      qualified revision in the current directory.
-      (xetla-commit-seal): Check against sealing when sealing is the wrong
-      thing to do.
-      (xetla-commit-fix): Ditto.
-      (xetla-log-edit-done): Rewrite.  Handle sealing and fixing commits.
-      Make it possible to seal and fix from the existing keymap using prefix
-      args.  See the doc string for the details.
-      (xetla-log-edit-done-with-sealing): Removed.  This isn't needed
-      anymore. 
-      (xetla-log-edit-done-with-fixing): Ditto.
-    
-
-
-2005-07-01 09:31:35 GMT        Steve Youngs <steve@eicq.org>   patch-11
-
-    Summary:
-      Improve handling of seal/fix commits
-    Revision:
-      xetla--main--1.1--patch-11
-
-    This improves the implementation of seal/fix commits.  It makes it
-    possible to seal/fix from the log edit buffer by using the normal
-    existing C-c C-c keybinding...
-    
-        C-c C-c             -- Save and bury the log buffer
-        C-u C-c C-c         -- Save and kill the log + commit
-        C-u C-u C-c C-c     -- Save and kill the log + commit with seal
-        C-u C-u C-u C-c C-c -- Save and kill the log + commit with fix
-    
-    It also guards against trying to seal or fix when that isn't
-    appropriate.  For example, it won't let you "fix" an archive that isn't
-    sealed.  Neither will it let you "seal" an archive that is already sealed
-    or fixed.
-    
-    * xetla.el (xetla-get-current-revision): New.  Returns the latest fully
-      qualified revision in the current directory.
-      (xetla-commit-seal): Check against sealing when sealing is the wrong
-      thing to do.
-      (xetla-commit-fix): Ditto.
-      (xetla-log-edit-done): Rewrite.  Handle sealing and fixing commits.
-      Make it possible to seal and fix from the existing keymap using prefix
-      args.  See the doc string for the details.
-      (xetla-log-edit-done-with-sealing): Removed.  This isn't needed
-      anymore. 
-      (xetla-log-edit-done-with-fixing): Ditto.
-    
-
-    modified files:
-     xetla.el
-
-
-2005-06-30 04:30:32 GMT        Steve Youngs <steve@eicq.org>   patch-10
-
-    Summary:
-      Merged from hroptatyr@sxemacs.org--sxemacs (patch 6-7) -- seal/fix
-    Revision:
-      xetla--main--1.1--patch-10
-
-    Patches applied:
-    
-     * hroptatyr@sxemacs.org--sxemacs/xetla--hrop--1.1--patch-6
-       new, add support for --seal and --fix commits
-    
-     * hroptatyr@sxemacs.org--sxemacs/xetla--hrop--1.1--patch-7
-       fix, minor enhancement to xetla-log-edit-done
-
-    modified files:
-     xetla.el
-
-    new patches:
-     hroptatyr@sxemacs.org--sxemacs/xetla--hrop--1.1--patch-6
-     hroptatyr@sxemacs.org--sxemacs/xetla--hrop--1.1--patch-7
-
-
-2005-05-26 02:49:43 GMT        Steve Youngs <steve@eicq.org>   patch-9
-
-    Summary:
-      Try to be smart about having both XEtla and Xtla installed
-    Revision:
-      xetla--main--1.1--patch-9
-
-    Having both XEtla and Xtla installed at the same time is _NOT_ a good
-    idea.  This changeset attempts to get around it.  It pops up a warning
-    buffer to tell the user what is going on and offers a way to disable
-    either XEtla or Xtla for the current session.  This isn't a "fix" as such
-    and the warning advises the user that the only real solution is to
-    physically remove either XEtla or Xtla.
-    
-    * xetla.el (xetla-dont-warn-about-xtla): New.  When non-nil don't warn
-      the user about having both XEtla and Xtla installed.
-      (xetla-warn-about-xtla-text): Text used in warning buffer when XEtla
-      and Xtla are installed.
-      (xetla-warn-about-xtla): Pop up a warning if both XEtla and Xtla are
-      installed. 
-      (xetla-attempt-xetla-removal): Attempt to disable XEtla in the current
-      session. 
-      (xetla-attempt-xtla-removal): Same as `xetla-attempt-xetla-removal' but
-      for Xtla instead of XEtla.
-    
-
-    modified files:
-     xetla.el
-
-
-2005-05-21 01:20:18 GMT        Steve Youngs <steve@eicq.org>   patch-8
-
-    Summary:
-      Fix build (missing ad-add-advice)
-    Revision:
-      xetla--main--1.1--patch-8
-
-    * xetla-browse.el: Autoload `ad-add-advice' at compile time
-    
-
-    modified files:
-     xetla-browse.el
-
-
-2005-05-21 01:09:39 GMT        Steve Youngs <steve@eicq.org>   patch-7
-
-    Summary:
-      Merged from hroptatyr@sxemacs.org--sxemacs (patch 4) -- conflict handling
-    Revision:
-      xetla--main--1.1--patch-7
-
-    Patches applied:
-    
-     * hroptatyr@sxemacs.org--sxemacs/xetla--hrop--1.1--patch-4
-       new, warn the users in case of .rej files
-
-    removed files:
-     .arch-ids/smerge.el.id smerge.el
-
-    modified files:
-     Makefile xetla.el
-
-    new patches:
-     hroptatyr@sxemacs.org--sxemacs/xetla--hrop--1.1--patch-4
-
-
-2005-04-18 03:20:36 GMT        Steve Youngs <steve@eicq.org>   patch-6
-
-    Summary:
-      Fix bug of x-f-f-h trying to use a VC var when VC isn't loaded
-    Revision:
-      xetla--main--1.1--patch-6
-
-    * xetla.el (vc-ignore-vc-files): This is not only needed at compile time
-      but also at run-time.  Especially for people who do _not_ have the vc
-      package installed or loaded.  So don't wrap in a eval-when-compile.  This
-      fixes a "symbol's definition as variable is void: vc-ignore-vc-files"
-      error that xetla-find-file-hook was generating.
-    
-
-    modified files:
-     xetla.el
-
-
-2005-04-09 21:31:25 GMT        Steve Youngs <steve@eicq.org>   patch-5
-
-    Summary:
-      Merged from hroptatyr@sxemacs.org--sxemacs (patch 2) -- fix tla add 
-    Revision:
-      xetla--main--1.1--patch-5
-
-    Patches applied:
-    
-     * hroptatyr@sxemacs.org--sxemacs/xetla--hrop--1.1--patch-2
-       fix, use `tla add' or `tla add-id' depending on which tla version is installed
-
-    modified files:
-     xetla.el
-
-    new patches:
-     hroptatyr@sxemacs.org--sxemacs/xetla--hrop--1.1--patch-2
-
-
-2005-04-09 02:52:17 GMT        Steve Youngs <steve@eicq.org>   patch-4
-
-    Summary:
-      Improve xetla-help -- enable displaying `tla help'
-    Revision:
-      xetla--main--1.1--patch-4
-
-    * xetla.el (xetla-help): Handle `tla help RET'.  If the user doesn't give
-      a command to get help on, display the output of `tla help'.
-      (xetla-display-global-help): New.  Used to display a buffer containing
-      the output from `tla help'.  Each tla command displayed in the buffer
-      is an extent which allows you to display the help for that command.
-      (xetla-help-extent-map): New.  Keymap used in the `xetla-display-global-help'
-      buffer.
-      (xetla-help-via-mouse): New.  Display help for tla command via mouse.
-      (xetla-help-via-keyb): New.  Display help for tla command via keyboard.
-    
-    * xetla-core.el (xetla-process-buffer-mode): Typo Xetla -> XEtla.
-    
-
-    modified files:
-     xetla-core.el xetla.el
-
-
-2005-04-07 23:54:09 GMT        Steve Youngs <steve@eicq.org>   patch-3
-
-    Summary:
-      Broken backward imcompatibility of tla 1.3.1 -- add -> add-id
-    Revision:
-      xetla--main--1.1--patch-3
-
-    * xetla.el (xetla-add-id): New.  Uses `tla add-id' instead of `tla add'.
-      (xetla-add): An alias to `xetla-add-id'.
-      (xetla-inventory-add-files): Use `xetla-add-id'.
-      (xetla-regenerate-id-for-file): Ditto.
-      (xetla-tree-lint-add-files): Ditto.
-    
-
-    modified files:
-     xetla.el
-
-
-2005-04-06 14:00:48 GMT        Steve Youngs <steve@eicq.org>   patch-2
-
-    Summary:
-      Remove =partner-versions file
-    Revision:
-      xetla--main--1.1--patch-2
-
-
-
-2005-03-30 22:44:04 GMT        Steve Youngs <steve@eicq.org>   patch-1
-
-    Summary:
-      Start 1.1
-    Revision:
-      xetla--main--1.1--patch-1
-
-    * Makefile (VER): Bump to 1.1
-    
-    Add ChangeLog file for previous release
-    
-
-    new files:
-     ChangeLog.d/.arch-ids/ChangeLog-1.0.id
-     ChangeLog.d/ChangeLog-1.0
-
-    modified files:
-     Makefile
-
-
-2005-03-30 22:39:14 GMT        Steve Youngs <steve@eicq.org>   base-0
-
-    Summary:
-      tag of steve@eicq.org--2005/xetla--main--1.0--version-0
-    Revision:
-      xetla--main--1.1--base-0
-
-    (automatically generated log message)
-
-    new patches:
-     hroptatyr@sxemacs.org--sxemacs/xetla--hrop--0.1--base-0
-     hroptatyr@sxemacs.org--sxemacs/xetla--hrop--0.1--patch-1
-     hroptatyr@sxemacs.org--sxemacs/xetla--hrop--0.1--patch-2
-     hroptatyr@sxemacs.org--sxemacs/xetla--hrop--0.1--patch-3
-     hroptatyr@sxemacs.org--sxemacs/xetla--hrop--0.1--patch-4
-     hroptatyr@sxemacs.org--sxemacs/xetla--hrop--0.1--patch-5
-     hroptatyr@sxemacs.org--sxemacs/xetla--hrop--0.1--patch-6
-     hroptatyr@sxemacs.org--sxemacs/xetla--hrop--0.1--patch-7
-     hroptatyr@sxemacs.org--sxemacs/xetla--hrop--0.1--patch-8
-     hroptatyr@sxemacs.org--sxemacs/xetla--hrop--0.1--patch-9
-     hroptatyr@sxemacs.org--sxemacs/xetla--hrop--0.1--patch-10
-     hroptatyr@sxemacs.org--sxemacs/xetla--hrop--0.1--patch-11
-     hroptatyr@sxemacs.org--sxemacs/xetla--hrop--0.1--patch-12
-     hroptatyr@sxemacs.org--sxemacs/xetla--hrop--0.1--patch-13
-     hroptatyr@sxemacs.org--sxemacs/xetla--hrop--0.1--patch-14
-     steve@eicq.org--2004/xetla--main--0.1--base-0
-     steve@eicq.org--2004/xetla--main--0.1--patch-1
-     steve@eicq.org--2004/xetla--main--0.1--patch-2
-     steve@eicq.org--2004/xetla--main--0.1--patch-3
-     steve@eicq.org--2004/xetla--main--0.1--patch-4
-     steve@eicq.org--2004/xetla--main--0.1--patch-5
-     steve@eicq.org--2004/xetla--main--0.1--patch-6
-     steve@eicq.org--2004/xetla--main--0.1--patch-7
-     steve@eicq.org--2004/xetla--main--0.1--patch-8
-     steve@eicq.org--2004/xetla--main--0.1--patch-9
-     steve@eicq.org--2004/xetla--main--0.1--patch-10
-     steve@eicq.org--2004/xetla--main--0.1--patch-11
-     steve@eicq.org--2004/xetla--main--0.1--patch-12
-     steve@eicq.org--2004/xetla--main--0.1--patch-13
-     steve@eicq.org--2004/xetla--main--0.1--patch-14
-     steve@eicq.org--2004/xetla--main--0.1--patch-15
-     steve@eicq.org--2004/xetla--main--0.1--patch-16
-     steve@eicq.org--2004/xetla--main--0.1--patch-17
-     steve@eicq.org--2004/xetla--main--0.1--patch-18
-     steve@eicq.org--2004/xetla--main--0.1--patch-19
-     steve@eicq.org--2004/xetla--main--0.1--patch-20
-     steve@eicq.org--2004/xetla--main--0.1--patch-21
-     steve@eicq.org--2004/xetla--main--0.1--patch-22
-     steve@eicq.org--2004/xetla--main--0.1--patch-23
-     steve@eicq.org--2004/xetla--main--0.1--patch-24
-     steve@eicq.org--2005/xetla--main--0.2--base-0
-     steve@eicq.org--2005/xetla--main--0.2--patch-1
-     steve@eicq.org--2005/xetla--main--0.2--patch-2
-     steve@eicq.org--2005/xetla--main--0.2--patch-3
-     steve@eicq.org--2005/xetla--main--0.2--patch-4
-     steve@eicq.org--2005/xetla--main--0.2--patch-5
-     steve@eicq.org--2005/xetla--main--0.2--patch-6
-     steve@eicq.org--2005/xetla--main--0.2--patch-7
-     steve@eicq.org--2005/xetla--main--0.2--version-0
-     steve@eicq.org--2005/xetla--main--1.0--base-0
-     steve@eicq.org--2005/xetla--main--1.0--patch-1
-     steve@eicq.org--2005/xetla--main--1.0--patch-2
-     steve@eicq.org--2005/xetla--main--1.0--patch-3
-     steve@eicq.org--2005/xetla--main--1.0--patch-4
-     steve@eicq.org--2005/xetla--main--1.0--patch-5
-     steve@eicq.org--2005/xetla--main--1.0--patch-6
-     steve@eicq.org--2005/xetla--main--1.0--patch-7
-     steve@eicq.org--2005/xetla--main--1.0--version-0
-
-
diff --git a/xemacs-packages/xetla/Makefile b/xemacs-packages/xetla/Makefile
deleted file mode 100644 (file)
index 345b1df..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-# Makefile for XEtla
-
-# 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 = 1.04
-AUTHOR_VERSION = steve@eicq.org--2005/xetla--main--1.1--version-0
-MAINTAINER = Steve Youngs <steve@youngs.au.com>
-PACKAGE = xetla
-PKG_TYPE = regular
-REQUIRES = ediff xemacs-base jde mail-lib dired prog-modes
-CATEGORY = standard
-
-ELCS = \
-       ewoc.elc          \
-       xetla-version.elc \
-       xetla-browse.elc  \
-       xetla-core.elc    \
-       xetla-defs.elc    \
-       xetla-tips.elc    \
-       xetla.elc
-
-# XEtla can use Gnus, but it is optional.  So instead of making Gnus a
-# dependency of XEtla, just put the Gnus directory into the load-path
-# to avoid byte-compiler warnings. --SY.
-PRELOADS = -eval \("push \"../gnus/lisp\" load-path"\)
-
-include ../../XEmacs.rules
diff --git a/xemacs-packages/xetla/ewoc.el b/xemacs-packages/xetla/ewoc.el
deleted file mode 100644 (file)
index 3c10f1b..0000000
+++ /dev/null
@@ -1,611 +0,0 @@
-;;; ewoc.el --- utility to maintain a view of a list of objects in a buffer
-
-;; Copyright (C) 1991, 92, 93, 94, 95, 96, 97, 98, 99, 2000   Free Software Foundation
-
-;; Author: Per Cederqvist <ceder@lysator.liu.se>
-;;     Inge Wallin <inge@lysator.liu.se>
-;; Maintainer: monnier@gnu.org
-;; Created: 3 Aug 1992
-;; Keywords: extensions, lisp
-
-;; This file is part of GNU Emacs.
-
-;; GNU Emacs 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.
-
-;; GNU Emacs 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:
-
-;; Ewoc Was Once Cookie
-;; But now it's Emacs' Widget for Object Collections
-
-;; As the name implies this derives from the `cookie' package (part
-;; of Elib).  The changes are pervasive though mostly superficial:
-
-;; - uses CL (and its `defstruct')
-;; - separate from Elib.
-;; - uses its own version of a doubly-linked list which allows us
-;;   to merge the elib-wrapper and the elib-node structures into ewoc-node
-;; - dropping functions not used by PCL-CVS (the only client of ewoc at the
-;;   time of writing)
-;; - removing unused arguments
-;; - renaming:
-;;   elib-node ==>  ewoc--node
-;;   collection ==>  ewoc
-;;   tin       ==>  ewoc--node
-;;   cookie    ==>  data or element or elem
-
-;;     Introduction
-;;     ============
-;;
-;; Ewoc is a package that implements a connection between an
-;; dll (a doubly linked list) and the contents of a buffer.
-;; Possible uses are dired (have all files in a list, and show them),
-;; buffer-list, kom-prioritize (in the LysKOM elisp client) and
-;; others.  pcl-cvs.el uses ewoc.el.
-;;
-;; Ewoc can be considered as the `view' part of a model-view-controller.
-;;
-;; A `element' can be any lisp object.  When you use the ewoc
-;; package you specify a pretty-printer, a function that inserts
-;; a printable representation of the element in the buffer.  (The
-;; pretty-printer should use "insert" and not
-;; "insert-before-markers").
-;;
-;; A `ewoc' consists of a doubly linked list of elements, a
-;; header, a footer and a pretty-printer.  It is displayed at a
-;; certain point in a certain buffer.  (The buffer and point are
-;; fixed when the ewoc is created).  The header and the footer
-;; are constant strings.  They appear before and after the elements.
-;;
-;; Ewoc does not affect the mode of the buffer in any way. It
-;; merely makes it easy to connect an underlying data representation
-;; to the buffer contents.
-;;
-;; A `ewoc--node' is an object that contains one element.  There are
-;; functions in this package that given an ewoc--node extract the data, or
-;; give the next or previous ewoc--node.  (All ewoc--nodes are linked together
-;; in a doubly linked list.  The `previous' ewoc--node is the one that appears
-;; before the other in the buffer.)  You should not do anything with
-;; an ewoc--node except pass it to the functions in this package.
-;;
-;; An ewoc is a very dynamic thing.  You can easily add or delete elements.
-;; You can apply a function to all elements in an ewoc, etc, etc.
-;;
-;; Remember that an element can be anything.  Your imagination is the
-;; limit!  It is even possible to have another ewoc as an
-;; element.  In that way some kind of tree hierarchy can be created.
-;;
-;; Full documentation will, God willing, soon be available in a
-;; Texinfo manual.
-
-;; In the mean time `grep '^(.*ewoc-[^-]' emacs-lisp/ewoc.el' can help
-;; you find all the exported functions:
-;; 
-;; (defun ewoc-create (pretty-printer &optional header footer)
-;; (defalias 'ewoc-data 'ewoc--node-data)
-;; (defun ewoc-location (node)
-;; (defun ewoc-enter-first (ewoc data)
-;; (defun ewoc-enter-last (ewoc data)
-;; (defun ewoc-enter-after (ewoc node data)
-;; (defun ewoc-enter-before (ewoc node data)
-;; (defun ewoc-next (ewoc node)
-;; (defun ewoc-prev (ewoc node)
-;; (defun ewoc-nth (ewoc n)
-;; (defun ewoc-map (map-function ewoc &rest args)
-;; (defun ewoc-filter (ewoc predicate &rest args)
-;; (defun ewoc-locate (ewoc &optional pos guess)
-;; (defun ewoc-invalidate (ewoc &rest nodes)
-;; (defun ewoc-goto-prev (ewoc arg)
-;; (defun ewoc-goto-next (ewoc arg)
-;; (defun ewoc-goto-node (ewoc node)
-;; (defun ewoc-refresh (ewoc)
-;; (defun ewoc-collect (ewoc predicate &rest args)
-;; (defun ewoc-buffer (ewoc)
-;; (defun ewoc-get-hf (ewoc)
-;; (defun ewoc-set-hf (ewoc header footer)
-
-;;     Coding conventions
-;;     ==================
-;;
-;; All functions of course start with `ewoc'.  Functions and macros
-;; starting with the prefix `ewoc--' are meant for internal use,
-;; while those starting with `ewoc-' are exported for public use.
-;; There are currently no global or buffer-local variables used.
-
-
-;;; Code:
-
-(eval-when-compile (require 'cl))      ;because of CL compiler macros
-
-;; The doubly linked list is implemented as a circular list
-;; with a dummy node first and last. The dummy node is used as
-;; "the dll" (or rather is the dll handle passed around).
-
-(defstruct (ewoc--node
-           (:type vector)              ;required for ewoc--node-branch hack
-           (:constructor ewoc--node-create (start-marker data)))
-  left right data start-marker)
-
-(eval-when-compile (defvar dll))
-
-(defalias 'ewoc--node-branch 'aref)
-
-(defun ewoc--dll-create ()
-  "Create an empty doubly linked list."
-  (let ((dummy-node (ewoc--node-create 'DL-LIST 'DL-LIST)))
-    (setf (ewoc--node-right dummy-node) dummy-node)
-    (setf (ewoc--node-left dummy-node) dummy-node)
-    dummy-node))
-
-(defun ewoc--node-enter-before (node elemnode)
-  "Insert ELEMNODE before NODE in a DLL."
-  (assert (and (null (ewoc--node-left elemnode)) (null (ewoc--node-right elemnode))))
-  (setf (ewoc--node-left elemnode) (ewoc--node-left node))
-  (setf (ewoc--node-right elemnode) node)
-  (setf (ewoc--node-right (ewoc--node-left node)) elemnode)
-  (setf (ewoc--node-left node) elemnode))
-
-(defun ewoc--node-enter-first (dll node)
-  "Add a free floating NODE first in DLL."
-  (ewoc--node-enter-before (ewoc--node-right dll) node))
-
-(defun ewoc--node-enter-last (dll node)
-  "Add a free floating NODE last in DLL."
-  (ewoc--node-enter-before dll node))
-
-(defun ewoc--node-next (dll node)
-  "Return the node after NODE, or nil if NODE is the last node."
-  (unless (eq (ewoc--node-right node) dll) (ewoc--node-right node)))
-
-(defun ewoc--node-prev (dll node)
-  "Return the node before NODE, or nil if NODE is the first node."
-  (unless (eq (ewoc--node-left node) dll) (ewoc--node-left node)))
-
-(defun ewoc--node-delete (node)
-  "Unbind NODE from its doubly linked list and return it."
-  ;; This is a no-op when applied to the dummy node. This will return
-  ;; nil if applied to the dummy node since it always contains nil.
-  (setf (ewoc--node-right (ewoc--node-left node)) (ewoc--node-right node))
-  (setf (ewoc--node-left (ewoc--node-right node)) (ewoc--node-left node))
-  (setf (ewoc--node-left node) nil)
-  (setf (ewoc--node-right node) nil)
-  node)
-
-(defun ewoc--node-nth (dll n)
-  "Return the Nth node from the doubly linked list DLL.
-N counts from zero. If DLL is not that long, nil is returned.
-If N is negative, return the -(N+1)th last element.
-Thus, (ewoc--node-nth dll 0) returns the first node,
-and (ewoc--node-nth dll -1) returns the last node."
-  ;; Branch 0 ("follow left pointer") is used when n is negative.
-  ;; Branch 1 ("follow right pointer") is used otherwise.
-  (let* ((branch (if (< n 0) 0 1))
-        (node   (ewoc--node-branch dll branch)))
-    (if (< n 0) (setq n (- -1 n)))
-    (while (and (not (eq dll node)) (> n 0))
-      (setq node (ewoc--node-branch node branch))
-      (setq n (1- n)))
-    (unless (eq dll node) node)))
-
-(defun ewoc-location (node)
-  "Return the start location of NODE."
-  (ewoc--node-start-marker node))
-
-\f
-;;; The ewoc data type
-
-(defstruct (ewoc
-           (:constructor nil)
-           (:constructor ewoc--create
-                         (buffer pretty-printer header footer dll))
-           (:conc-name ewoc--))
-  buffer pretty-printer header footer dll last-node)
-
-(defmacro ewoc--set-buffer-bind-dll-let* (ewoc varlist &rest forms)
-  "Execute FORMS with ewoc--buffer selected as current buffer,
-dll bound to dll, and VARLIST bound as in a let*.
-dll will be bound when VARLIST is initialized, but the current
-buffer will *not* have been changed.
-Return value of last form in FORMS."
-  (let ((old-buffer (make-symbol "old-buffer"))
-       (hnd (make-symbol "ewoc")))
-    (` (let* (((, old-buffer) (current-buffer))
-             ((, hnd) (, ewoc))
-             (dll (ewoc--dll (, hnd)))
-             (,@ varlist))
-        (set-buffer (ewoc--buffer (, hnd)))
-        (unwind-protect
-            (progn (,@ forms))
-          (set-buffer (, old-buffer)))))))
-
-(defmacro ewoc--set-buffer-bind-dll (ewoc &rest forms)
-  `(ewoc--set-buffer-bind-dll-let* ,ewoc nil ,@forms))
-
-(defsubst ewoc--filter-hf-nodes (ewoc node)
-  "Evaluate NODE once and return it.
-BUT if it is the header or the footer in EWOC return nil instead."
-  (unless (or (eq node (ewoc--header ewoc))
-             (eq node (ewoc--footer ewoc)))
-    node))
-
-
-(defun ewoc--create-node (data pretty-printer pos)
-  "Call PRETTY-PRINTER with point set at POS in current buffer.
-Remember the start position. Create a wrapper containing that
-start position and the element DATA."
-  (save-excursion
-    ;; Remember the position as a number so that it doesn't move
-    ;; when we insert the string.
-    (when (markerp pos) (setq pos (marker-position pos)))
-    (goto-char pos)
-    (let ((inhibit-read-only t))
-      ;; Insert the trailing newline using insert-before-markers
-      ;; so that the start position for the next element is updated.
-      (insert-before-markers ?\n)
-      ;; Move back, and call the pretty-printer.
-      (backward-char 1)
-      (funcall pretty-printer data)
-      (ewoc--node-create (copy-marker pos) data))))
-
-
-(defun ewoc--delete-node-internal (ewoc node)
-  "Delete a data string from EWOC.
-Can not be used on the footer. Returns the wrapper that is deleted.
-The start-marker in the wrapper is set to nil, so that it doesn't
-consume any more resources."
-  (let ((dll (ewoc--dll ewoc))
-       (inhibit-read-only t))
-    ;; If we are about to delete the node pointed at by last-node,
-    ;; set last-node to nil.
-    (if (eq (ewoc--last-node ewoc) node)
-       (setf (ewoc--last-node ewoc) nil))
-
-    (delete-region (ewoc--node-start-marker node)
-                  (ewoc--node-start-marker (ewoc--node-next dll node)))
-    (set-marker (ewoc--node-start-marker node) nil)
-    ;; Delete the node, and return the wrapper.
-    (ewoc--node-delete node)))
-
-
-(defun ewoc--refresh-node (pp node)
-  "Redisplay the element represented by NODE using the pretty-printer PP."
-  (let ((inhibit-read-only t))
-    (save-excursion
-      ;; First, remove the string from the buffer:
-      (delete-region (ewoc--node-start-marker node)
-                    (1- (marker-position
-                         (ewoc--node-start-marker (ewoc--node-right node)))))
-      ;; Calculate and insert the string.
-      (goto-char (ewoc--node-start-marker node))
-      (funcall pp (ewoc--node-data node)))))
-\f
-;;; ===========================================================================
-;;;                  Public members of the Ewoc package
-
-
-(defun ewoc-create (pretty-printer &optional header footer)
-  "Create an empty ewoc.
-
-The ewoc will be inserted in the current buffer at the current position.
-
-PRETTY-PRINTER should be a function that takes one argument, an
-element, and inserts a string representing it in the buffer (at
-point). The string PRETTY-PRINTER inserts may be empty or span
-several linse. A trailing newline will always be inserted
-automatically. The PRETTY-PRINTER should use insert, and not
-insert-before-markers.
-
-Optional third argument HEADER is a string that will always be
-present at the top of the ewoc. HEADER should end with a
-newline.  Optionaly fourth argument FOOTER is similar, and will
-be inserted at the bottom of the ewoc."
-  (let ((new-ewoc
-        (ewoc--create (current-buffer)
-                      pretty-printer nil nil (ewoc--dll-create)))
-       (pos (point)))
-    (ewoc--set-buffer-bind-dll new-ewoc
-      ;; Set default values
-      (unless header (setq header ""))
-      (unless footer (setq footer ""))
-      (setf (ewoc--node-start-marker dll) (copy-marker pos))
-      (let ((foot (ewoc--create-node footer (lambda (x) (insert footer)) pos))
-           (head (ewoc--create-node header (lambda (x) (insert header)) pos)))
-       (ewoc--node-enter-first dll head)
-       (ewoc--node-enter-last  dll foot)
-       (setf (ewoc--header new-ewoc) head)
-       (setf (ewoc--footer new-ewoc) foot)))
-    ;; Return the ewoc
-    new-ewoc))
-
-(defalias 'ewoc-data 'ewoc--node-data)
-
-(defun ewoc-enter-first (ewoc data)
-  "Enter DATA first in EWOC."
-  (ewoc--set-buffer-bind-dll ewoc
-    (ewoc-enter-after ewoc (ewoc--node-nth dll 0) data)))
-
-(defun ewoc-enter-last (ewoc data)
-  "Enter DATA last in EWOC."
-  (ewoc--set-buffer-bind-dll ewoc
-    (ewoc-enter-before ewoc (ewoc--node-nth dll -1) data)))
-
-
-(defun ewoc-enter-after (ewoc node data)
-  "Enter a new element DATA after NODE in EWOC.
-Returns the new NODE."
-  (ewoc--set-buffer-bind-dll ewoc
-    (ewoc-enter-before ewoc (ewoc--node-next dll node) data)))
-
-(defun ewoc-enter-before (ewoc node data)
-  "Enter a new element DATA before NODE in EWOC.
-Returns the new NODE."
-  (ewoc--set-buffer-bind-dll ewoc
-    (ewoc--node-enter-before
-     node
-     (ewoc--create-node
-      data
-      (ewoc--pretty-printer ewoc)
-      (ewoc--node-start-marker node)))))
-
-(defun ewoc-next (ewoc node)
-  "Get the next node.
-Returns nil if NODE is nil or the last element."
-  (when node
-    (ewoc--filter-hf-nodes
-     ewoc (ewoc--node-next (ewoc--dll ewoc) node))))
-
-(defun ewoc-prev (ewoc node)
-  "Get the previous node.
-Returns nil if NODE is nil or the first element."
-  (when node
-    (ewoc--filter-hf-nodes
-     ewoc
-     (ewoc--node-prev (ewoc--dll ewoc) node))))
-
-
-(defun ewoc-nth (ewoc n)
-  "Return the Nth node.
-N counts from zero. Nil is returned if there is less than N elements.
-If N is negative, return the -(N+1)th last element.
-Thus, (ewoc-nth dll 0) returns the first node,
-and (ewoc-nth dll -1) returns the last node.
-Use `ewoc--node-data' to extract the data from the node."
-  ;; Skip the header (or footer, if n is negative).
-  (setq n (if (< n 0) (1- n) (1+ n)))
-  (ewoc--filter-hf-nodes ewoc
-                 (ewoc--node-nth (ewoc--dll ewoc) n)))
-
-(defun ewoc-map (map-function ewoc &rest args)
-  "Apply MAP-FUNCTION to all elements in EWOC.
-MAP-FUNCTION is applied to the first element first.
-If MAP-FUNCTION returns non-nil the element will be refreshed (its
-pretty-printer will be called once again).
-
-Note that the buffer for EWOC will be current buffer when MAP-FUNCTION 
-is called.  MAP-FUNCTION must restore the current buffer to BUFFER before 
-it returns, if it changes it.
-
-If more than two arguments are given, the remaining
-arguments will be passed to MAP-FUNCTION."
-  (ewoc--set-buffer-bind-dll-let* ewoc
-      ((footer (ewoc--footer ewoc))
-       (node (ewoc--node-nth dll 1)))
-    (while (not (eq node footer))
-      (if (apply map-function (ewoc--node-data node) args)
-         (ewoc--refresh-node (ewoc--pretty-printer ewoc) node))
-      (setq node (ewoc--node-next dll node)))))
-
-(defun ewoc-filter (ewoc predicate &rest args)
-  "Remove all elements in EWOC for which PREDICATE returns nil.
-Note that the buffer for EWOC will be current-buffer when PREDICATE 
-is called. PREDICATE must restore the current buffer before it returns
-if it changes it.
-The PREDICATE is called with the element as its first argument. If any
-ARGS are given they will be passed to the PREDICATE."
-  (ewoc--set-buffer-bind-dll-let* ewoc
-      ((node (ewoc--node-nth dll 1))
-       (footer (ewoc--footer ewoc))
-       (next nil))
-    (while (not (eq node footer))
-      (setq next (ewoc--node-next dll node))
-      (unless (apply predicate (ewoc--node-data node) args)
-       (ewoc--delete-node-internal ewoc node))
-      (setq node next))))
-
-(defun ewoc-locate (ewoc &optional pos guess)
-  "Return the node that POS (a buffer position) is within.
-POS may be a marker or an integer.  It defaults to point.
-GUESS should be a node that it is likely that POS is near.
-
-If POS points before the first element, the first node is returned.
-If POS points after the last element, the last node is returned.
-If the EWOC is empty, nil is returned."
-  (unless pos (setq pos (point)))
-  (ewoc--set-buffer-bind-dll-let* ewoc
-      () ;; ((footer (ewoc--footer ewoc)))
-
-    (cond
-     ;; Nothing present?
-     ((eq (ewoc--node-nth dll 1) (ewoc--node-nth dll -1))
-      nil)
-
-     ;; Before second elem?
-     ((< pos (ewoc--node-start-marker (ewoc--node-nth dll 2)))
-      (ewoc--node-nth dll 1))
-
-     ;; After one-before-last elem?
-     ((>= pos (ewoc--node-start-marker (ewoc--node-nth dll -2)))
-      (ewoc--node-nth dll -2))
-
-     ;; We now know that pos is within a elem.
-     (t
-      ;; Make an educated guess about which of the three known
-      ;; node'es (the first, the last, or GUESS) is nearest.
-      (let* ((best-guess (ewoc--node-nth dll 1))
-            (distance (abs (- pos (ewoc--node-start-marker best-guess)))))
-       (when guess
-         (let ((d (abs (- pos (ewoc--node-start-marker guess)))))
-           (when (< d distance)
-             (setq distance d)
-             (setq best-guess guess))))
-
-       (let* ((g (ewoc--node-nth dll -1))      ;Check the last elem
-              (d (abs (- pos (ewoc--node-start-marker g)))))
-         (when (< d distance)
-           (setq distance d)
-           (setq best-guess g)))
-
-       (when (ewoc--last-node ewoc) ;Check "previous".
-         (let* ((g (ewoc--last-node ewoc))
-                (d (abs (- pos (ewoc--node-start-marker g)))))
-           (when (< d distance)
-             (setq distance d)
-             (setq best-guess g))))
-
-       ;; best-guess is now a "best guess".
-       ;; Find the correct node. First determine in which direction
-       ;; it lies, and then move in that direction until it is found.
-    
-       (cond
-        ;; Is pos after the guess?
-        ((>= pos
-             (ewoc--node-start-marker best-guess))
-         ;; Loop until we are exactly one node too far down...
-         (while (>= pos (ewoc--node-start-marker best-guess))
-           (setq best-guess (ewoc--node-next dll best-guess)))
-         ;; ...and return the previous node.
-         (ewoc--node-prev dll best-guess))
-
-        ;; Pos is before best-guess
-        (t
-         (while (< pos (ewoc--node-start-marker best-guess))
-           (setq best-guess (ewoc--node-prev dll best-guess)))
-         best-guess)))))))
-
-(defun ewoc-invalidate (ewoc &rest nodes)
-  "Refresh some elements.
-The pretty-printer that for EWOC will be called for all NODES."
-  (ewoc--set-buffer-bind-dll ewoc
-    (dolist (node nodes)
-      (ewoc--refresh-node (ewoc--pretty-printer ewoc) node))))
-
-(defun ewoc-goto-prev (ewoc arg)
-  "Move point to the ARGth previous element.
-Don't move if we are at the first element, or if EWOC is empty.
-Returns the node we moved to."
-  (ewoc--set-buffer-bind-dll-let* ewoc
-      ((node (ewoc-locate ewoc (point))))
-    (when node
-      ;; If we were past the last element, first jump to it.
-      (when (>= (point) (ewoc--node-start-marker (ewoc--node-right node)))
-       (setq arg (1- arg)))
-      (while (and node (> arg 0))
-       (setq arg (1- arg))
-       (setq node (ewoc--node-prev dll node)))
-      ;; Never step above the first element.
-      (unless (ewoc--filter-hf-nodes ewoc node)
-       (setq node (ewoc--node-nth dll 1)))
-      (ewoc-goto-node ewoc node))))
-
-(defun ewoc-goto-next (ewoc arg)
-  "Move point to the ARGth next element.
-Returns the node (or nil if we just passed the last node)."
-  (ewoc--set-buffer-bind-dll-let* ewoc
-      ((node (ewoc-locate ewoc (point))))
-    (while (and node (> arg 0))
-      (setq arg (1- arg))
-      (setq node (ewoc--node-next dll node)))
-    ;; Never step below the first element.
-    ;; (unless (ewoc--filter-hf-nodes ewoc node)
-    ;;   (setq node (ewoc--node-nth dll -2)))
-    (ewoc-goto-node ewoc node)))
-
-(defun ewoc-goto-node (ewoc node)
-  "Move point to NODE."
-  (ewoc--set-buffer-bind-dll ewoc
-    (goto-char (ewoc--node-start-marker node))
-    (if goal-column (move-to-column goal-column))
-    (setf (ewoc--last-node ewoc) node)))
-
-(defun ewoc-refresh (ewoc)
-  "Refresh all data in EWOC.
-The pretty-printer that was specified when the EWOC was created
-will be called for all elements in EWOC.
-Note that `ewoc-invalidate' is more efficient if only a small
-number of elements needs to be refreshed."
-  (ewoc--set-buffer-bind-dll-let* ewoc
-      ((footer (ewoc--footer ewoc)))
-    (let ((inhibit-read-only t))
-      (delete-region (ewoc--node-start-marker (ewoc--node-nth dll 1))
-                    (ewoc--node-start-marker footer))
-      (goto-char (ewoc--node-start-marker footer))
-      (let ((node (ewoc--node-nth dll 1)))
-       (while (not (eq node footer))
-         (set-marker (ewoc--node-start-marker node) (point))
-         (funcall (ewoc--pretty-printer ewoc)
-                  (ewoc--node-data node))
-         (insert "\n")
-         (setq node (ewoc--node-next dll node)))))
-    (set-marker (ewoc--node-start-marker footer) (point))))
-
-(defun ewoc-collect (ewoc predicate &rest args)
-  "Select elements from EWOC using PREDICATE.
-Return a list of all selected data elements.
-PREDICATE is a function that takes a data element as its first argument.
-The elements on the returned list will appear in the same order as in
-the buffer.  You should not rely on in which order PREDICATE is
-called.
-Note that the buffer the EWOC is displayed in is current-buffer
-when PREDICATE is called.  If PREDICATE must restore current-buffer if
-it changes it.
-If more than two arguments are given the
-remaining arguments will be passed to PREDICATE."
-  (ewoc--set-buffer-bind-dll-let* ewoc
-      ((header (ewoc--header ewoc))
-       (node (ewoc--node-nth dll -2))
-       result)
-    (while (not (eq node header))
-      (if (apply predicate (ewoc--node-data node) args)
-         (push (ewoc--node-data node) result))
-      (setq node (ewoc--node-prev dll node)))
-    (nreverse result)))
-
-(defun ewoc-buffer (ewoc)
-  "Return the buffer that is associated with EWOC.
-Returns nil if the buffer has been deleted."
-  (let ((buf (ewoc--buffer ewoc)))
-    (when (buffer-name buf) buf)))
-
-(defun ewoc-get-hf (ewoc)
-  "Return a cons cell containing the (HEADER . FOOTER) of EWOC."
-  (cons (ewoc--node-data (ewoc--header ewoc))
-       (ewoc--node-data (ewoc--footer ewoc))))
-
-(defun ewoc-set-hf (ewoc header footer)
-  "Set the HEADER and FOOTER of EWOC."
-  (setf (ewoc--node-data (ewoc--header ewoc)) header)
-  (setf (ewoc--node-data (ewoc--footer ewoc)) footer)
-  (ewoc--refresh-node (lambda (x) (insert header)) (ewoc--header ewoc))
-  (ewoc--refresh-node (lambda (x) (insert footer)) (ewoc--footer ewoc)))
-
-\f
-(provide 'ewoc)
-
-;;; Local Variables:
-;;; eval: (put 'ewoc--set-buffer-bind-dll 'lisp-indent-hook 1)
-;;; eval: (put 'ewoc--set-buffer-bind-dll-let* 'lisp-indent-hook 2)
-;;; End:
-
-;;; ewoc.el ends here
diff --git a/xemacs-packages/xetla/package-info.in b/xemacs-packages/xetla/package-info.in
deleted file mode 100644 (file)
index b2f0395..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-(xetla
-  (standards-version 1.1
-   version VERSION
-   author-version AUTHOR_VERSION
-   date DATE
-   build-date BUILD_DATE
-   maintainer MAINTAINER
-   distribution xemacs
-   priority low
-   category CATEGORY
-   dump nil
-   description "(S)XEmacs Frontend to GNU/arch (tla)."
-   filename FILENAME
-   md5sum MD5SUM
-   size SIZE
-   provides (ewoc xetla-browse xetla-core
-             xetla-defs xetla-tips xetla-version xetla)
-   requires (REQUIRES)
-   type regular
-))
diff --git a/xemacs-packages/xetla/xetla-browse.el b/xemacs-packages/xetla/xetla-browse.el
deleted file mode 100644 (file)
index d85976b..0000000
+++ /dev/null
@@ -1,1430 +0,0 @@
-;;; xetla-browse.el --- Arch archives/library browser
-
-;; Copyright (C) 2004 by Stefan Reichoer (GPL)
-;; Copyright (C) 2004 Steve Youngs (BSD)
-
-;; Author:        Steve Youngs <steve@eicq.org>
-;; Maintainer:    Steve Youngs <steve@eicq.org>
-;; Created:       2004-11-25
-;; Keywords:      archive arch tla
-
-;; Based on xtla-browse.el by: Masatake YAMATO <jet@gyve.org>
-
-;; This file is part of XEtla.
-
-;; Redistribution and use in source and binary forms, with or without
-;; modification, are permitted provided that the following conditions
-;; are met:
-;;
-;; 1. Redistributions of source code must retain the above copyright
-;;    notice, this list of conditions and the following disclaimer.
-;;
-;; 2. Redistributions in binary form must reproduce the above copyright
-;;    notice, this list of conditions and the following disclaimer in the
-;;    documentation and/or other materials provided with the distribution.
-;;
-;; 3. Neither the name of the author nor the names of any contributors
-;;    may be used to endorse or promote products derived from this
-;;    software without specific prior written permission.
-;;
-;; THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR
-;; IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-;; WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-;; DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
-;; FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-;; CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-;; SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
-;; BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-;; WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
-;; OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
-;; IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-;;; Commentary:
-;;
-;; Contributions from:
-;;    Stefan Reichoer, <stefan@xsteve.at>
-;;    Matthieu Moy <Matthieu.Moy@imag.fr>
-;;    Masatake YAMATO <jet@gyve.org>
-;;    Milan Zamazal <pdm@zamazal.org>
-;;    Martin Pool <mbp@sourcefrog.net>
-;;    Robert Widhopf-Fenk <hack@robf.de>
-;;    Mark Triggs <mst@dishevelled.net>
-
-;; 1. Load xetla-browse.el
-;; 2. M-x xetla-browse RET
-
-;;; TODO:
-;; - Generic refresh
-;;
-
-;;; History:
-;;
-
-;;; Code:
-(eval-when-compile
-  (require 'cl)
-  (autoload 'easy-mmode-define-keymap "easy-mmode")
-  (autoload 'ad-add-advice "advice"))
-
-(require 'jde-tree-widget)
-(require 'xetla)
-
-(defvar xetla-browse-buffer-name "*xetla-browse*")
-(defvar xetla-browse-buffer-type 'browse)
-(xetla-add-buffer-type xetla-browse-buffer-type
-                        xetla-browse-buffer-name)
-
-;; --------------------------------------
-;; Open node tracking
-;; --------------------------------------
-(defvar xetla-browse-open-list '()
-  "List holding the name of open nodes.")
-
-(defun xetla-browse-open-list-member (archive
-                                     &optional category branch version)
-  "Return a node, ARCHIVE/CATEGORY-BRANCH-VERSION is opend or not.
-CATEGORY, BRANCH, VERSION are optional."
-  (let ((name (list archive category branch version nil)))
-    (member name xetla-browse-open-list)))
-
-(defun xetla-browse-open-list-add (archive
-                                  &optional category branch version)
-  "Add a node specified by the arguments to 'xetla-browse-open-list'.
-ARCHIVE/CATEGORY-BRANCH-VERSION,  ARCHIVE/CATEGORY-BRANCH,
-ARCHIVE/CATEGORY, ARCHIVE are added.  CATEGORY, BRANCH, VERSION
-are optional."
-  (xetla-browse-open-list-add-internal (list archive category branch version nil))
-  (xetla-browse-open-list-add-internal (list archive category branch nil nil))
-  (xetla-browse-open-list-add-internal (list archive category nil nil nil))
-  (xetla-browse-open-list-add-internal (list archive nil nil nil nil))
-  (xetla-browse-open-list-add-internal (list nil nil nil nil nil)))
-
-(defun xetla-browse-open-list-add-internal (name)
-  "Add NAME to `xetla-browse-open-list'."
-  (unless (xetla-browse-open-list-member (xetla-name-archive name)
-                                        (xetla-name-category name)
-                                        (xetla-name-branch name)
-                                        (xetla-name-version name))
-    (push name xetla-browse-open-list)))
-
-(defun xetla-browse-open-list-remove (archive
-                                     &optional category branch version)
-  "Remove ARCHIVE/CATEGORY-BRANCH-VERSION from `xetla-browse-open-list'.
-CATEGORY, BRANCH and VERSION are optional."
-  (let ((name (list archive category branch version nil)))
-    (setq xetla-browse-open-list (delete name xetla-browse-open-list))))
-
-(defun xetla-browse-open-tracker (tree)
-  "Add or remove a node represented by TREE to/from `xetla-browse-open-list'.
-If TREE is opened, it is added.  Else it is removed."
-  (let* ((node (widget-get tree :node))
-         (a (widget-get node :archive))
-         (c (widget-get node :category))
-         (b (widget-get node :branch))
-         (v (widget-get node :version)))
-  (if (widget-get tree :open)
-      (xetla-browse-open-list-add a c b v)
-    (xetla-browse-open-list-remove a c b v))))
-
-(defun xetla-browse-find-archives-root-widget ()
-  "Return the root widget of archives tree."
-  (save-excursion
-    (goto-char (point-min))
-    (re-search-forward " Archives$")
-    (backward-char 1)
-    (xetla-widget-node-get-at)))
-
-(defun xetla-browse-find-named-widget (parent name type)
-  "Find a widget specified with arguments.
-PARENT specifies the parent widget.
-NAME is the name of the widget.
-TYPE is the type of widget.  You can specify :archive, :category,
-:branch, or :version."
-  (let* ((args (widget-get parent :args))
-         (index (position name args :test (lambda (e w)
-                                               (let ((node (widget-get w :node)))
-                                                 ;; Next line is hack for version node.
-                                                 (unless node (setq node w))
-                                                 (string= e (widget-get node type))))))
-         (tree (when index (nth index (widget-get parent :children))))
-         (node (when tree (save-excursion (goto-char (widget-get tree :from))
-                                          (goto-char (next-single-property-change (point) 'widget))
-                                          (xetla-widget-node-get-at)))))
-    node))
-
-
-(defun xetla-browse-find-widget (archive
-                                &optional category branch version)
-  "Return a list of widgets: (root archive category branch version)
-root is always the root of the tree, of type `xetla-widget-root-node'.
-archive is the widget representing ARCHIVE, of type
-`xetla-widget-archive-node'.  The last items are potentially nil if
-CATEGORY, BRANCH or VERSION is nil.  Otherwise, they are respectively
-of type `xetla-widget-category-node', `xetla-widget-revision-node' and
-`xetla-widget-version-node'."
-  (let* ((root (xetla-browse-find-archives-root-widget))
-         (a    (xetla-browse-find-named-widget
-                (widget-get root :parent) archive :archive))
-         (c    (and a category
-                    (xetla-browse-find-named-widget
-                     (widget-get a :parent) category :category)))
-         (b    (and c branch
-                    (xetla-browse-find-named-widget
-                     (widget-get c :parent) branch :branch)))
-         (v    (and b version
-                    (xetla-browse-find-named-widget
-                     (widget-get b :parent) version :version))))
-    (list root a c b v)))
-
-(defun xetla-browse-find-single-widget (archive
-                                       &optional category branch
-                                       version)
-  "Similar to `xetla-browse-find-widget'.
-Difference is it returns only the widget representing the last non-nil
-widget of the list.  The means of ARCHIVE, CATEGORY, BRANCH and VERSION
-are the same as that of `xetla-browse-find-widget'."
-  (let ((widgets (xetla-browse-find-widget archive category branch
-                                          version)))
-    (or (nth 4 widgets)
-        (nth 3 widgets)
-        (nth 2 widgets)
-        (nth 1 widgets)
-        (error "Widget not found.  Please fill-in a bug report"))))
-
-(defun xetla-browse-find-real-widget (widget)
-  "Find real(complete) widget from incomplete WIDGET.
-When trying to find widgets using (widget-get ... :args), we
-sometimes find an incomplete widget, having no :from or :to
-information for example.  This function takes as an argument an
-incomplete widget, and finds the corresponding full widget.
-
-WIDGET must be of type xetla-widget-*-node."
-  (case (widget-type widget)
-    (xetla-widget-archive-node
-     (xetla-browse-find-single-widget
-      (widget-get widget :archive)))
-    (xetla-widget-category-node
-     (xetla-browse-find-single-widget
-      (widget-get widget :archive)
-      (widget-get widget :category)))
-    (xetla-widget-branch-node
-     (xetla-browse-find-single-widget
-      (widget-get widget :archive)
-      (widget-get widget :category)
-      (widget-get widget :branch)))
-    (xetla-widget-version-node
-     (xetla-browse-find-single-widget
-      (widget-get widget :archive)
-      (widget-get widget :category)
-      (widget-get widget :version)))))
-
-(defun* xetla-browse-open (flash archive
-                                &optional category branch version)
-  (let (widgets root a c b v)
-
-    (unless archive
-      (return-from xetla-browse-open nil))
-    (setq widgets (xetla-browse-find-widget archive category branch nil))
-    (setq root (nth 0 widgets))
-    (unless root
-      (error "Cannot find root archives node"))
-    (xetla-widget-node-toggle-subtree-internal root 'open)
-
-    (setq widgets (xetla-browse-find-widget archive category branch nil))
-    (setq a (nth 1 widgets))
-    (unless category
-      (if a
-          (progn (when flash
-                   (goto-char (widget-get a :from))
-                   (xetla-flash-line))
-            (return-from xetla-browse-open nil))
-        (error "Cannot find archive node for: %s" archive)))
-    (xetla-widget-node-toggle-subtree-internal a 'open)
-
-    (setq widgets (xetla-browse-find-widget archive category branch nil))
-    (setq c (nth 2 widgets))
-    (unless branch
-      (if c
-          (progn (when flash
-                   (goto-char (widget-get c :from))
-                   (xetla-flash-line))
-            (return-from xetla-browse-open nil))
-        (error "Cannot find category node for: %s/%s" archive category)))
-    (xetla-widget-node-toggle-subtree-internal c 'open)
-
-    (setq widgets (xetla-browse-find-widget archive category branch nil))
-    (setq b (nth 3 widgets))
-    (unless version
-      (if b
-          (progn (when flash
-                   (goto-char (widget-get b :from))
-                   (xetla-flash-line))
-            (return-from xetla-browse-open nil))
-        (error "Cannot find branch node for: %s/%s-%s" archive category branch)))
-    (xetla-widget-node-toggle-subtree-internal b 'open)
-
-    (setq widgets (xetla-browse-find-widget archive category branch version))
-    (setq v (nth 4 widgets))
-    (if v
-        (progn (when flash
-                 (goto-char (widget-get v :from))
-                 (xetla-flash-line))
-          (return-from xetla-browse-open nil))
-      (error "Cannot find branch node for: %s/%s-%s-%s" archive category branch version)))
-  )
-
-;; --------------------------------------
-;; Abstract Super Widget
-;; --------------------------------------
-(define-widget 'xetla-widget-node 'item
-  "Abstract super widget for xetla-widget-*-node."
-  :xetla-type nil
-  :format "%[ %t%]%{%v%}\n"
-  :face nil
-  :keymap nil
-  :menu nil
-  :marks " "
-  :keep '(:marks :open)
-  :open-subtree (if (fboundp 'tree-widget-open-node)
-                   'tree-widget-open-node
-                 'xetla-tree-widget-node-toggle-subtree-for-tree-widget-v1)
-  :close-subtree (if (fboundp 'tree-widget-open-node)
-                    'tree-widget-close-node
-                  'xetla-tree-widget-node-toggle-subtree-for-tree-widget-v1))
-
-(defvar xetla-widget-node-map
-  (let ((map (copy-keymap xetla-context-map-template)))
-    (define-key map [return]
-      'xetla-widget-node-toggle-subtree)
-    (define-key map [button2]
-      'xetla-widget-node-toggle-subtree-by-mouse)
-    (define-key map "\C-m"
-      'xetla-widget-node-toggle-subtree)
-    (define-key map (xetla-prefix-buffer ?p)
-      'xetla-show-process-buffer)
-    (define-key map (xetla-prefix-buffer ?L)
-      'xetla-open-internal-log-buffer)
-    (define-key map (xetla-prefix-buffer xetla-key-show-bookmark)
-      'xetla-bookmarks)
-    (define-key map xetla-keyvec-kill-ring
-      'xetla-widget-node-save-name-to-kill-ring)
-    (define-key map xetla-keyvec-add-bookmark
-      'xetla-widget-node-add-bookmark)
-    map)
-  "Keymap commonly used in xetla-widget-*-node.")
-
-(defun xetla-widget-node-value-create (widget keyword)
-  "Create value for WIDGET.
-KEYWORD is used to get the base string to create the value."
-  (insert (let* ((marks (widget-get widget :marks))
-                 (string (widget-get widget keyword))
-                 (value (xetla-widget-node-install-ui-element
-                         widget (if (string= string "") "<empty>"
-                                  string))))
-            (concat marks value))))
-
-(defun xetla-widget-node-install-ui-element (widget value &optional face)
-  "Create a string with keymap, menu and face properties.
-The keymap and menu are retrieved from WIDGET.
-The string is copied from VALUE.
-FACE is useds as the face."
-  (let ((prop-value (xetla-face-add value
-                                   (if face face (widget-get widget :face))
-                                   (widget-get widget :keymap)
-                                   (widget-get widget :menu))))
-    (put-text-property 0 (length value)
-                       'widget widget
-                       prop-value)
-    prop-value))
-
-(defun xetla-widget-node-get-at (&optional point)
-  "Get widget at POINT."
-  (get-text-property (if point point (point)) 'widget))
-
-(defun xetla-widget-node-get-name (&optional point)
-  "Get name list associated widget under the POINT."
-  (let ((widget (xetla-widget-node-get-at point)))
-    (list (widget-get widget :archive)
-          (widget-get widget :category)
-          (widget-get widget :branch)
-          (widget-get widget :version)
-          nil)))
-
-(defun xetla-widget-node-get-type (&optional point)
-  "Get type of widget under the POINT.
-
-Can be either 'archive, 'category, 'branch, 'version or nil for the
-root of the tree."
-  (let ((widget (xetla-widget-node-get-at point)))
-    (widget-get widget :xetla-type)))
-
-(defun xetla-widget-get-ancestor (widget level)
-  "Get the ancestor widget of WIDGET.
-\"ancestor\" widget stands for the LEVEL upper widget
-in the archives tree."
-  (let ((i 0)
-        (parent widget))
-    (while (< i level)
-      (setq parent (widget-get parent :parent)
-            i (1+ i)))
-    parent))
-
-(defun xetla-widget-node-refresh (&optional level point
-                                           archive
-                                           category
-                                           branch)
-  "Refresh node and LEVEL subnode at the POINT.
-Before refreshing node, names cache are also refreshed if
-ARCHIVE, CATEGORY, and/or BRANCH are specified."
-  (interactive)
-  (unless level (setq level 1))
-  (unless point (setq point (point)))
-  (if branch
-      (xetla-archive-tree-build-versions archive
-                                        category
-                                        branch
-                                        nil t)
-    (if category
-        (xetla-archive-tree-build-branches archive
-                                          category
-                                          nil t)
-      (if archive
-          (xetla-archive-tree-build-categories archive
-                                              nil
-                                              t)
-        (xetla-archive-tree-build-archives nil t))))
-  (let* ((widget (xetla-widget-node-get-at point))
-         (tree (xetla-widget-get-ancestor widget level)))
-    (widget-put tree :args nil)
-    (widget-value-set tree (widget-value tree))
-    (widget-setup)))
-
-(defun xetla-widget-node-synchronize-mirror-to-remote ()
-  "Synchronizes the mirror for the archive at point to remote from local."
-  (interactive)
-  (let* ((name (xetla-widget-node-get-name))
-         (archive (xetla-name-archive name))
-         (type (xetla-archive-type archive))
-         mirror source)
-    (cond
-     ((eq type 'normal)
-      (setq mirror (xetla-archive-name-mirror archive t))
-      (unless mirror
-        (error "No mirror archive for `%s'" archive)))
-     ((eq type 'mirror)
-      (setq source (xetla-archive-name-source archive t))
-      (if source
-          (setq archive source)
-        (error "No source archive for `%s'" archive)))
-     (t (error "Cannot mirror to a source archive: `%s'" archive)))
-    (xetla-archive-mirror archive
-                        (xetla-name-category name)
-                          (xetla-name-branch name)
-                          (xetla-name-version name)
-                          nil)))
-
-(defun xetla-widget-node-synchronize-mirror-to-local ()
-  "Synchronizes the mirror for the archive at point to local from remote."
-  (interactive)
-  ;; TODO
-  )
-
-(defun xetla-widget-node-save-name-to-kill-ring ()
-  "Save the name under point to `kill-ring'."
-  (interactive)
-  (let ((name (xetla-name-construct (xetla-widget-node-get-name))))
-    (when (equal "" name)
-      (error "No widget under the point"))
-    (kill-new name)
-    (message "Name: %s" name)))
-
-(defun xetla-widget-node-add-bookmark ()
-  "Add a name associated with a widget at point to xetla's bookmarks."
-  (interactive)
-  (let* ((target (xetla-widget-node-get-name))
-         (target-fq (xetla-name-construct target))
-         (bookmark (read-from-minibuffer (format "Name of Bookmark for `%s': "
-                                                 target-fq))))
-    (xetla-bookmarks-add bookmark target)
-    (when (y-or-n-p "View bookmarks? ")
-      (xetla-bookmarks))
-    (message "bookmark %s(=> %s) added." bookmark target-fq)))
-
-(defun xetla-widget-node-toggle-subtree (&optional point force)
-  "Toggle between closing and opening the node at POINT.
-You can specify a symbol, `open' or `close' to FORCE to force
-the node to open or to close."
-  (interactive)
-  (xetla-widget-node-toggle-subtree-internal
-   (xetla-widget-node-get-at point) force))
-
-(defun xetla-widget-node-toggle-subtree-recursive (&optional point
-                                                            force)
-  "Same as `xetla-widget-node-toggle-subtree'.
-The difference is that when the node is expanded, expands it
-recursively, which means all the children will also be expanded.  (this
-may take looong).
-Meaning of POINT and FORCE are the same as that of
-`xetla-widget-node-toggle-subtree'."
-  (interactive)
-  (xetla-widget-node-toggle-subtree-internal
-   (xetla-widget-node-get-at point) force t))
-
-(defun xetla-widget-node-toggle-subtree-internal (widget force
-                                                        &optional
-                                                        recursive)
-  "Toggle between closing and opening the WIDGET.
-You can specify a symbol, `open' or `close' to FORCE to force
-the node to open or to close.  If RECURSIVE is non-nil, the opening
-or closing are applied recursively."
-  (let* ((open-subtree (widget-get widget :open-subtree))
-         (close-subtree (widget-get widget :close-subtree)))
-    (cond
-     ((or (eq force 'open)
-          (and (not force)
-               (not (widget-get (widget-get widget :parent) :open))))
-      (when open-subtree (funcall open-subtree widget))
-      (when recursive
-        (xetla-widget-node-toggle-subtree-recursion widget 'open)))
-     ((or (eq force 'close)
-         (and (not force)
-               (widget-get (widget-get widget :parent) :open)))
-      (when (and recursive
-                 (widget-get (widget-get widget :parent) :open))
-        (when open-subtree (funcall open-subtree widget))
-        (xetla-widget-node-toggle-subtree-recursion widget 'close))
-      (when close-subtree (funcall close-subtree widget))))))
-
-(defun xetla-widget-node-toggle-subtree-recursion (widget force)
-  "A helper function for 'xetla-widget-node-toggle-subtree-internal'.
-Apply all sub node of WIDGET opening or closing which is specified
-by FORCE."
-  (let ((args (widget-get (widget-get widget :parent) :args)))
-    (dolist (arg args)
-      (let* ((t-widget (widget-get arg :node))
-             ;; surprisingly, t-widget doesn't have all the
-             ;; necessary fields. Look for the _real_ widget.
-             (full-widget
-              (xetla-browse-find-real-widget t-widget)))
-        (unless (eq (widget-type t-widget)
-                    (widget-type full-widget))
-          (error "Incorrect widget.  Please contact the developers"))
-        (when full-widget
-          (xetla-widget-node-toggle-subtree-internal
-           full-widget force t))))))
-
-(defun xetla-tree-widget-node-toggle-subtree-for-tree-widget-v1 (widget)
-  "Toggle tree node function used in `xetla-browse' with tree-widget ver.1.0.5.
-The code is the almost same as in tree-widget-toggle-folding tree-widget version
-1.0.5.
-
-Original documents say:
-  \"Toggle a `tree-widget' folding.
-WIDGET is a `tree-widget-node-handle-widget' and its parent the
-`tree-widget' itself.  IGNORE other arguments.\""
-  (let* ((parent (widget-get widget :parent))
-        ;; Original code
-        ; (open   (widget-value widget))
-        ;; Here `parent' is used instead of `widget'.
-        (open   (widget-value parent)))
-    (if open
-       (tree-widget-children-value-save parent))
-    (widget-put parent :open (not open))
-    (widget-value-set parent (not open))
-    (run-hook-with-args 'tree-widget-after-toggle-functions parent)))
-
-(xetla-make-bymouse-function xetla-widget-node-toggle-subtree)
-
-;; --------------------------------------
-;; My-id
-;; --------------------------------------
-(define-widget 'xetla-widget-my-id 'push-button
-  "Widget to control xetla's my-id."
-  :format "%{My-id:%} %[%t%]"
-  :sample-face 'bold
-  :button-face 'widget-field-face
-  :notify 'xetla-widget-my-id-set
-  :help-echo "Click here to change my-id")
-
-(defun xetla-widget-my-id-set (self changed event)
-  "Set my-id to my-id-widget.
-SELF is not used.  CHANGED is just passed to `widget-value-set'.
-EVENT is also not used."
-  (let ((new-id (xetla-my-id t)))
-    (widget-value-set changed new-id)
-    (widget-setup)))
-
-;; --------------------------------------
-;; Root node
-;; --------------------------------------
-(define-widget 'xetla-widget-root-node 'xetla-widget-node
-  "Root node widget for trees in xetla-browse buffer."
-  :value-create 'xetla-widget-root-node-value-create
-  :format " %v\n"
-  :face 'bold)
-
-(defun xetla-widget-root-node-value-create (widget)
-  "Create a value for root node represented by WIDGET."
-  (insert (xetla-widget-node-install-ui-element
-           widget
-           (widget-get widget :tag))))
-
-(defvar xetla-widget-archives-root-node-map
-  (let ((map (copy-keymap xetla-widget-node-map)))
-    (define-key map xetla-keyvec-refresh
-      'xetla-widget-node-refresh)
-    (define-key map (xetla-prefix-add ?a)
-      'xetla-widget-archives-root-node-make-archive)
-    (define-key map (xetla-prefix-add ?r)
-      'xetla-widget-archives-root-node-register-archive)
-    map)
-  "Keymap used on the archives root node.")
-
-(easy-menu-define xetla-widget-archives-root-node-menu nil
-  "Menu used on the root archives item in `xetla-browse-mode' buffer."
-  '("Archives Root"
-    ["Update Archives List"
-     xetla-widget-node-refresh t]
-    ["Make New Archive..."
-     xetla-widget-archives-root-node-make-archive t]
-    ["Register Archive"
-     xetla-widget-archives-root-node-register-archive t]))
-
-(defun xetla-widget-archives-root-node-make-archive ()
-  "Call `xetla-make-archive-internal' interactively  then update the tree of `xetla-browse'."
-  (interactive)
-  (call-interactively 'xetla-make-archive-internal)
-  (xetla-widget-node-refresh 1))
-
-(defun xetla-widget-archives-root-node-goto (name)
-  "Move the point to beginning of line in where the NAME is.
-This may be useful to search an archive named NAME."
-  (goto-char (point-min))
-  (search-forward name)
-  (beginning-of-line))
-
-(defun xetla-widget-archives-root-node-register-archive ()
-  "Call `xetla-register-archive-internal' interactively ; then update the tree of `xetla-browse'."
-  (interactive)
-  (let* ((result (call-interactively 'xetla-register-archive-internal))
-         (archive-registered (nth 0 result))
-         (archive (nth 1 result))
-         (xetla-response (nth 3 result)))
-    (when archive-registered
-      (xetla-widget-node-refresh 1)
-      (message xetla-response)
-      (xetla-widget-archives-root-node-goto
-       (if (string-match ".+: \\(.+\\)" xetla-response)
-           (match-string 1 xetla-response)
-         archive))
-      (xetla-flash-line))))
-
-
-;; --------------------------------------
-;; Archive
-;; --------------------------------------
-(defface xetla-location
-  '((((class color) (background dark)) (:foreground "gray"))
-    (((class color) (background light)) (:foreground "gray"))
-    (t (:bold t)))
-  "Face to highlight xetla's archive location."
-  :group 'xetla-faces)
-
-(make-face 'xetla-location-ftp
-          "Face to highlight xetla's archive ftp location.")
-(set-face-parent 'xetla-location-ftp 'xetla-location)
-
-(make-face 'xetla-location-sftp
-          "Face to highlight xetla's archive sftp location.")
-(set-face-parent 'xetla-location-sftp 'xetla-location)
-(set-face-foreground 'xetla-location-sftp "gray50")
-
-(make-face 'xetla-location-http
-                 "Face to highlight xetla's archive sftp location.")
-(set-face-parent 'xetla-location-http 'xetla-location)
-(set-face-foreground 'xetla-location-http "gray60")
-
-(make-face 'xetla-location-local
-          "Face to highlight xetla's local archive.")
-(set-face-parent 'xetla-location-local 'xetla-location)
-(set-face-foreground 'xetla-location-local "gray30")
-
-(defvar xetla-widget-archive-node-map
-  (let ((map (copy-keymap xetla-widget-node-map)))
-    (define-key map xetla-keyvec-refresh
-      'xetla-widget-archive-node-refresh)
-    (define-key map "*" 'xetla-widget-archive-node-select-default)
-    (define-key map xetla-keyvec-remove
-      'xetla-widget-archive-node-unregister-archive)
-    (define-key map (xetla-prefix-add ?c)
-      'xetla-widget-archive-node-make-category)
-    (define-key map (xetla-prefix-apply-from-here xetla-key-reflect)
-      'xetla-widget-archive-node-start-project)
-    (define-key map xetla-keyvec-reflect
-      'xetla-widget-node-synchronize-mirror-to-remote)
-    (define-key map xetla-keyvec-get
-      'xetla-widget-node-synchronize-mirror-to-local)
-    (define-key map (xetla-prefix-add xetla-key-reflect)
-      'xetla-widget-archive-node-make-mirror-at-remote)
-    (define-key map (xetla-prefix-add xetla-key-get)
-      'xetla-widget-archive-node-make-mirror-at-local)
-    map)
-  "Keymap used on xetla-widget-archive-node.")
-
-(easy-menu-define xetla-widget-archive-node-menu nil
-  "Menu used on a archive item in `xetla-browse-mode' buffer."
-  '("Archive"
-    ["Update Categories List"      xetla-widget-archive-node-refresh t]
-    ["Set Default Archive"         xetla-widget-archive-node-select-default t]
-    ["Remove Archive Registration" xetla-widget-archive-node-unregister-archive t]
-    ["Make New Category..."        xetla-widget-archive-node-make-category t]
-    ["Start Project from Here"     xetla-widget-archive-node-start-project t]
-    ["Add a Bookmark"              xetla-widget-node-add-bookmark t]
-    ("Remote Mirror"
-     ["Synchronize Mirror to Remote From Local"
-      xetla-widget-node-synchronize-mirror-to-remote
-      (let* ((archive (xetla-name-archive (xetla-widget-node-get-name)))
-             (type (xetla-archive-type archive)))
-        (or (and (eq type 'normal)
-                 (xetla-archive-name-mirror archive t))
-            (and (eq type 'mirror)
-                 (xetla-archive-name-source archive t))))]
-     ["Create a Mirror at Remote"
-      xetla-widget-archive-node-make-mirror-at-remote
-      (eq (xetla-archive-type (xetla-name-archive (xetla-widget-node-get-name)))
-          'normal)])
-    ("Local Mirror"
-     ["Synchronize Mirror to Local[TODO]"
-      ;; TODO
-      xetla-widget-node-synchronize-mirror-to-local nil]
-     ["Create a Mirror at Local" xetla-widget-archive-node-make-mirror-at-local
-      (eq (xetla-archive-type (xetla-name-archive (xetla-widget-node-get-name)))
-          'source)]
-     "-"
-     ["Convert to SOURCE archive" xetla-widget-archive-node-convert-to-source
-      (eq (xetla-archive-type (xetla-name-archive (xetla-widget-node-get-name)))
-          'normal)])
-    ["Save Name to Kill Ring" xetla-widget-node-save-name-to-kill-ring t]))
-
-(defconst xetla-widget-archive-node-tag "a")
-(defconst xetla-widget-archive-node-default-tag "A")
-
-(define-widget 'xetla-widget-archive-node 'xetla-widget-node
-  "Archive node in xetla-browse."
-  :tag xetla-widget-archive-node-tag
-  :value-create 'xetla-widget-archive-node-value-create
-  :xetla-type 'archive
-  :face 'xetla-archive-name
-  :keymap 'xetla-widget-archive-node-map
-  :menu xetla-widget-archive-node-menu
-  :archive nil
-  :archive-location nil
-  :archive-defaultp nil)
-
-(defvar xetla-widget-archive-node-list nil)
-(defun xetla-browse-expand-archives (root)
-  "Expand ROOT widget."
-  (or (and (not current-prefix-arg) (widget-get root :args))
-      (let ((default-archive (xetla-my-default-archive)))
-        (setq xetla-widget-archive-node-list nil)
-        (mapcar
-         (lambda (archive)
-           (let ((res
-                  `(tree-widget
-                    :open ,(xetla-browse-open-list-member (car archive))
-                    :has-children t
-                    :dynargs xetla-browse-expand-categories
-                    :node (xetla-widget-archive-node
-                           :tag ,(if (equal default-archive (car archive))
-                                     xetla-widget-archive-node-default-tag
-                                   xetla-widget-archive-node-tag)
-                           :archive ,(car archive)
-                           :archive-location ,(cadr archive)
-                           :archive-defaultp ,(equal
-                                               default-archive
-                                               (car
-                                                archive))))))
-             (widget-put (widget-get res :node) :parent res)
-             res))
-         (let* ((l xetla-archive-tree))
-           (when (or (null l) current-prefix-arg)
-             (xetla-archive-tree-build-archives nil t))
-           xetla-archive-tree)))))
-
-(defun xetla-widget-archive-node-value-create (widget)
-  "Create values for WIDGET."
-  (push widget xetla-widget-archive-node-list)
-  (insert (let* ((archive  (widget-get widget :archive))
-                 (location (widget-get widget :archive-location))
-                 (defaultp (widget-get widget :archive-defaultp))
-                 (marks    (widget-get widget :marks))
-                 (value (progn
-                          (case (xetla-archive-type archive)
-                            (mirror (widget-put widget :face 'xetla-mirror-archive-name))
-                            (source (widget-put widget :face 'xetla-source-archive-name)))
-                          ;;
-                          ;; It seems that XEmacs's format hides text properties.
-                          ;;
-                          (concat marks
-                                  (xetla-widget-node-install-ui-element
-                                   widget archive (when defaultp
-                                                    'xetla-marked))
-                                  " => "
-                                  (xetla-widget-archive-put-face-on-location
-                                   location)))))
-            value)))
-
-(defun xetla-widget-archive-put-face-on-location (location)
-  "Set face to LOCATION based on the location type(ftp, sftp, http or local)."
-(let ((face (case (xetla-location-type location)
-                (ftp 'xetla-location-ftp)
-                (sftp 'xetla-location-sftp)
-                (http 'xetla-location-http)
-                (local 'xetla-location-local)))
-        (location (copy-sequence location)))
-    (put-text-property 0 (length location)
-                       'face face location)
-    location))
-
-(defun xetla-widget-archive-node-refresh ()
-  "Refresh an archive node under the point."
-  (interactive)
-  (xetla-widget-node-refresh 1 nil
-                            (xetla-name-archive
-                             (xetla-widget-node-get-name))))
-
-(defun xetla-widget-archive-node-select-default ()
-  "Mark a widget associated with the default archive.
-Unmark widgets not associated with the default archive.
-`:archive-defaultp' keyword is used to mark."
-  (interactive)
-  (mapc
-   (lambda (widget)
-     (when (equal xetla-widget-archive-node-default-tag
-                  (widget-get widget :tag))
-       (widget-put widget :tag xetla-widget-archive-node-tag)
-       (widget-put widget :archive-defaultp nil)
-       (widget-value-set widget (widget-value widget))))
-   xetla-widget-archive-node-list)
-  (let* ((widget (xetla-widget-node-get-at))
-         (archive (xetla-name-archive (xetla-widget-node-get-name) )))
-    (xetla-my-default-archive archive)
-    (widget-put widget :tag xetla-widget-archive-node-default-tag)
-    (widget-put widget :archive-defaultp t)
-    (widget-value-set widget (widget-value widget))))
-
-(defun xetla-widget-archive-node-unregister-archive ()
-  "Delete the registration of the archive under the point."
-  (interactive)
-  (let ((archive (xetla-name-archive (xetla-widget-node-get-name))))
-    (if archive
-        (progn (xetla-unregister-archive archive t)
-               (xetla-widget-node-refresh 2))
-      (error "No archive under the point"))))
-
-(defun xetla-widget-archive-node-make-category ()
-  "Make new category in the archive under the point."
-  (interactive)
-  (let* ((name (xetla-widget-node-get-name))
-         (archive (xetla-name-archive name))
-         (l (xetla-name-read "New Category: "
-                            archive
-                            'prompt)))
-    (xetla-make-category (xetla-name-archive l) (xetla-name-category l))
-    (xetla-widget-node-refresh 1 nil (xetla-name-archive l))
-    (xetla-browse-open t
-                      (xetla-name-archive l)
-                      (xetla-name-category l))
-    ))
-
-(defun xetla-widget-archive-node-convert-to-source ()
-  "Convert the archive under the point to a source archive."
-  (interactive)
-  (let* ((widget (xetla-widget-node-get-at))
-         (archive (widget-get widget :archive))
-         (location (widget-get widget :archive-location))
-         (result (xetla-archive-convert-to-source-archive archive location)))
-    (let ((archive-registered (nth 0 result))
-          (archive (nth 1 result))
-          (xetla-response (nth 3 result)))
-      (when archive-registered
-        (xetla-widget-node-refresh 2)
-        (message xetla-response)
-        (xetla-widget-archives-root-node-goto
-         (if (string-match ".+: \\(.+\\)" xetla-response)
-             (match-string 1 xetla-response)
-           archive))
-        (xetla-flash-line)))))
-
-(defun xetla-widget-archive-node-start-project ()
-  "Start new project in the archive unde the point."
-  (interactive)
-  (let* ((archive (xetla-name-archive (xetla-widget-node-get-name)))
-         (buffer (current-buffer))
-         (p (point))
-         (result (xetla-start-project archive 'synchronously))
-         (category (xetla-name-category (car result)))
-         (branch (xetla-name-branch (car result)))
-         (version (xetla-name-version (car result)))
-         )
-    (with-current-buffer buffer
-      (xetla-widget-node-refresh 1 p archive)
-      (xetla-browse-open t
-                        archive category branch version))))
-
-(defun xetla-widget-archive-node-make-mirror-at-remote ()
-  "Create a mirror for the local archive under the point at somewhere remote."
-  (interactive)
-  (let ((archive (xetla-name-archive (xetla-widget-node-get-name))))
-    (unless archive
-      (error "No archive under the point"))
-    (xetla-mirror-archive archive nil nil nil nil)
-    (xetla-widget-node-refresh 2)
-    (xetla-widget-archives-root-node-goto (format "%s-MIRROR" archive))
-    (xetla-flash-line)))
-
-(defun xetla-widget-archive-node-make-mirror-at-local ()
-  "Create a mirror for the remote archive under the point to local."
-  (interactive)
-  (let ((archive (xetla-name-archive (xetla-widget-node-get-name))))
-    (unless archive
-      (error "No archive under the point"))
-    (xetla-mirror-from-archive archive nil)
-    (xetla-widget-node-refresh 2)
-    (string-match "\\(.*\\)-SOURCE$" archive)
-    (xetla-widget-archives-root-node-goto
-     ;; Adding a space not to match SOURCE archive.
-     (concat (match-string 1 archive) " "))
-    (xetla-flash-line)))
-
-;; --------------------------------------
-;; Categories
-;; --------------------------------------
-(defvar xetla-widget-category-node-map
-  (let ((map (copy-keymap xetla-widget-node-map)))
-    (define-key map xetla-keyvec-refresh
-      'xetla-widget-category-node-refresh)
-    (define-key map (xetla-prefix-add ?b)
-      'xetla-widget-category-node-make-branch)
-    map)
-  "Keymap used on xetla-widget-category-node.")
-
-(easy-menu-define xetla-widget-category-node-menu nil
-  "Menu used on a archive item in `xetla-browse-mode' buffer."
-  '("Category"
-    ["Update Branches List" xetla-widget-category-node-refresh t]
-    ["Remove Category[NOT IMPLEMENTED]" nil t]
-    ["Make New Branch..." xetla-widget-category-node-make-branch t]
-    ["Add a Bookmark" xetla-widget-node-add-bookmark t]
-    ["Synchronize Mirror to Remote"
-     xetla-widget-node-synchronize-mirror-to-remote t]
-    ["Save Name to Kill Ring" xetla-widget-node-save-name-to-kill-ring t]))
-
-(define-widget 'xetla-widget-category-node 'xetla-widget-node
-  "Category node in xetla-browse."
-  :tag "c"
-  :value-create 'xetla-widget-category-node-value-create
-  :xetla-type 'category
-  :face 'xetla-category-name
-  :keymap 'xetla-widget-category-node-map
-  :menu xetla-widget-category-node-menu
-  :archive nil
-  :category nil)
-
-(defun xetla-browse-expand-categories (archive)
-  "Expand ARCHIVE widget."
-  (or (and (not current-prefix-arg) (widget-get archive :args))
-      (let ((archive-name (widget-get
-                           (widget-get archive :node)
-                           :archive)))
-        (mapcar
-         (lambda (category)
-           (let ((res `(tree-widget
-                        :open ,(xetla-browse-open-list-member archive-name
-                                                             (car category))
-                        :has-children t
-                        :dynargs xetla-browse-expand-branches
-                        :node (xetla-widget-category-node
-                               :archive ,archive-name
-                               :category ,(car category)))))
-             (widget-put (widget-get res :node) :parent res)
-             res))
-         (let* ((l (cddr (xetla-archive-tree-get-archive
-                          archive-name))))
-           (when (or (null l) current-prefix-arg)
-             (xetla-archive-tree-build-categories archive-name nil t))
-           (cddr (xetla-archive-tree-get-archive archive-name)))))))
-
-(defun xetla-widget-category-node-value-create (widget)
-  "Create values for category WIDGET."
-  (xetla-widget-node-value-create widget :category))
-
-(defun xetla-widget-category-node-refresh ()
-  "Refresh a category widget at the point."
-  (interactive)
-  (let ((name (xetla-widget-node-get-name)))
-    (xetla-widget-node-refresh 1 nil
-                              (xetla-name-archive name)
-                              (xetla-name-category name))))
-
-(defun xetla-widget-category-node-make-branch ()
-  "Make new branch in the category under the point."
-  (interactive)
-  (let* ((name (xetla-widget-node-get-name))
-         (archive (xetla-name-archive name))
-         (category  (xetla-name-category name))
-         (l (xetla-name-read "New Branch: "
-                            archive
-                            category
-                            'prompt)))
-    (xetla-make-branch (xetla-name-archive l)
-                    (xetla-name-category l)
-                    (xetla-name-branch l))
-    (xetla-widget-node-refresh 1 nil
-                             (xetla-name-archive l)
-                             (xetla-name-category l))
-    (xetla-browse-open t
-                      (xetla-name-archive l)
-                      (xetla-name-category l)
-                      (xetla-name-branch l))))
-
-;; --------------------------------------
-;; Branch
-;; --------------------------------------
-(defvar xetla-widget-branch-node-map
-  (let ((map (copy-keymap xetla-widget-node-map)))
-    (define-key map xetla-keyvec-refresh
-      'xetla-widget-branch-node-refresh)
-    (define-key map (xetla-prefix-add ?v)
-      'xetla-widget-branch-node-make-version)
-    (define-key map xetla-keyvec-get
-      'xetla-widget-branch-node-get-branch)
-    map)
-  "Keymap used on xetla-widget-branch-node.")
-
-(easy-menu-define xetla-widget-branch-node-menu nil
-  "Menu used on a archive item in `xetla-browse-mode' buffer."
-  '("Branch"
-    ["Update Version List" xetla-widget-branch-node-refresh t]
-    ["Remove Branch Registration[NOT IMPLEMENTED]" nil t]
-    ["Make New Version..." xetla-widget-branch-node-make-version t]
-    ["Get..."              xetla-widget-branch-node-get-branch t]
-    ["Add a Bookmark" xetla-widget-node-add-bookmark t]
-    ["Synchronize Mirror to Remote"
-     xetla-widget-node-synchronize-mirror-to-remote t]
-    ["Save Name to Kill Ring" xetla-widget-node-save-name-to-kill-ring t]))
-
-(define-widget 'xetla-widget-branch-node 'xetla-widget-node
-  "Branch node in xetla-browse."
-  :tag "b"
-  :value-create 'xetla-widget-branch-node-value-create
-  :xetla-type 'branch
-  :face 'xetla-branch-name
-  :keymap 'xetla-widget-branch-node-map
-  :menu xetla-widget-branch-node-menu
-  :archive nil
-  :category nil
-  :branch nil)
-
-(defun xetla-browse-expand-branches (category)
-  "Expand CATEGORY widget."
-  (or (and (not current-prefix-arg) (widget-get category :args))
-      (let* ((parent-node   (widget-get category :node))
-             (archive-name  (widget-get parent-node :archive))
-             (category-name (widget-get parent-node :category)))
-        (mapcar
-         (lambda (branch)
-           (let ((res
-                  `(tree-widget
-                    :open ,(xetla-browse-open-list-member archive-name
-                                                         category-name
-                                                         (car branch))
-                    :has-children t
-                    :leaf-control xetla-widget-version-control
-                    :dynargs xetla-browse-expand-versions
-                    :node (xetla-widget-branch-node
-                           :archive ,archive-name
-                           :category ,category-name
-                           :branch ,(car branch)))))
-             (widget-put (widget-get res :node) :parent res)
-             res))
-         (let* ((l (cdr (xetla-archive-tree-get-category
-                         archive-name
-                         category-name))))
-           (when (or (null l) current-prefix-arg)
-             (xetla-archive-tree-build-branches archive-name
-                                               category-name
-                                               nil t))
-           (cdr (xetla-archive-tree-get-category archive-name
-                                                category-name)))))))
-
-(defun xetla-widget-branch-node-value-create (widget)
-  "Create values for branch WIDGET."
-  (xetla-widget-node-value-create widget :branch))
-
-(defun xetla-widget-branch-node-refresh ()
-  "Refresh a branch widget at the point."
-  (interactive)
-  (let ((name (xetla-widget-node-get-name)))
-    (xetla-widget-node-refresh 1 nil
-                             (xetla-name-archive name)
-                             (xetla-name-category name)
-                             (xetla-name-branch name))))
-
-(defun xetla-widget-branch-node-make-version ()
-  "Make new version in the branch under the point."
-  (interactive)
-  (let* ((name (xetla-widget-node-get-name))
-         (archive (xetla-name-archive name))
-         (category (xetla-name-category name))
-         (branch (xetla-name-category name))
-         (l (xetla-name-read "New Version: "
-                            archive
-                            category
-                            branch
-                            'prompt)))
-    (xetla-make-version (xetla-name-archive l)
-                     (xetla-name-category l)
-                     (xetla-name-branch l)
-                     (xetla-name-version l))
-    (xetla-widget-node-refresh 1 nil
-                             (xetla-name-archive l)
-                             (xetla-name-category l)
-                             (xetla-name-branch l))
-    (xetla-browse-open t
-                      (xetla-name-archive l)
-                      (xetla-name-category l)
-                      (xetla-name-branch l)
-                      (xetla-name-version l))))
-
-(defun xetla-widget-branch-node-get-branch ()
-  "Run `tla get' against the branch at point."
-  (interactive)
-  (let* ((name (xetla-widget-node-get-name))
-        (archive (xetla-name-archive name))
-        (category (xetla-name-category name))
-        (branch (xetla-name-branch name))
-         (directory (expand-file-name
-                     (read-directory-name
-                      (format "Restore \"%s\" to: "
-                              (progn
-                                (unless branch
-                                  (error "No branch under the point"))
-                                (xetla-name-construct
-                                 archive category branch)))))))
-    (if branch
-        (xetla-get directory
-                 'ask
-                 archive
-                 category
-                 branch)
-      (error "No branch under the point"))))
-
-
-;; --------------------------------------
-;; Version
-;; --------------------------------------
-(defvar xetla-widget-version-node-map
-  (let ((map (copy-keymap xetla-widget-node-map)))
-    (define-key map xetla-keyvec-refresh
-      'xetla-widget-version-node-show-revisions)
-    (define-key map xetla-keyvec-get
-      'xetla-widget-version-node-get-version)
-    (define-key map xetla-keyvec-tag 'xetla-widget-version-node-tag)
-    map)
-  "Keymap used on xetla-widget-version-node.")
-
-(easy-menu-define xetla-widget-version-node-menu nil
-  "Menu used on a archive item in `xetla-browse-mode' buffer."
-  '("Version"
-    ["Show Revisions" xetla-widget-version-node-show-revisions t]
-    ["Remove Version Registration[NOT IMPLEMENTED]" nil t]
-    ["Get..." xetla-widget-version-node-get-version t]
-    ["Add a Bookmark" xetla-widget-node-add-bookmark t]
-    ["Synchronize Mirror to Remote"
-     xetla-widget-node-synchronize-mirror-to-remote t]
-    ["Put Tag..." xetla-widget-version-node-tag t]
-    ["Save Name to Kill Ring" xetla-widget-node-save-name-to-kill-ring t]))
-
-(define-widget 'xetla-widget-version-node 'xetla-widget-node
-  "Version node in xetla-browse."
-  :tag "v"
-  :value-create 'xetla-widget-version-node-value-create
-  :xetla-type 'version
-  :face 'xetla-version-name
-  :keymap 'xetla-widget-version-node-map
-  :menu   xetla-widget-version-node-menu
-  :archive nil
-  :category nil
-  :branch nil
-  :version nil
-  :open-subtree 'xetla-widget-version-node-open-subtree
-  :close-subtree 'xetla-widget-version-node-open-subtree)
-
-
-(define-widget 'xetla-widget-version-control 'tree-widget-empty-control
-  "Control widget that represents a leaf version node."
-  :tag       "[->]"
-  :format    "%[%t%]"
-  :action  'xetla-widget-version-control-show-revisions)
-
-(defun xetla-widget-version-control-show-revisions (widget &optional event)
-  "Show revisions in a version associated with WIDGET.
-The version is under the point or place where click EVENT is created."
-  (if event
-      (mouse-set-point event))
-  (let ((pos (next-single-property-change (point)
-                                          'widget
-                                          (current-buffer)
-                                          (point-at-eol))))
-    (when pos
-      (xetla-widget-version-node-show-revisions pos))))
-
-(defun xetla-browse-expand-versions (branch)
-  "Expand BRANCH widget."
-  (or (and (not current-prefix-arg) (widget-get branch :args))
-      (let* ((parent-node   (widget-get branch :node))
-             (archive-name  (widget-get parent-node :archive))
-             (category-name (widget-get parent-node :category))
-             (branch-name (widget-get parent-node :branch)))
-        (mapcar (lambda (version)
-                  `(xetla-widget-version-node
-                        :archive  ,archive-name
-                        :category ,category-name
-                        :branch   ,branch-name
-                        :version  ,(car version)))
-                (let* ((l (cdr (xetla-archive-tree-get-branch archive-name
-                                                             category-name
-                                                             branch-name))))
-                  (when (or (null l) current-prefix-arg)
-                    (xetla-archive-tree-build-versions archive-name
-                                                      category-name
-                                                      branch-name
-                                                      nil t))
-                  (cdr (xetla-archive-tree-get-branch archive-name
-                                                     category-name
-                                                     branch-name)))))))
-
-(defun xetla-widget-version-node-value-create (widget)
-  "Create values for version WIDGET."
-  (xetla-widget-node-value-create widget :version))
-
-(defun xetla-widget-version-node-show-revisions (&optional point)
-  "Show revisions in the version under the POINT.
-If POINT is nil, use the point under `point'."
-  (interactive)
-  (let ((name (xetla-widget-node-get-name (or point (point)))))
-    (xetla-revisions (xetla-name-archive name)
-                  (xetla-name-category name)
-                  (xetla-name-branch name)
-                  (xetla-name-version name)
-                  nil nil)))
-
-(defun xetla-widget-version-node-get-version ()
-  "Run \"tla get\" against the version at point."
-  (interactive)
-  (let* ((name (xetla-widget-node-get-name))
-        (archive (xetla-name-archive name))
-        (category (xetla-name-category name))
-        (branch (xetla-name-branch name))
-        (version (xetla-name-version name))
-         (directory (expand-file-name
-                     (read-directory-name
-                      (format "Restore \"%s\" to: "
-                              (progn
-                                (unless version
-                                  (error "No version under the point"))
-                                (xetla-name-construct
-                                 archive category branch version)))))))
-    (if version
-        (xetla-get directory
-                 'ask
-                 archive
-                 category
-                 branch
-                version)
-      (error "No version under the point"))))
-
-(defun xetla-widget-version-node-tag ()
-  "Run tla tag from the version under the point."
-  (interactive)
-  (let* ((from (xetla-widget-node-get-name))
-        (from-fq (xetla-name-construct from))
-        (to   (xetla-name-read (format "Tag from `%s' to: " from-fq)
-                              'prompt 'prompt 'prompt 'prompt))
-        (to-fq (xetla-name-construct to)))
-    (unless from
-      (error "No version under the point"))
-    (unless to-fq
-      (error "Wrong version tagged to is given"))
-    (save-excursion
-      (xetla-version-tag-internal from-fq to-fq 'synchronously))
-    (xetla-widget-node-refresh 1 nil
-                             (xetla-name-archive to-fq)
-                             (xetla-name-category to-fq)
-                             (xetla-name-branch to-fq))
-    (xetla-browse-open t
-                      (xetla-name-archive to-fq)
-                      (xetla-name-category to-fq)
-                      (xetla-name-branch to-fq)
-                      (xetla-name-version to-fq))))
-
-(defun xetla-widget-version-node-open-subtree (widget)
-  "List revisions in the version associated with WIDGET."
-  (xetla-revisions (widget-get widget :archive)
-                 (widget-get widget :category)
-                 (widget-get widget :branch)
-                 (widget-get widget :version)
-                 nil nil))
-
-;; --------------------------------------
-;; Entry point
-;; --------------------------------------
-;; TODO: Filtered by GROUP in bookmark
-;;;###autoload
-(defun xetla-browse (&optional initial-open-list append)
-  "Browse registered archives as trees within one buffer.
-You can specify the node should be opened by alist,
-INITIAL-OPEN-LIST.  If APPEND is nil, the nodes not in
-INITIAL-OPEN-LIST are made closed.  If non-nil, the nodes
-already opened are kept open."
-
-  (interactive)
-  (switch-to-buffer (xetla-get-buffer-create
-                     xetla-browse-buffer-type))
-  (make-local-variable 'xetla-browse-open-list)
-  (setq truncate-lines t)
-
-  (let (building)
-    (if (zerop (buffer-size))
-        (progn (setq building t)
-               (xetla-browse-set-initial-open-list initial-open-list t))
-      (if append
-          (progn
-            (setq building nil)
-            (xetla-browse-set-initial-open-list initial-open-list nil))
-        (if (y-or-n-p (format "Remove old %s? " (buffer-name)))
-            (progn (setq building t)
-                   (xetla-browse-set-initial-open-list initial-open-list nil))
-          (setq building nil)
-          (xetla-browse-set-initial-open-list initial-open-list t))))
-
-    (if building
-        (progn
-          (xetla-browse-erase-buffer)
-          (xetla-browse-build-buffer))
-      (mapc
-       (lambda (elt)
-         (xetla-browse-open nil
-                           (xetla-name-archive elt)
-                           (xetla-name-category elt)
-                           (xetla-name-branch elt)
-                           (xetla-name-version elt)))
-       xetla-browse-open-list)))
-  (goto-char (point-min))
-  (xetla-browse-mode))
-
-(defun xetla-browse-set-initial-open-list (list clearp)
-  "Insert LIST to `xetla-browse-open-list'.
-If CLEARP is set, clear `xetla-browse-open-list' before insertion.
-This is a helper function for `xetla-browse'."
-  (when clearp
-    (setq xetla-browse-open-list nil))
-  (mapc
-   (lambda (elt)
-     (xetla-browse-open-list-add (xetla-name-archive elt)
-                                (xetla-name-category elt)
-                                (xetla-name-branch elt)
-                                (xetla-name-version elt)))
-   list))
-(defun xetla-browse-erase-buffer ()
-  "Erase *xetla-browse* buffer."
-  (let ((inhibit-read-only t))
-    (erase-buffer))
-  ;; remove-extent is not portable enough.
-  (mapc #'delete-extent
-        (mapcar-extents #'identity
-                        nil nil (point-min) (point-max)
-                        'all-extents-closed-open)))
-
-(defun xetla-browse-build-buffer ()
-  "Insert contents of *xetla-buffer*."
-  ;; Xetla config
-  (widget-create 'tree-widget
-                 :open t
-                 :node '(item :format "%[%t%]\n"
-                              :tag "Personal Configuration")
-                 :has-chidren t
-                 `(xetla-widget-my-id ,(xetla-my-id)))
-
-  (widget-insert "\n")
-
-  ;; Archives
-  (add-hook 'tree-widget-after-toggle-functions
-            'xetla-browse-open-tracker)
-  (widget-create 'tree-widget
-                 :open t
-                 :node `(xetla-widget-root-node
-                         :xetla-type archives-root
-                         :tag "Archives"
-                         :keymap xetla-widget-archives-root-node-map
-                         :menu ,xetla-widget-archives-root-node-menu)
-                 :has-children t
-                 :dynargs 'xetla-browse-expand-archives)
-  ;; Libraries
-  ;; TODO
-  (widget-setup))
-
-(defun xetla-browse-toggle-subtree-maybe ()
-  "Run `xetla-browse-toggle-subtree'.
-Before running a widget is searched and move the point to
-the widget if it is found.  If no widget is found,
-`widget-button-press'."
-  (interactive)
-  (let ((p (next-single-property-change (point-at-bol)
-                                        'widget
-                                        nil
-                                        (point-at-eol))))
-    (if (and p (xetla-widget-node-get-type p))
-        (xetla-widget-node-toggle-subtree p)
-      (widget-button-press (point)))))
-
-(defun xetla-browse-dash ()
-  "Move the point to the place where a widget is in the current line."
-  (interactive)
-  (let ((p (next-single-property-change (point-at-bol)
-                                        'widget
-                                        nil
-                                        (point-at-eol))))
-    (when (and p (xetla-widget-node-get-type p))
-      (goto-char p)
-      (xetla-flash-line))))
-
-(defvar xetla-browse-map
-  (let ((map (copy-keymap widget-keymap)))
-    (define-key map xetla-keyvec-help 'describe-mode)
-    (define-key map (xetla-prefix-buffer ?p) 'xetla-show-process-buffer)
-    (define-key map (xetla-prefix-buffer ?L) 'xetla-open-internal-log-buffer)
-    (define-key map (xetla-prefix-buffer xetla-key-show-bookmark) 'xetla-bookmarks)
-    (define-key map [return] 'xetla-browse-toggle-subtree-maybe)
-    (define-key map "\C-m" 'xetla-browse-toggle-subtree-maybe)
-    (define-key map " " 'xetla-browse-dash)
-    (define-key map xetla-keyvec-next     'next-line)
-    (define-key map xetla-keyvec-previous 'previous-line)
-    (define-key map xetla-keyvec-quit     'kill-this-buffer)
-    (define-key map [?+] 'xetla-widget-node-toggle-subtree-recursive)
-    map)
-  "Keymap used in `xetla-browse-mode'.")
-
-(defun xetla-browse-mode ()
-  "Mode for browsing xetla's archives.
-Don't use this function.  Instead call `xetla-browse'."
-  (setq major-mode 'xetla-browse-mode
-        mode-name "xetla-browse")
-  (use-local-map xetla-browse-map)
-  (set-buffer-modified-p nil)
-  (run-hooks 'xetla-browse-mode-hook))
-
-(provide 'xetla-browse)
-
-;;; xetla-browse.el ends here
diff --git a/xemacs-packages/xetla/xetla-core.el b/xemacs-packages/xetla/xetla-core.el
deleted file mode 100644 (file)
index fdba80d..0000000
+++ /dev/null
@@ -1,2771 +0,0 @@
-;;; xetla-core.el --- Core of xetla
-
-;; Copyright (C) 2003-2004 by Stefan Reichoer (GPL)
-;; Copyright (C) 2004 Steve Youngs (BSD)
-
-;; Author:        Steve Youngs <steve@eicq.org>
-;; Maintainer:    Steve Youngs <steve@eicq.org>
-;; Created:       2004-11-25
-;; Keywords:      arch archive tla
-
-;; Based on xtla-core.el by: Stefan Reichoer, <stefan@xsteve.at>
-
-;; This file is part of XEtla.
-
-;; Redistribution and use in source and binary forms, with or without
-;; modification, are permitted provided that the following conditions
-;; are met:
-;;
-;; 1. Redistributions of source code must retain the above copyright
-;;    notice, this list of conditions and the following disclaimer.
-;;
-;; 2. Redistributions in binary form must reproduce the above copyright
-;;    notice, this list of conditions and the following disclaimer in the
-;;    documentation and/or other materials provided with the distribution.
-;;
-;; 3. Neither the name of the author nor the names of any contributors
-;;    may be used to endorse or promote products derived from this
-;;    software without specific prior written permission.
-;;
-;; THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR
-;; IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-;; WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-;; DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
-;; FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-;; CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-;; SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
-;; BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-;; WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
-;; OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
-;; IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-;;; Commentary:
-
-;; Contributions from:
-;;    Matthieu Moy <Matthieu.Moy@imag.fr>
-;;    Masatake YAMATO <jet@gyve.org>
-;;    Milan Zamazal <pdm@zamazal.org>
-;;    Martin Pool <mbp@sourcefrog.net>
-;;    Robert Widhopf-Fenk <hack@robf.de>
-;;    Mark Triggs <mst@dishevelled.net>
-
-
-;; This file provides the low-level functions used by xetla.el
-
-
-;;; Code:
-
-(require 'xetla-defs)
-(require 'ewoc)
-
-;; --------------------------------------
-;; Compatibility stuff
-;; --------------------------------------
-(eval-when-compile
-  (require 'cl)
-  (autoload 'read-passwd "passwd"))
-
-(require 'pp)
-
-(defvar xetla-buffer-type-alist
-  '((changes   "*xetla-changes*"   root)
-    (inventory "*xetla-inventory*" path)
-    (missing   "*xetla-missing*"   single)
-    (cat-log   "*xetla-cat-log(%s)*" string)
-    (file-diff "*xetla-file-diff*" path)
-    (changelog "*xetla-changelog*" root)
-    (tree-lint "*xetla-tree-lint*" root)
-    (logs      "*xetla-logs*"      root)
-    (errors    "*xetla-error*"     multiple)
-    (generic   "*xetla-process*"   multiple)
-    (browse    "*xetla-browse*"    single)
-    (changeset "*xetla-changeset(%s)*" string))
-  "List of (type name mode) used to generate a name for a buffer.
-
-TYPE is the type of buffer to create, passed as the first argument to
-`xetla-get-buffer-create'.
-
-NAME is a string, used as a name for the returned buffer.
-
-MODE is a symbol defining the way to manage (value of
-`default-directory' in the created buffer) paths for this type of
-buffers. It can have the following values:
-
- * 'root: `default-directory' will be the tree-root of the specified
-    directory.
-
- * 'path: `default-directory' will be the path specified.
-
-For 'root and 'path, `xetla-get-buffer-create' will return the existing
-buffer for this type and this path if it exists, or create a new one
-otherwise.
-
- * 'single: There is only one buffer of this type for each Emacs
-   instance. If a path is provided, `default-directory' is set to that
-   path. Otherwise, the path is left unchanged when a buffer is
-   reused, and set to the current directory on buffer creation.
-
- * 'multiple: `default-directory' is set to the path specified. A new
-   buffer is returned anyway. (No buffer reuse).
-
- * 'string: The path specified is actually a string. It won't be used
-   to set `default-directory'. The name of the created buffer will be
-   (format name string).")
-
-(defvar xetla-buffers-tree nil
-  "Tree containing all xetla buffers.
-
-Must be of the form
- ((type1 (\"path1\" buffer \"original name of buffer\")
-         (\"path2\" buffer2 \"original name of buffer2\"))
-  (type2 (\"path1\" buffer3 \"original name of buffer3\")
-         (\"path3\" buffer4 \"original name of buffer4\")))
-Used to keep track of all the xetla related buffers.")
-
-(defun xetla-buffers-tree-remove (buffer)
-  "Remove BUFFER from the buffers tree."
-    (dolist (type-cons xetla-buffers-tree)
-      (dolist (path-buffer (cdr type-cons))
-        (when (eq (cadr path-buffer) buffer)
-          (setcdr type-cons (delete path-buffer (cdr type-cons)))))))
-
-(defun xetla-buffers-tree-add (type path buffer)
-  "Add a buffer of TYPE visiting PATH to the buffers tree.
-BUFFER should be the buffer to add."
-  (let ((current-assoc (assoc type xetla-buffers-tree)))
-    (if current-assoc
-        (setcdr current-assoc
-                (cons (list path buffer (buffer-name buffer))
-                      (cdr current-assoc)))
-      (setq xetla-buffers-tree
-            (cons `(,type (,path ,buffer ,(buffer-name buffer))) xetla-buffers-tree)))))
-
-(defvar xetla-temp-directory (temp-directory)
-  "Temporary directory for some xetla operations.")
-
-(defun xetla-make-temp-name (file)
-  "Generate a temporary file name based on FILE.
-The path for the file name can be set via `xetla-temp-directory'."
-  (make-temp-name (concat (xetla-uniquify-file-name xetla-temp-directory) file)))
-
-(defun xetla-uniquify-file-name (path)
-  "Return a unique string designating PATH.
-If PATH is a directory,the returned contains one and exactly one trailing
-slash.  If PATH is nil, then nil is returned."
-  (and path
-       (let ((expanded (expand-file-name
-                        (if (file-directory-p path)
-                            (file-name-as-directory path)
-                          path))))
-         (if (featurep 'xemacs)
-             (replace-regexp-in-string "/+$" "/" expanded)
-           expanded))))
-
-(defun xetla-config-file-full-path (file &optional create-config-dir)
-  "Return the full path for the config file FILE.
-FILE will be stored in the `xetla-config-directory'.
-If CREATE-CONFIG-DIR is non nil, ensure that the `xetla-config-directory'
-does exist."
-  (let ((full-name (xetla-uniquify-file-name
-                    (concat xetla-config-directory file))))
-    (unless (file-exists-p xetla-config-directory)
-      (when create-config-dir
-        (make-directory xetla-config-directory t)
-        (message "The config files of Xetla will be stored in %s!"
-                 xetla-config-directory)
-        (sit-for 5)))
-    ;; TODO remove migration code as some time in the future
-    (unless (file-exists-p (expand-file-name xetla-bookmarks-file-name
-                                             xetla-config-directory))
-      (let ((old-ones (list (list (expand-file-name xetla-bookmarks-file-name
-                                                    xetla-config-directory)
-                                  "~/.xetla-bookmarks.el"
-                                  "~/.xetla/.xetla-bookmarks.el")))
-            o olds n)
-        (while old-ones
-          (setq olds (car old-ones) old-ones (cdr old-ones))
-          (if olds (setq n (car olds) olds (cdr olds)))
-          (while olds
-            (setq o (expand-file-name (car olds)) olds (cdr olds))
-            (if (file-exists-p o)
-                (if (yes-or-no-p (format "Migrate %s to %s? " o n))
-                    (rename-file o n)
-                  (if (yes-or-no-p (format "Delete %s? " o))
-                      (delete-file o))))))))
-    ;; return full-name
-    full-name))
-
-(defun xetla-stringise (uberstring &rest args)
-  "Create a string from UBERSTRING.
-I.e. you can pass 
-- a string which evals to itself
-- a variable whose value is a string
-- a function which is called and should eval to a string
-- a form which is evaluated and should return a string.
-
-All results are run against `xetla-stringise' again
-until finally a string is produced."
-  (cond ((stringp uberstring)
-         uberstring)
-        ((and (symbolp uberstring)
-              (boundp uberstring))
-         (xetla-stringise (symbol-value uberstring)))
-        ((and (symbolp uberstring)
-              (fboundp uberstring))
-         (xetla-stringise (apply uberstring args)))
-        ((ignore-errors (xetla-stringise (eval uberstring))))
-        ((ignore-errors (xetla-stringise (eval (cons 'progn uberstring)))))
-        (t nil)))
-
-;; this is useful since i can now have something like:
-;;
-;; (set-alist 'xetla-buffer-type-alist
-;;            'inventory
-;;            '((format "*xetla-inventory%s*"
-;;                      (let ((dir (replace-regexp-in-string
-;;                                  "^.+/\\([^/]+\\).?$"
-;;                                  "\\1"
-;;                                  (expand-file-name path))))
-;;                        (if dir (format " (%s)" dir)
-;;                          "")))))
-;;
-;; to always have the path in the buffer name of the inventory
-
-(defun xetla-get-buffer-type (type)
-  "Get entry in `xetla-buffer-type-alist' for given TYPE."
-  (assoc type xetla-buffer-type-alist))
-
-(defun xetla-get-buffer-name (type)
-  "Get name part of `xetla-buffer-type-alist' for given TYPE."
-  (let ((name (cadr (xetla-get-buffer-type type))))
-    (xetla-stringise name)))
-
-(defun xetla-get-buffer-mode (type)
-  "Get name part of `xetla-buffer-type-alist' for given TYPE."
-  (let ((mode (caddr (xetla-get-buffer-type type))))
-    mode))
-
-(eval-when-compile
-  (autoload 'xetla-tree-root "xetla"))
-
-(defun xetla-get-buffer-create (type &optional path)
-  "Get a buffer of type TYPE for the path PATH.
-
-Maybe reuse one if it exists, according to the value of
-`xetla-buffer-type-alist' (see its docstring), or, call
-`create-file-buffer' to create the buffer.
-
-See also `xetla-get-buffer'"
-  ;; Inspired from `cvs-get-buffer-create'
-  (let* ((path (or path default-directory))
-         (elem (assoc type xetla-buffer-type-alist))
-         (mode (caddr elem)))
-    (or (xetla-get-buffer type path mode)
-        ;; Buffer couldn't be reused. Create one
-        (let ((path (case mode
-                      (root (xetla-uniquify-file-name
-                             (xetla-tree-root path)))
-                      (string path)
-                      (t (xetla-uniquify-file-name path))))
-              (name (xetla-get-buffer-name type)))
-          (let ((buffer
-                 (if (eq mode 'string)
-                     (get-buffer-create (format name path))
-                   (let ((default-directory (or path default-directory)))
-                     (create-file-buffer (or name "*xetla-buffer*"))))))
-            (with-current-buffer buffer
-              (xetla-buffers-tree-add type path buffer)
-              buffer))))))
-
-(add-hook 'kill-buffer-hook 'xetla-kill-buffer-function)
-
-(defun xetla-kill-buffer-function ()
-  "Function run when a buffer is killed."
-  (xetla-buffers-tree-remove (current-buffer))
-  (xetla-kill-process-maybe (current-buffer)))
-
-(defun xetla-get-buffer (type &optional path mode)
-  "Get a buffer of type TYPE for the path PATH.
-
-Maybe reuse one if it exists, depending on the value of MODE (see
-`xetla-buffer-type-alist' 's third element), otherwise, return nil.  See
-also `xetla-get-buffer-create'."
-  (let ((mode (or mode (xetla-get-buffer-mode type)))
-        (path (or path default-directory)))
-    (if (eq mode 'single)
-        ;; nothing to do about PATH. Reuse anyway
-        (let* ((list-path (cdr (assoc type xetla-buffers-tree)))
-               (first-elem (car list-path)))
-          (if list-path
-              (if (string= (buffer-name (cadr first-elem))
-                           (caddr first-elem))
-                  (cadr first-elem)
-                (setcdr (assoc type xetla-buffers-tree) nil)
-                nil)
-            nil))
-      (let ((path (and path
-                       (case mode
-                         (root (xetla-uniquify-file-name
-                                (xetla-tree-root path)))
-                         (string path)
-                         (t (xetla-uniquify-file-name path))))))
-        (if (eq mode 'multiple)
-            ;; no need to search an existing buffer
-            nil
-          (let* ((list-path (assoc type xetla-buffers-tree))
-                 (elem (assoc path (cdr list-path)))
-                 (buffer (cadr elem)))
-            (when buffer
-              (if (and (buffer-live-p buffer)
-                       ;; the buffer has not been renamed
-                       (string= (buffer-name buffer)
-                                (caddr elem)))
-                  buffer
-                ;; remove the buffer and try again
-                (setcdr list-path
-                        (delq (assoc path (cdr list-path))
-                              (cdr list-path)))
-                (xetla-get-buffer type path mode)))))))))
-
-(defun xetla-add-buffer-type (type name)
-  "Define a new TYPE of buffer whose buffer will be named NAME."
-  (unless (assoc type xetla-buffer-type-alist)
-    (push (list type name) xetla-buffer-type-alist)))
-
-(defun xetla-position (item seq)
-  "Position of ITEM in list, or nil if not found.
-Return 0 if ITEM is the first element of SEQ"
-  (let ((pos 0)
-        (seq-int seq))
-    (while (and seq-int
-                (not (eq (car seq-int) item)))
-      (setq seq-int (cdr seq-int))
-      (setq pos (1+ pos)))
-    (when seq-int pos)))
-
-
-(defun xetla-last-visited-inventory-buffer ()
-  "Return the last visited xetla's inventory buffer."
-  (let ((inventories (remove nil (mapcar
-                                  (lambda (elt)
-                                    (when (buffer-live-p (cadr elt))
-                                      elt))
-                                  (cdr (assoc 'inventory xetla-buffers-tree)))))
-        (bl (buffer-list)))
-    (cadr (car (sort inventories (lambda (a b)
-                                   (let ((aindex (xetla-position (cadr a) bl))
-                                         (bindex (xetla-position (cadr b) bl)))
-                                     (< aindex bindex))))))))
-
-(defun xetla-show-inventory-buffer ()
-  "Switch to the last visited inventory buffer."
-  (interactive)
-  (xetla-switch-to-buffer (xetla-last-visited-inventory-buffer)))
-
-;; --------------------------------------
-;; Process buffers
-;; --------------------------------------
-
-(defcustom xetla-process-buffer " *xetla-process*"
-  "*Name of the process buffer."
-  :type 'string
-  :group 'xetla-internal)
-
-(defcustom xetla-error-buffer " *xetla-errors*"
-  "*Name of the buffer to which xetla's stderr is redirected."
-  :type 'string
-  :group 'xetla-internal)
-
-(defcustom xetla-number-of-dead-process-buffer 20
-  "*Number of process buffers to keep after process termination.
-When the number of process buffers exceeds this number, the most ancient
-is killed.  This includes both the process buffer and the error
-buffer (to which stderr is redirected).
-
-A nil value here means \"Never kill any process buffer\". Useful for
-debugging, but this will eat the memory of your computer ;-)"
-  :type 'integer
-  :group 'xetla-internal)
-
-(defcustom xetla-show-internal-buffers-on-menu nil
-  "Toggle display of dead process buffers in the buffer menu."
-  :type 'boolean
-  :group 'xetla-internal)
-
-(defvar xetla-dead-process-buffer-queue nil
-  "List of process buffers belonging to terminated processes.
-When the list is greater than `xetla-number-of-dead-process-buffer', the last
-ones are killed.")
-
-(defun xetla-kill-process-buffer (buffer)
-  "Don't actually kill BUFFER, but add it to `xetla-dead-process-buffer-queue'.
-It will eventually be killed when the number of buffers in
-`xetla-dead-process-buffer-queue'exceeds `xetla-number-of-dead-process-buffer'."
-  (add-to-list 'xetla-dead-process-buffer-queue buffer t)
-  (setq xetla-dead-process-buffer-queue
-        (remove-if-not #'buffer-live-p xetla-dead-process-buffer-queue))
-  (when xetla-number-of-dead-process-buffer
-    (while (> (length xetla-dead-process-buffer-queue)
-              (max 2 xetla-number-of-dead-process-buffer))
-      (let ((currbuf (car xetla-dead-process-buffer-queue)))
-        ;; just to be completely certain
-        (when (buffer-live-p currbuf)
-          (kill-buffer currbuf))
-        ;; now remove that killed buffer
-        (setq xetla-dead-process-buffer-queue
-              (cdr xetla-dead-process-buffer-queue))))))
-
-(defvar xetla-last-process-buffer nil
-  "The last created process buffer.")
-
-(defvar xetla-last-error-buffer nil
-  "The last created process buffer.")
-
-(defun xetla-new-process-buffer (to-be-deleted)
-  "Create a new process buffer.
-If TO-BE-DELETED is non-nil, make this buffer a candidate for eventually
-being deleted."
-  (let ((buffer (create-file-buffer xetla-process-buffer)))
-    (setq xetla-last-process-buffer buffer)
-    (when to-be-deleted (xetla-kill-process-buffer buffer))
-    buffer))
-
-(defun xetla-new-error-buffer (to-be-deleted)
-  "Create a new error buffer.
-If TO-BE-DELETED is non-nil, make this buffer a candidate for eventually
-being deleted."
-  (let ((buffer (create-file-buffer xetla-error-buffer)))
-    (setq xetla-last-error-buffer buffer)
-    (when to-be-deleted (xetla-kill-process-buffer buffer))
-    buffer))
-
-;; --------------------------------------
-;; Process management
-;; --------------------------------------
-
-;; Candidates for process handlers
-(defun xetla-default-error-function (output error status arguments)
-  "Default function called when a xetla process ends with a non-zero status.
-OUTPUT is the buffer containing process standard output.
-ERROR is the buffer containing process error output.
-STATUS indicates the return status of the program.
-ARGUMENTS is a list of the arguments that the process was called with."
-  (if (> (with-current-buffer error (point-max)) 1)
-      (xetla-show-error-buffer error)
-    (if (> (with-current-buffer output (point-max)) 1)
-        (xetla-show-error-buffer output)
-      (error "`tla %s' failed with code %d and no output!"
-             (mapconcat 'identity arguments " ")
-             status)))
-  (error "`tla %s' failed with code %d"
-         (mapconcat 'identity arguments " ")
-         status))
-
-(defvar xetla-default-killed-function-noerror 0
-  "The number of killed processes we will ignore until throwing an error.
-If the value is 0, `xetla-default-killed-function' will throw an error.
-See `xetla-default-killed-function'.")
-
-(defun xetla-default-killed-function (output error status arguments)
-  "Default function called when a xetla process is killed.
-OUTPUT is the buffer containing process standard output.
-ERROR is the buffer containing process error output.
-STATUS indicates the return status of the program.
-ARGUMENTS is a list of the arguments that the process was called with."
-  (if (> xetla-default-killed-function-noerror 0)
-      (setq xetla-default-killed-function-noerror
-            (- xetla-default-killed-function-noerror 1))
-    (xetla-switch-to-buffer error)
-    (error "`tla %s' process killed !"
-           (mapconcat 'identity arguments " "))))
-
-(defun xetla-null-handler (output error status arguments)
-  "Handle a finished process without doing anything.
-Candidate as an argument for one of the keywords :finished, :error or :killed
-in `xetla-run-tla-sync' or `xetla-run-tla-async'.
-OUTPUT is the buffer containing process standard output.
-ERROR is the buffer containing process error output.
-STATUS indicates the return status of the program.
-ARGUMENTS is a list of the arguments that the process was called with."
-  nil)
-
-(defun xetla-status-handler (output error status arguments)
-  "Return an integer value that reflects the process status.
-Candidate as an argument for one of the keywords :finished, :error or :killed
-in `xetla-run-tla-sync' or `xetla-run-tla-async'.
-OUTPUT is the buffer containing process standard output.
-ERROR is the buffer containing process error output.
-STATUS indicates the return status of the program.
-ARGUMENTS is a list of the arguments that the process was called with."
-  (cond ((numberp status) status)
-        ((string-match "^exited abnormally with code \\(.*\\)" status)
-         (string-to-int (match-string 1)))
-        (t (error status))))
-
-(defun xetla-output-buffer-handler (output error status arguments)
-  "Return the output of a finished process, stripping any trailing newline.
-OUTPUT is the buffer containing process standard output.
-ERROR is the buffer containing process error output.
-STATUS indicates the return status of the program.
-ARGUMENTS is a list of the arguments that the process was called with."
-  (xetla-buffer-content output))
-
-(defun xetla-output-buffer-split-handler (output error status arguments)
-  "Return the output of a finished process as a list of lines.
-OUTPUT is the buffer containing process standard output.
-ERROR is the buffer containing process error output.
-STATUS indicates the return status of the program.
-ARGUMENTS is a list of the arguments that the process was called with."
-  (split-string (xetla-buffer-content output) "\n"))
-
-(defun xetla-default-finish-function (output error status arguments)
-  "Default function called when a xetla process terminates.
-OUTPUT is the buffer containing process standard output.
-ERROR is the buffer containing process error output.
-STATUS indicates the return status of the program.
-ARGUMENTS is a list of the arguments that the process was called with."
-  (with-current-buffer output
-    (xetla-process-buffer-mode))
-  (xetla-switch-to-buffer output)
-  (message "`tla %s' process finished !"
-           (mapconcat 'identity arguments " "))
-  status)
-
-(defun xetla-finish-function-without-buffer-switch (output error status arguments)
-  "Similar to `xetla-default-finish-function' but no buffer switch.
-OUTPUT is the buffer containing process standard output.
-ERROR is the buffer containing process error output.
-STATUS indicates the return status of the program.
-ARGUMENTS is a list of the arguments that the process was called with."
-  (message "`tla %s' process finished !"
-           (mapconcat 'identity arguments " "))
-  status)
-
-(defvar xetla-log-cookie nil)
-
-(defstruct (xetla-event) output-buffer error-buffer related-buffer
-  command tree event time)
-
-(defun xetla-strip-final-newline (string)
-  "Strip the final newline from STRING if there's one."
-  (if (eq (aref string (- (length string) 1)) ?\n)
-      (substring string 0 (- (length string) 1))
-    string))
-
-(defsubst xetla-log-printer-print-buffer (buffer function)
-  "Helper function for `xetla-log-printer'.
-Print a buffer filed for BUFFER during printing a log event.
-The printed name of BUFFER is mouse sensitive.  If the user
-clicks it, FUNCTION is invoked."
-  (xetla-face-add
-   (or (buffer-name buffer)
-       (pp-to-string buffer))
-   'xetla-buffer
-   (when (buffer-live-p buffer)
-     (let ((map (make-sparse-keymap)))
-       (define-key map [button2] function)
-       map))
-   nil
-   "Show the buffer"))
-
-(defun xetla-log-printer (elem)
-  "XEtla event printer which prints ELEM."
-  (let ((event (xetla-event-event elem))
-        (p (point)))
-    (insert
-     "Command: " (xetla-event-command elem)
-     "\nDirectory: " (xetla-face-add (xetla-event-tree elem)
-                                    'xetla-local-directory)
-     "\nDate: " (format-time-string "%c" (xetla-event-time elem))
-     "\nRelated Buffer: " (xetla-log-printer-print-buffer
-                           (xetla-event-related-buffer elem)
-                           'xetla-switch-to-related-buffer-by-mouse)
-     "\nOutput Buffer: "  (xetla-log-printer-print-buffer
-                           (xetla-event-output-buffer elem)
-                           'xetla-switch-to-output-buffer-by-mouse)
-     "\nError Buffer: "   (xetla-log-printer-print-buffer
-                           (xetla-event-error-buffer elem)
-                           'xetla-switch-to-error-buffer-by-mouse)
-     (if (not (string= event "started"))
-         (concat "\nEvent: " event)
-       "")
-     "\n")
-    ;; Reflect the point to `default-directory'.
-    ;; NOTE: XEmacs doesn't have `point-entered' special text property.
-    (put-text-property
-     p (point)
-     'point-entered (lambda (old new)
-                      (setq default-directory
-                            (xetla-event-tree
-                             (ewoc-data
-                              (ewoc-locate xetla-log-cookie))))))
-    ))
-
-(defvar xetla-process-running nil
-  "List of xetla processes running.
-A value of nil indicates no processes are running.
-
-The list is a list of pairs (process event) where EVENT is the event
-corresponding to the beginning of the execution of process.  It can be
-used to get more info about the process.")
-
-(defmacro xetla-switch-to-buffer-macro (function accessor)
-  "Define a FUNCTION for switching to the buffer associated with some event.
-ACCESSOR is a function for retrieving the appropriate buffer from a
-`xetla-event'structure."
-  `(defun ,function ()
-     "In a log buffer, pops to the output or error buffer corresponding to the
-process at point"
-     (interactive)
-     (let ((buffer (,accessor
-                    (ewoc-data (ewoc-locate xetla-log-cookie)))))
-       (cond ((buffer-live-p buffer)
-              (xetla-switch-to-buffer buffer)
-              (unless (member buffer
-                              (mapcar (lambda (p)
-                                        (process-buffer (car p)))
-                                      xetla-process-running))
-                (xetla-process-buffer-mode)))
-             (t (error "Buffer has been killed"))))))
-
-(xetla-switch-to-buffer-macro xetla-switch-to-output-buffer
-                             xetla-event-output-buffer)
-
-(xetla-switch-to-buffer-macro xetla-switch-to-error-buffer
-                             xetla-event-error-buffer)
-
-(xetla-switch-to-buffer-macro xetla-switch-to-related-buffer
-                             xetla-event-related-buffer)
-
-(defmacro xetla-make-bymouse-function (function)
-  "Create a new function by adding mouse interface to FUNCTION.
-The new function is named FUNCTION-by-mouse; and takes one argument,
-a mouse click event.
-Thew new function moves the point to the place where mouse is clicked
-then invoke FUNCTION."
-  `(defun ,(intern (concat (symbol-name function) "-by-mouse")) (event)
-     ,(concat "`" (symbol-name function) "'" " with mouse interface.")
-     (interactive "e")
-     (mouse-set-point event)
-     (,function)))
-
-(xetla-make-bymouse-function xetla-switch-to-output-buffer)
-(xetla-make-bymouse-function xetla-switch-to-error-buffer)
-(xetla-make-bymouse-function xetla-switch-to-related-buffer)
-
-(defun xetla-log-event (output error command tree event)
-  "Log an event in the `xetla-log-buffer' buffer.
-OUTPUT is the buffer containing process standard output.
-ERROR is the buffer containing process error output.
-COMMAND is the command that was executed.
-TREE is the process's working directory.
-EVENT is the event that occurred.
-Returns that event."
-  (unless (and xetla-log-cookie
-               (buffer-live-p (ewoc-buffer xetla-log-cookie)))
-    (with-current-buffer (get-buffer-create xetla-log-buffer)
-      (setq xetla-log-cookie
-            (ewoc-create 'xetla-log-printer))
-      (xetla-log-buffer-mode)))
-  (let ((related-buffer (current-buffer)))
-    (with-current-buffer (ewoc-buffer xetla-log-cookie)
-      (let ((elem (make-xetla-event :output-buffer output
-                                   :error-buffer error
-                                   :related-buffer related-buffer
-                                   :command command
-                                   :tree tree
-                                   :event event
-                                   :time (current-time)))
-            buffer-read-only)
-        (ewoc-enter-last xetla-log-cookie elem)
-        (ewoc-refresh xetla-log-cookie)
-        elem))))
-
-(defun xetla-log-next ()
-  "Move to the next log entry."
-  (interactive)
-  (let ((next (ewoc-next xetla-log-cookie
-                         (ewoc-locate xetla-log-cookie))))
-    (when next (goto-char (ewoc-location next)))))
-
-(defun xetla-log-prev ()
-  "Move to the previous log entry."
-  (interactive)
-  (let ((prev (ewoc-prev xetla-log-cookie
-                         (ewoc-locate xetla-log-cookie))))
-    (when prev (goto-char (ewoc-location prev)))))
-
-(define-derived-mode xetla-log-buffer-mode fundamental-mode "XEtla Log"
-  "Major mode for Xetla's internal log buffer. You can open this buffer
-with `xetla-open-internal-log-buffer'."
-  (toggle-read-only 1))
-
-(define-derived-mode xetla-process-buffer-mode fundamental-mode
-  "XEtla Process"
-  "Major mode for process buffers. Mainly defines \\[bury-buffer]
-to quit the buffer"
-  (toggle-read-only 1))
-
-(defmacro xetla-with-keywords (keywords plist &rest body)
-  "Execute a body of code with keywords bound.
-Each keyword listed in KEYWORDS is bound to its value from PLIST, then
-BODY is evaluated."
-  (flet ((keyword-to-symbol (keyword)
-                            (intern (substring (symbol-name keyword) 1))))
-    (let ((keyword (make-symbol "keyword"))
-          (default (make-symbol "default")))
-      `(let ,(mapcar (lambda (keyword-entry)
-                       (keyword-to-symbol (if (consp keyword-entry)
-                                              (car keyword-entry)
-                                            keyword-entry)))
-                     keywords)
-         (dolist (keyword-entry ',keywords)
-           (let ((,keyword (if (consp keyword-entry)
-                               (car keyword-entry)
-                             keyword-entry))
-                 (,default (if (consp keyword-entry)
-                               (cadr keyword-entry)
-                             nil)))
-             (set (intern (substring (symbol-name ,keyword) 1))
-                  (or (cadr (member ,keyword ,plist))
-                      ,default))))
-         ,@body))))
-(put 'xetla-with-keywords 'lisp-indent-function 1)
-
-(defun xetla-build-xetla-command (list-args)
-  "Build a shell command to run tla with args LIST-ARGS."
-  (mapconcat 'shell-quote-argument
-             (cons xetla-tla-executable
-                   (delq nil list-args))
-             " "))
-
-
-(defcustom xetla-password-prompt-regexp
-  "[Pp]ass\\(word\\|phrase\\).*:\\s *\\'"
-  "*Regexp matching prompts for passwords in the inferior process.
-This is used by `eshell-watch-for-password-prompt'."
-  :type 'regexp
-  :group 'xetla)
-
-(defun xetla-process-filter (proc string)
-  "Filter PROC's STRING.
-Prompt for password with `read-passwd' if the output of PROC matches
-`xetla-password-prompt-regexp'."
-  (with-current-buffer (process-buffer proc)
-    (insert (replace-regexp-in-string "\015" "\n" string))
-    (when (string-match xetla-password-prompt-regexp string)
-      (string-match "^\\([^\n]+\\)\n*\\'" string)
-      (let ((passwd (read-passwd (match-string 1 string))))
-        (process-send-string proc (concat passwd "\n"))))))
-
-(defun xetla-run-tla-async (arguments &rest keys)
-  "Run tla asynchronously.
-ARGUMENTS is a list of arguments.  nil values in this list are removed.
-KEYS is a list of keywords and values.  Possible keywords are:
-
- :finished ....... Function run when the process finishes.  If none
-                   specified, `xetla-default-finish-function' is run.
-
- :killed ......... Function run when the process is killed.  If none
-                   specified, `xetla-default-killed-function' is run.
-
- :error .......... Function run when the process exits with a non 0
-                   status.  If none specified,
-                   `xetla-default-error-function' is run.
-
-All these functions take 4 arguments : output, error, status, and
-arguments.
-
-   - \"output\" is the output buffer
-   - \"error\" is the buffer where standard error is redirected
-   - \"status\" is the numeric exit-status or the signal number
-   - \"arguments\" is the list of arguments, as a list of strings,
-              like '(\"changes\" \"-diffs\")
-
-   `xetla-null-handler' can be used here if there's nothing to do.
-
- :output-buffer .. Buffer where the output of the process should be
-                   redirected.  If none specified, a new one is
-                   created, and will be entered in
-                   `xetla-dead-process-buffer-queue' to be killed
-                   later.
-
- :error-buffer ... Buffer where the standard error of the process
-                   should be redirected.
-
- :related-buffer . Defaults to `current-buffer'.  This is the buffer
-                   where the result of the process will be used.  If
-                   this buffer is killed before the end of the
-                   execution, the user is prompted if he wants to kill
-                   the process.
-
-Example:
-  (xetla-run-tla-async `(\"changes\" ,(unless arg \"-diffs\"))
-                      :finished
-                      (lambda (output error status arguments)
-                        (message \"No changes in this working copy\"))
-                      :error
-                      (lambda (output error status arguments)
-                        (xetla-show-changes-buffer output)))"
-  (xetla-with-keywords
-      (:finished :killed :error :output-buffer :error-buffer :related-buffer)
-    keys
-    (let* ((output-buf (or (and output-buffer (get-buffer-create output-buffer))
-                           (xetla-new-process-buffer nil)))
-           (error-buf  (or (and error-buffer (get-buffer-create error-buffer))
-                           (xetla-new-error-buffer nil)))
-           (error-file (xetla-make-temp-name "arch-errors"))
-           (command (xetla-build-xetla-command arguments))
-           ;; Make the `default-directory' unique. The trailing slash
-           ;; may be necessary in some cases.
-           (default-directory (xetla-uniquify-file-name default-directory))
-           (process (start-process
-                     xetla-tla-executable output-buf
-                     "sh" "-c"
-                     (format "%s 2> %s"
-                             command error-file)))
-           (process-event
-            (list process
-                  (xetla-log-event output-buf
-                                  error-buf
-                                  command
-                                  default-directory "started"))))
-      (with-current-buffer (or related-buffer (current-buffer))
-        (message "running process `%s' in `%s'" command default-directory)
-        (add-to-list 'xetla-process-running process-event)
-        (set-process-filter process 'xetla-process-filter)
-        (set-process-sentinel
-         process
-         `(lambda (process event)
-            (let ((default-directory ,default-directory))
-              (xetla-log-event ,output-buf ,error-buf ,command
-                              ,default-directory
-                              (xetla-strip-final-newline event))
-              (setq xetla-process-running
-                    (delq ',process-event xetla-process-running))
-              (when (file-exists-p ,error-file)
-                (with-current-buffer ,error-buf
-                  (insert-file-contents ,error-file))
-                (delete-file ,error-file))
-              (let ((state (process-status process))
-                    (status (process-exit-status process)))
-                (unwind-protect
-                    (cond ((and (eq state 'exit) (= status 0))
-                           (funcall (or (quote ,finished)
-                                        'xetla-default-finish-function)
-                                    ,output-buf ,error-buf
-                                    status (quote ,arguments)))
-                          ((eq state 'signal)
-                           (funcall (or (quote ,killed)
-                                        'xetla-default-killed-function)
-                                    ,output-buf ,error-buf status
-                                    (quote ,arguments)))
-                          ((eq state 'exit) ;; status != 0
-                           (funcall (or (quote ,error)
-                                        'xetla-default-error-function)
-                                    ,output-buf ,error-buf status
-                                    (quote ,arguments)))))
-                ;; Schedule any buffers we created for killing
-                (unless ,output-buffer (xetla-kill-process-buffer ,output-buf))
-                (unless ,error-buffer (xetla-kill-process-buffer ,error-buf))))))
-        process))))
-
-(defun xetla-run-tla-sync (arguments &rest keys)
-  "Run tla synchronously.
-See `xetla-run-tla-async' for details on possible ARGUMENTS and KEYS."
-  (xetla-with-keywords
-      (:finished :killed :error :output-buffer :error-buffer :related-buffer)
-    keys
-    (let ((output-buf (or (and output-buffer (get-buffer-create output-buffer))
-                          (xetla-new-process-buffer t)))
-          (error-buf  (or (and error-buffer (get-buffer-create error-buffer))
-                          (xetla-new-error-buffer t)))
-          (command (xetla-build-xetla-command arguments))
-          (error-file (xetla-make-temp-name "arch-errors"))
-          ;; Make the `default-directory' unique. The trailing slash
-          ;; may be necessary in some cases.
-          (default-directory (xetla-uniquify-file-name default-directory)))
-      (with-current-buffer (or related-buffer (current-buffer))
-        (xetla-log-event output-buf error-buf command default-directory "started")
-        (let ((status (call-process "sh" nil output-buf nil "-c"
-                                    (format "%s 2> %s"
-                                            command
-                                            error-file))))
-          (when (file-exists-p error-file)
-            (with-current-buffer error-buf
-              (insert-file-contents error-file))
-            (delete-file error-file))
-          (unwind-protect
-              (cond ((stringp status)
-                     (when (string= status "Terminated")
-                       (funcall (or killed 'xetla-default-killed-function)
-                                output-buf error-buf status arguments)))
-                    ((numberp status)
-                     (if (zerop status)
-                         (funcall (or finished 'xetla-default-finish-function)
-                                  output-buf error-buf status arguments)
-                       (funcall (or error 'xetla-default-error-function)
-                                output-buf error-buf status arguments)))
-                    (t (message "Unknown status - %s" status)))
-            ;; Schedule any buffers we created for killing
-            (unless output-buffer (xetla-kill-process-buffer output-buf))
-            (unless error-buffer (xetla-kill-process-buffer error-buf))))))))
-
-(defun xetla-kill-process-maybe (buffer)
-  "Prompts and possibly kill process whose related buffer is BUFFER."
-  (let ((process-list nil))
-    (dolist (process-buffer xetla-process-running)
-      (when (eq (xetla-event-related-buffer (cadr process-buffer))
-                buffer)
-        (add-to-list 'process-list (car process-buffer))))
-    (let ((l (length process-list)))
-      (when (and process-list
-                 (y-or-n-p (format "%s process%s running in buffer %s.  Kill %s? "
-                                   l (if (> l 1) "es" "")
-                                   (buffer-name buffer)
-                                   (if (> l 1) "Them" "it"))))
-        (dolist (process process-list)
-          (setq xetla-default-killed-function-noerror
-                (1+ xetla-default-killed-function-noerror))
-          (if (eq (process-status process) 'run)
-              (kill-process process)))))))
-
-;;;###autoload
-(add-to-list 'minor-mode-alist
-             '(xetla-process-running
-               (:eval (if (equal (length xetla-process-running) 1)
-                          " tla running"
-                        (concat " tla running("
-                                (int-to-string (length xetla-process-running))
-                                ")")))))
-
-(eval-when-compile
-  (autoload 'xetla-flash-line "xetla"))
-
-(defun xetla-open-internal-log-buffer ()
-  "Switch to the XEtla's internal log buffer.
-This buffer contains a list of all the tla commands previously executed.
-The buffer uses the mode `xetla-log-buffer-mode'"
-  (interactive)
-  (let ((buffer-name (buffer-name)))
-    (xetla-switch-to-buffer xetla-log-buffer)
-    (goto-char (point-max))
-    (when (re-search-backward (concat " Buffer: "
-                                      (regexp-quote buffer-name)
-                                      "$")
-                              nil t)
-      (xetla-flash-line))))
-
-(defun xetla-clear-log-buffer ()
-  "Kill the log buffer."
-  (when (bufferp (get-buffer xetla-log-buffer))
-    (kill-buffer xetla-log-buffer)))
-
-(defun xetla-buffer-content (buffer)
-  "Return the content of BUFFER as a string.
-Strips the final newline if there is one."
-  (with-current-buffer buffer
-    (buffer-substring-no-properties
-     (point-min)
-     (progn (goto-char (point-max))
-            (if (eq (char-before) ?\n)
-                (- (point) 1)
-              (point))))))
-
-(defun xetla-get-process-output ()
-  "Return the content of the last process buffer.
-Strips the final newline if there is one."
-  (xetla-buffer-content xetla-last-process-buffer))
-
-(defun xetla-get-error-output ()
-  "Return the content of the last error buffer.
-Strips the final newline if there is one."
-  (xetla-buffer-content xetla-last-error-buffer))
-
-(defvar xetla-switched-buffer nil)
-(defvar xetla-switched-from-buffer nil)
-
-(defun xetla-switch-to-buffer (buffer)
-  "Switch to BUFFER using the user's preferred method.
-See `xetla-switch-to-buffer-mode' for possible settings."
-  (setq xetla-switched-from-buffer (current-buffer))
-  (cond ((eq xetla-switch-to-buffer-mode 'pop-to-buffer)
-         (pop-to-buffer buffer))
-        ((eq xetla-switch-to-buffer-mode 'single-window)
-         (switch-to-buffer buffer))
-        ((eq xetla-switch-to-buffer-mode 'show-in-other-window)
-         (pop-to-buffer buffer)
-         (setq xetla-switched-buffer (current-buffer))
-         (pop-to-buffer xetla-switched-from-buffer))
-        ;; TODO : dedicated frame.
-        (t
-         (error "Switch mode %s not implemented" xetla-switch-to-buffer-mode))))
-
-(defun xetla-post-switch-to-buffer ()
-  "Executed when showing a changeset.
-
-If `xetla-switched-buffer' is non-nil, show this buffer, but keep
-cursor position in previous buffer."
-  (when xetla-switched-buffer
-    (pop-to-buffer xetla-switched-buffer)
-    (setq xetla-switched-buffer nil)
-    (goto-char (point-min))
-    (pop-to-buffer xetla-switched-from-buffer)))
-
-
-(defun xetla-show-process-buffer ()
-  "Show the process buffer of the last started xetla command."
-  (interactive)
-  (xetla-switch-to-buffer xetla-last-process-buffer)
-  (unless (member xetla-last-process-buffer
-                  (mapcar (lambda (p)
-                            (process-buffer (car p)))
-                          xetla-process-running))
-    (xetla-process-buffer-mode)))
-
-(defun xetla-show-last-process-buffer (&optional type mode path)
-  "Switch to the last used process buffer in a new buffer of TYPE.
-If MODE is specified, it is a function that will be run in the
-new buffer.  Otherwise, the buffer will remain in fundamental mode, in
-read-only.
-
-If PATH is specified, it will be passed to `xetla-get-buffer-create'."
-  (when (buffer-live-p xetla-last-process-buffer)
-    (let ((content (with-current-buffer xetla-last-process-buffer
-                     (buffer-string))))
-      (xetla-switch-to-buffer (xetla-get-buffer-create
-                             (or type 'generic) path))
-      (let ((inhibit-read-only t))
-        (erase-buffer)
-        (insert content)))
-    (if mode
-        (funcall mode)
-      (xetla-process-buffer-mode))))
-
-(defun xetla-show-error-buffer (buffer &optional type mode)
-  "Pops up the error buffer.
-Works like `xetla-show-last-process-buffer', but displays BUFFER, of type
-'errors if TYPE is not specified.
-If MODE is specified, the buffer will use that mode."
-  (when (buffer-live-p buffer)
-    (let ((content (with-current-buffer buffer
-                     (buffer-string))))
-      (xetla-switch-to-buffer (xetla-get-buffer-create
-                             (or type 'errors)))
-      (let ((inhibit-read-only t))
-        (erase-buffer)
-        (insert content)))
-    (if mode
-        (funcall mode)
-      (xetla-process-buffer-mode))))
-
-;; --------------------------------------
-;; Arch name manipulators
-;; ======================
-;;
-;; Normally in XEtla, a name, a revision specifier is represented as a
-;; list like:
-;;
-;;    ("archive" "category" "branch" "version" "revision")
-;;
-;; Nil is permitted as the element. However the list length must be 5
-;; like:
-;;
-;;    (nil "category" "branch" nil nil)
-;;
-;; In other hand, in tla command, the name must be represented as a
-;; string like:
-;;
-;;    "archive/category-branch-version-revision"
-;;
-;; So we have to convert a name in different representation in many
-;; cases.
-;;
-;; * xetla-name-split-* is for converting from a string representation
-;;   to a list representation. There are semi-qualified version and
-;;   fully-qualified version.
-;;
-;;   - semi-qualified: "category-branch-version-revision".
-;;     `xetla-name-split-semi-qualified' expects a name string without
-;;     archive component. The archive field of returned list is filled
-;;     with nil.
-;;
-;;   - fully-qualified: "archive/category-branch-version-revision".
-;;     `xetla-name-split' expects a name string including archive.
-;;
-;; * xetla-name-construct-* is for converting from a list
-;;   representation to a string representation. The functions accept
-;;   arguments two ways.
-;;
-;;   - normal passing: (xetla-name-construct "archive" "category"...)
-;;   - packed passing: (xetla-name-construct '("archive" "category"...))
-;;
-;;   There are semi-qualified version and fully-qualified version.
-;;   - semi-qualified: `xetla-name-construct-semi-qualified' connects
-;;     arguments with "-".
-;;   - fully-qualified: `xetla-name-construct" connects the first argument
-;;     and the rest with "/". About the rest,
-;;     `xetla-name-construct-semi-qualified' is applied.
-;;
-;; * xetla-name-{archive|category|branch|version|revision} is for
-;;   extracting a component from a name. The both representations are
-;;   acceptable.
-;;
-;; * xetla-name-mask is for replace a component in the name list with nil.
-;;
-;; --------------------------------------
-
-;;
-;; String representation -> List representation
-;;
-(defun xetla-name-split-semi-qualified (name &optional archive)
-  "Split \"--\" connected string NAME into 5 elements list.
-The first element is always nil if ARCHIVE is not given.
-If ARCHIVE is given, use it as the first.
-Even if the elements in name are less than 5, the list is filled by nil
-to make the length 5.
-
-  ELISP> (xetla-name-split-semi-qualified \"branch--category--version--revision\"
-                                        \"archive\")
-  (\"archive\" \"branch\" \"category\" \"version\" \"revision\")
-
-  ELISP> (xetla-name-split-semi-qualified
-            \"branch--category--version--revision\")
-  (nil \"branch\" \"category\" \"version\" \"revision\")
-
-  ELISP> (xetla-name-split-semi-qualified \"branch--category--version\")
-  (nil \"branch\" \"category\" \"version\" nil)
-
-  ELISP> (xetla-name-split-semi-qualified
-            \"branch--category--version\" \"archive\")
-  (\"archive\" \"branch\" \"category\" \"version\" nil)
-
-  ELISP> (xetla-name-split-semi-qualified \"branch--category\" \"archive\")
-  (\"archive\" \"branch\" \"category\" nil nil)
-
-  ELISP> (xetla-name-split-semi-qualified \"branch--category\"nil)
-  (nil \"branch\" \"category\" nil nil)
-
-  ELISP> (xetla-name-split-semi-qualified \"branch--category--\" nil)
-  (nil \"branch\" \"category\" \"\" nil)"
-  (let ((list (xetla-name-split-semi-qualified-internal name)))
-    (while (> 4 (length list))
-      (setq list (cons nil list)))
-    (let ((result (cons archive (nreverse list))))
-      (when (xetla-is-version-string (caddr result))
-        (setq result (list (car result)
-                           (cadr result)
-                           ""
-                           (caddr result)
-                           (cadddr result))))
-      result)))
-
-(defun xetla-is-version-string (string)
-  "Non-nil if STRING is a candidate for a version name.
-That is, if it contains only digits and dots.
-The regexp here is less strict than the one of xetla, but must verify
-\(xetla-is-version-string string) => string can't be a branch name."
-  (and string (string-match "^[0-9\.]+$" string)))
-
-(defun xetla-name-split-semi-qualified-internal (name)
-  "Helper function for `xetla-name-split-semi-qualified'.
-Splits a semi-qualified NAME."
-  (if (string-match "^\\(.+\\)--\\(\\([^-]\\|-[^-]\\)*\\)" name)
-      (cons (match-string 2 name)
-            (xetla-name-split-semi-qualified-internal
-             (match-string 1 name)))
-    (cons name nil)))
-
-(defun xetla-name-split (name)
-  "Parse a fully qualified revision NAME, but possibly incomplete.
-email@address.com--arch/cat--branch--ver ->
-  (\"email@address.com--arch\" \"cat\" \"branch\" \"ver\" nil)
-email@address.com--arch/cat ->
-  (\"email@address.com--arch\" \"cat\" nil nil nil)
-email@address.com--arch ->
-  (\"email@address.com-arch\" nil nil nil nil)"
-  (if (string-match "\\(.*\\)/\\(.*\\)" name)
-      (xetla-name-split-semi-qualified (match-string 2 name) (match-string 1 name))
-    (if (string= name "")
-        (list nil nil nil nil nil)
-      (list name nil nil nil nil))))
-
-
-;;
-;; List representation -> string
-;;
-(defun xetla-name-construct-semi-qualified (&rest comp)
-  "Concatenate COMP with \"-\".
-This function can accept strings or a list which contains strings.
-
-    ELISP> (xetla-name-construct-semi-qualified \"a\" \"b\" \"c\")
-    \"a--b--c\"
-    ELISP> (xetla-name-construct-semi-qualified (list \"a\" \"b\" \"c\"))
-    \"a--b--c\""
-  (if (consp (car comp)) (setq comp (car comp)))
-  (if (string= (cadr comp) "")
-      ;; Unnamed branch.
-      (concat (car comp) "--"
-              (mapconcat 'identity (remove nil (cddr comp)) "--"))
-    (mapconcat 'identity (remove nil comp) "--")))
-
-(defun xetla-name-construct (archive &optional
-                                    category
-                                    branch
-                                    version
-                                    revision)
-  "Create the revision name ARCHIVE/CATEGORY-BRANCH-VERSION-REVISION.
-The arguments may be nil. If ARCHIVE is a revision name list like
- (archive category branch version revision), the list element is mapped
-to arguments before creating the fully qualified revision name.
-
-If the branch name is the empty string and the version is defined,
-then, we have an unnamed branch. The full name is
-archive/category-version."
-  (when (consp archive)
-    (setq category (xetla-name-category archive)
-          branch   (xetla-name-branch archive)
-          version  (xetla-name-version archive)
-          revision (xetla-name-revision archive)
-          ;; archive must be last
-          archive  (xetla-name-archive archive)))
-  (let ((semi (xetla-name-construct-semi-qualified
-               category branch version revision)))
-    (concat
-     (and archive (not (string= archive ""))
-          (concat archive (when category "/")))
-     semi)))
-
-;;
-;; Get a component from a list or string.
-;;
-(defun xetla-name-archive (target)
-  "Get archive component from TARGET.
-Both representation of TARGET, a string and a list is acceptable."
-  (when (stringp target)
-    (setq target (xetla-name-split target)))
-  (car target))
-
-(defun xetla-name-category (target)
-  "Get category component from TARGET.
-Both representation of TARGET, a string and a list is acceptable."
-  (when (stringp target)
-    (setq target (xetla-name-split target)))
-  (cadr target))
-
-(defun xetla-name-branch (target)
-  "Get branch component from a TARGET.
-Both representation of TARGET, a string and a list is acceptable."
-  (when (stringp target)
-    (setq target (xetla-name-split target)))
-  (caddr target))
-
-(defun xetla-name-version (target)
-  "Get version component from TARGET.
-Both representation of TARGET, a string and a list is acceptable."
-  (when (stringp target)
-    (setq target (xetla-name-split target)))
-  (cadddr target))
-
-(defun xetla-name-revision (target)
-  "Get revision component from TARGET.
-Both representation of TARGET, a string and a list is acceptable."
-  (when (stringp target)
-    (setq target (xetla-name-split target)))
-  (cadddr (cdr target)))
-
-;;
-;; Utilities
-;; Mask a specified component in the name.
-;;
-(defun xetla-name-mask (original do-construct-p
-                                &optional
-                                archive-mask
-                                category-mask
-                                branch-mask
-                                version-mask
-                                revision-mask)
-  "Mask ORIGINAL, a xetla revision name by masks; and return the masked value.
-
-If DO-CONSTRUCT-P is given, the result is converted to a string by
-`xetla-name-construct'.
-
-ARCHIVE-MASK, CATEGORY-MASK, BRANCH-MASK, VERSION-MASK and REVISION-MASK should
-be either nil or t, and indicate whether that field should be masked.
-
-If a mask value is nil, the associated element in ORIGINAL is set to nil.
-Else If a mask value is a string, the associated element in ORIGINAL is set
-to the string.
-Else the associated element in ORIGINAL is not changed.
-
-Examples:
- ELISP> (xetla-name-mask '(\"a\" \"c\" \"b\" \"v\" \"r\") nil t t t t nil)
- (\"a\" \"c\" \"b\" \"v\" nil)
-
- ELISP> (xetla-name-mask '(\"a\" \"c\" \"b\" \"v\" \"r\") nil t t t nil nil)
- (\"a\" \"c\" \"b\" nil nil)
-
- ELISP> (xetla-name-mask '(\"a\" \"c\" \"b\" \"v\" \"r\") t t t t nil nil)
- \"a/c-b\"
- ELISP> (xetla-name-mask '(\"a\" \"c\" \"b\" \"v\" \"r\") t nil nil nil nil t)
- \"r\"
- ELISP> (xetla-name-mask '(\"a\" \"c\" \"b\" \"v\" \"r\") t nil nil nil t t)
- \"v-r\"
- ELISP>"
-  (when (consp original)
-    (let ((masked (list
-                   (if archive-mask
-                       (if (stringp archive-mask)
-                           archive-mask
-                         (xetla-name-archive original)))
-                   (if category-mask
-                       (if (stringp category-mask)
-                           category-mask
-                         (xetla-name-category original)))
-                   (if branch-mask
-                       (if (stringp branch-mask)
-                           branch-mask
-                         (xetla-name-branch original)))
-                   (if version-mask
-                       (if (stringp version-mask)
-                           version-mask
-                         (xetla-name-version original)))
-                   (if revision-mask
-                       (if (stringp revision-mask)
-                           revision-mask
-                         (xetla-name-revision original))))))
-      (if do-construct-p
-          (xetla-name-construct masked)
-        masked))))
-
-(defun xetla-name-match (target mask)
-"Compare the fully qualified revision list TARGET with a MASK.
-Each parameter is a list.  The elements of the both lists are compared
-via a regexp match.  When the mask part of a component is nil, this
-comparision is skipped.
-Here are some examples:
-\(xetla-name-match
- '(\"xsteve@nit.at-public\" \"xetla\" \"main\" \"0.1\" \"patch-116\")
- '(nil \"xt.*\" \"main\" nil nil)) => t
-\(xetla-name-match
- '(\"xsteve@nit.at-public\" \"xetla\" \"main\" \"0.1\" \"patch-116\")
- '(nil \"xt.*\" \"devel\" nil nil)) => nil"  ;"
-  (let ((tl target)
-        (ml mask)
-        (t-part)
-        (m-part)
-        (matching t))
-    (while tl
-      (setq t-part (car tl))
-      (setq m-part (car ml))
-      (when m-part
-        (setq matching (string-match m-part t-part)))
-      (if matching
-          (progn
-            (setq tl (cdr tl))
-            (setq ml (cdr ml)))
-        (setq tl nil)))
-    (if matching t nil)))
-
-
-(defun xetla-name-match-from-list (target match-list)
-  "Match TARGET against a list of possible matches.
-Every entry of MATCH-LIST is a list that contains a
-match element and a possible result.
-The target is matched against the elements in the match-list.
-If a match is found return the corresponding result,
-otherwise return nil."
-  (let ((ml match-list)
-        (match)
-        (data)
-        (result))
-    (while (and (not result) ml)
-      (setq match (caar ml))
-      (setq data (cadar ml))
-      (message "match: %s, data: %s" match data)
-      (setq result (when (xetla-name-match target match) data))
-      (setq ml (cdr ml)))
-    result))
-
-;; TODO: Use xetla-archive-tree.
-(defun xetla-version-head (archive category branch version)
-  "Return the newest revision for ARCHIVE/CATEGORY-BRANCH-VERSION."
-  (xetla-run-tla-sync (list "revisions"
-                           (xetla-name-construct
-                            archive
-                            category
-                            branch
-                            version))
-                     :finished (lambda (output error status arguments)
-                                 (with-current-buffer output
-                                   (goto-char (point-max))
-                                   (re-search-backward "^.")
-                                   (buffer-substring-no-properties
-                                    (point) (point-at-eol))))))
-
-;; --------------------------------------
-;; Archive tree manipulators
-;; --------------------------------------
-
-(defvar xetla-archive-tree nil
-  "Arch archive/category/branch/version/revision are stored in assoc list:
-
- ((\"xsteve@nit.at-public\" \"http://arch.xsteve.at/2004\")
- [...]
-  (\"mbp@sourcefrog.net-2004\"
-   \"http://sourcefrog.net/arch/mbp@sourcefrog.net-2004\"
-   (\"xetla\")
-   (\"tilly\")
- [...]
-   (\"dupes\"
-    (\"mainline\"
-     (\"0.1\")))
- [...]
-   (\"archzoom\"))
-  (\"mark@dishevelled.net-2003-mst\"
-   \"http://members.iinet.net.au/~mtriggs/arch/\")
-  (\"lord@emf.net-2004\"
-   \"http://regexps.srparish.net/{archives}/lord@emf.net-2004\")
- [...]
-  (\"Matthieu.Moy@imag.fr-public\"
-   \"http://www-verimag.imag.fr/webdav/moy/public\"
-   (\"xetla\"
-    (\"main\"
-     (\"0.1\"
-      (\"patch-228\"
-       \"Merged from Robert (patch8-9), Milan (patch21-22), Stefan (patch5-8)\"
-       \"Matthieu Moy <Matthieu.Moy@imag.fr>\"
-       \"2004-06-03 20:13:11 GMT\")
-      (\"patch-227\"
-       \"Fix default-directory in xetla-run-tla-sync, fix in xetla-changes-ediff\"
-       \"Matthieu Moy <Matthieu.Moy@imag.fr>\"
-       \"2004-06-03 15:26:15 GMT\")
- [...]
-      (\"patch-1\"
-       \"typo\"
-       \"Matthieu Moy <Matthieu.Moy@imag.fr>\"
-       \"2004-04-07 22:57:00 GMT\")
-      (\"base-0\"
-       \"tag of xsteve@nit.at-public/xetla-main-0.1-patch-5\"
-       \"Matthieu Moy <Matthieu.Moy@imag.fr>\" \"2004-04-07 22:52:39 GMT\")))))
- [...]
-   )
-
-This list is initially empty, and is built/rebuilt on demand.")
-
-;; Utilities
-(defun xetla-archive-tree-setcdr (parent value &optional rest)
-  "In PARENT, update VALUE.
-REST are the items that are already present."
-  (let* ((current (cdr parent))
-         (list-details (assoc value current)))
-    (if (or (null current) (null list-details))
-        ;; rest is '("summary" "creator" "date") when value is "patch-N"
-        (setcdr parent (cons (cons value rest) current))
-      (if (and list-details rest)
-          ;; Field already there. update details.
-          (setcdr list-details rest)))))
-
-(defun xetla-archive-tree-setcddr (parent value)
-  "In PARENT, update VALUE."
-  (let ((current (cddr parent)))
-    (if (or (null current) (null (assoc value current)))
-        (setcdr (cdr parent) (cons (cons value nil) current)))))
-
-;; Archive
-(defun xetla-archive-tree-add-archive (archive location &optional old)
-  "Add ARCHIVE  at LOCATION to the archive tree.
-If OLD is provided, it is an old archive tree from which some
-information can be found (this is useful to keep the category/branch/version
-info for existing archives)."
-  (if (xetla-archive-tree-get-archive archive)
-      (let* ((a (xetla-archive-tree-get-archive archive))
-             (val (cdr a))
-             (oldlocation (car val))
-             (category (cdr val)))
-        (setcdr a (cons (or location oldlocation) category)))
-    (let ((oldinfo (xetla-archive-tree-get-archive archive old))
-          (newinfo (list archive location)))
-      (when oldinfo
-        (setcdr (cdr newinfo) (cddr oldinfo))) ;; list of versions.
-      (setq xetla-archive-tree (cons newinfo
-                                    xetla-archive-tree)))))
-
-(defun xetla-archive-tree-get-archive (archive &optional archive-tree)
-  "Get the value of ARCHIVE from ARCHIVE-TREE.
-If ARCHIVE-TREE is not given, `xetla-archive-tree' is used."
-  (assoc archive (or archive-tree xetla-archive-tree)))
-
-;; Category
-(defun xetla-archive-tree-add-category (archive category)
-  "Add a new category to ARCHIVE named CATEGORY."
-  (xetla-archive-tree-add-archive archive nil)
-  (xetla-archive-tree-setcddr
-   (xetla-archive-tree-get-archive archive)
-   category))
-
-(defun xetla-archive-tree-get-category (archive category)
-  "From ARCHIVE, get CATEGORY."
-  (assoc category (cdr (cdr (xetla-archive-tree-get-archive archive)))))
-
-;; Branch
-(defun xetla-archive-tree-add-branch (archive category branch)
-  "Add a new branch to ARCHIVE's CATEGORY named BRANCH."
-  (xetla-archive-tree-add-category archive category)
-  (xetla-archive-tree-setcdr
-   (xetla-archive-tree-get-category archive category)
-   branch))
-
-(defun xetla-archive-tree-get-branch (archive category branch)
-  "Get a branch from ARCHIVE's CATEGORY named BRANCH."
-  (assoc branch (cdr (xetla-archive-tree-get-category
-                      archive category))))
-
-;; Version
-(defun xetla-archive-tree-add-version (archive category branch version)
-  "Add a new version to ARCHIVE CATEGORY BRANCH named VERSION."
-  (xetla-archive-tree-add-branch archive category branch)
-  (xetla-archive-tree-setcdr
-   (xetla-archive-tree-get-branch archive category branch )
-   version))
-
-(defun xetla-archive-tree-get-version (archive category branch version)
-  "Get a version from ARCHIVE CATEGORY BRANCH named VERSION."
-  (assoc version (cdr (xetla-archive-tree-get-branch
-                       archive category branch))))
-
-;; Revision
-(defun xetla-archive-tree-add-revision (archive category branch version revision
-                                               &optional summary creator date)
-  "Add a new revision to ARCHIVE CATEGORY BRANCH VERSION named REVISION."
-  (xetla-archive-tree-add-version archive category branch version)
-  (xetla-archive-tree-setcdr
-   (xetla-archive-tree-get-version archive category branch version)
-   revision (list summary creator date)))
-
-(defun xetla-archive-tree-get-revision (archive category branch version revision)
-  "Get a revision from ARCHIVE CATEGORY BRANCH VERSION named REVISION."
-  (assoc revision (cdr (xetla-archive-tree-get-version
-                        archive category branch version))))
-
-;; Archive tree builders
-(defun xetla-archive-tree-build (basename &optional use-cache ignore-error)
-  "Generic version of xetla-archive-tree-build-*.
-BASENAME is used as a base for this tree.
-If USE-CACHE is non-nil, load details from the cache where possible.
-If IGNORE-ERROR is non-nil, don't throw errors."
-  (when (stringp basename)
-    (setq basename (xetla-name-split basename)))
-  (let ((archive (xetla-name-archive basename))
-        (category (xetla-name-category basename))
-        (branch (xetla-name-branch basename))
-        (version (xetla-name-version basename)))
-  (cond
-   (version
-    (xetla-archive-tree-build-revisions archive
-                                       category
-                                       branch
-                                       version
-                                       use-cache
-                                       ignore-error))
-   (branch
-    (xetla-archive-tree-build-versions archive
-                                      category
-                                      branch
-                                      use-cache
-                                      ignore-error))
-   (category
-    (xetla-archive-tree-build-branches archive
-                                      category
-                                      use-cache
-                                      ignore-error))
-   (archive
-    (xetla-archive-tree-build-categories archive
-                                        use-cache
-                                        ignore-error))
-   (t
-    (xetla-archive-tree-build-archives use-cache
-                                      ignore-error)))))
-
-(defun xetla-archive-tree-build-archives (&optional use-cache ignore-error)
-  "Builds the list of archives.
-If USE-CACHE is non-nil, load details from the cache where possible.
-If IGNORE-ERROR is non-nil, don't throw errors."
-  (when (or (not use-cache)
-            (not xetla-archive-tree))
-    (xetla-run-tla-sync '("archives")
-                       :finished 'xetla-null-handler
-                       :error
-                       (if ignore-error
-                           'xetla-null-handler
-                         'xetla-default-error-function))
-    (let ((old-archive-tree xetla-archive-tree))
-      (setq xetla-archive-tree nil)
-      (save-excursion
-        (let ((archive-name)
-              (archive-location))
-          (set-buffer xetla-last-process-buffer)
-          (goto-char (point-min))
-          (while (> (point-at-eol) (point-at-bol))
-            (setq archive-name (buffer-substring-no-properties
-                                (point-at-bol)
-                                (point-at-eol)))
-            (beginning-of-line-text 2)
-            (setq archive-location (buffer-substring-no-properties
-                                    (point) (point-at-eol)))
-            (forward-line 1)
-            (xetla-archive-tree-add-archive archive-name
-                                           archive-location
-                                           old-archive-tree)))))))
-
-(defun xetla-archive-tree-build-categories (archive &optional
-                                                   use-cache
-                                                   ignore-error)
-  "Build the list of categories for ARCHIVE in `xetla-archive-tree'.
-If USE-CACHE is non-nil, load details from the cache where possible.
-If IGNORE-ERROR is non-nil, don't throw errors."
-  (when (or (not use-cache)
-            (not (cddr (xetla-archive-tree-get-archive archive))))
-    (let ((basename archive))
-      (message "building categories for `%s'..." basename)
-      (xetla-run-tla-sync (list "categories" "-A" basename)
-                         :finished 'xetla-null-handler
-                         :error
-                         (if ignore-error
-                             'xetla-null-handler
-                           'xetla-default-error-function))
-      (message "building categories for `%s'...done" basename)
-      (sit-for 0)
-      (message nil))
-    (with-current-buffer xetla-last-process-buffer
-      (let (category)
-        (goto-char (point-min))
-        (while (> (point-at-eol) (point-at-bol))
-          (setq category (buffer-substring-no-properties
-                          (point-at-bol)
-                          (point-at-eol)))
-          (forward-line 1)
-          (xetla-archive-tree-add-category archive category)
-          )))))
-
-(defun xetla-archive-tree-build-branches (archive category
-                                                 &optional
-                                                 use-cache
-                                                 ignore-error)
-  "Build the list of branches for ARCHIVE/CATEGORY in `xetla-archive-tree'.
-If USE-CACHE is non-nil, load details from the cache where possible.
-If IGNORE-ERROR is non-nil, don't throw errors."
-  (when (or (not use-cache)
-            (not (cdr (xetla-archive-tree-get-category archive category))))
-    (let ((basename (xetla-name-construct archive category)))
-      (message "building branches for `%s'..." basename)
-      (xetla-run-tla-sync (list "branches" basename)
-                         :finished 'xetla-null-handler
-                         :error
-                         (if ignore-error
-                             'xetla-null-handler
-                           'xetla-default-error-function))
-      (message "building branches for `%s'...done" basename)
-      (sit-for 0)
-      (message nil))
-    (with-current-buffer xetla-last-process-buffer
-      (let (branch)
-        (goto-char (point-min))
-        (while (> (point-at-eol) (point-at-bol))
-          (setq branch (buffer-substring-no-properties
-                        (point-at-bol)
-                        (point-at-eol)))
-          (xetla-archive-tree-add-branch
-           archive
-           category
-           (if (looking-at ".*-")
-               (xetla-name-branch (xetla-name-split-semi-qualified
-                                  branch))
-             ;; unnamed branch
-             ""))
-          (forward-line 1))))))
-
-(defun xetla-archive-tree-build-versions (archive category branch
-                                                 &optional
-                                                 use-cache
-                                                 ignore-error)
-  "Build the version list in ARCHIVE/CATEGORY-BRANCH in `xetla-archive-tree'.
-If USE-CACHE is non-nil, load details from the cache where possible.
-If IGNORE-ERROR is non-nil, don't throw errors."
-  (when (or (not use-cache)
-            (not (cdr (xetla-archive-tree-get-branch archive category
-                                                    branch))))
-    (let ((basename (xetla-name-construct archive category branch)))
-      (message "building versions for `%s'..." basename)
-      (xetla-run-tla-sync (list "versions" basename)
-                       :finished 'xetla-null-handler
-                       :error
-                       (if ignore-error
-                           'xetla-null-handler
-                         'xetla-default-error-function))
-      (message "building versions for `%s'...done" basename)
-      (sit-for 0)
-      (message nil))
-    (with-current-buffer xetla-last-process-buffer
-      (let (version)
-        (goto-char (point-min))
-        (while (> (point-at-eol) (point-at-bol))
-          (setq version (buffer-substring-no-properties
-                         (point-at-bol)
-                         (point-at-eol)))
-          (forward-line 1)
-          (xetla-archive-tree-add-version
-           archive
-           category
-           branch
-           (xetla-name-version (xetla-name-split-semi-qualified version))))))))
-
-(defun xetla-archive-tree-build-revisions (archive category branch version
-                                                  &optional
-                                                  use-cache
-                                                  ignore-error)
-
-  "Build the revision list in ARCHIVE/CATEGORY-BRANCH-VERSION.
-Updates `xetla-archive-tree'.
-If USE-CACHE is non-nil, load details from the cache where possible.
-If IGNORE-ERROR is non-nil, don't throw errors."
-  (when (or (not use-cache)
-            (not (cdr (xetla-archive-tree-get-version archive category branch
-                                                     version))))
-    (let ((details (or xetla-revisions-shows-summary
-                       xetla-revisions-shows-date
-                       xetla-revisions-shows-creator))
-          (basename (xetla-name-construct
-                     archive category branch version)))
-      (message "building revisions for `%s'..." basename)
-      (if details
-          (progn
-            (xetla-run-tla-sync (list "revisions"
-                                     "--summary" "--date" "--creator"
-                                     basename)
-                               :finished 'xetla-null-handler
-                               :error (if ignore-error
-                                          'xetla-null-handler
-                                        'xetla-default-error-function)))
-        (progn
-          (xetla-run-tla-sync (list "revisions" basename)
-                             :finished 'xetla-null-handler
-                             :error (if ignore-error
-                                        'xetla-null-handler
-                                      'xetla-default-error-function))))
-      (message "building revisions for `%s'...done" basename)
-      (sit-for 0)
-      (message nil)
-      (with-current-buffer xetla-last-process-buffer
-        (let (revision date creator summary)
-          (goto-char (point-min))
-          (while (> (point-at-eol) (point-at-bol))
-            (setq revision (buffer-substring-no-properties
-                            (point-at-bol)
-                            (point-at-eol)))
-            (forward-line 1)
-            (when details
-              (skip-chars-forward " ")
-              (setq date (buffer-substring-no-properties (point)
-                                                         (point-at-eol)))
-              (forward-line 1)
-              (skip-chars-forward " ")
-              (setq creator (buffer-substring-no-properties (point)
-                                                            (point-at-eol)))
-              (forward-line 1)
-              (skip-chars-forward " ")
-              (setq summary (buffer-substring-no-properties
-                             (point)
-                             (progn (re-search-forward "^\\([^ \t]\\|$\\)")
-                                    (previous-line 1)
-                                    (end-of-line)
-                                    (point))))
-              (forward-line 1))
-            (xetla-archive-tree-add-revision
-             archive
-             category
-             branch
-             version
-             revision
-             summary
-             creator
-             date)))))))
-
-
-(defun xetla-revisions-tree-contains-details
-  (archive category branch version)
-  "Whether VERSION has already been listed full details.
-Details include summary lines, dates, and creator in the archive tree."
-  (let ((vtree (xetla-archive-tree-get-version archive category branch
-                                              version)))
-    (and (cdr vtree) ;; revision list is here
-         (cadr (cadr vtree))))) ;; summary line also
-
-;; --------------------------------------
-;; Revlib tree manipulators
-;; --------------------------------------
-(defvar xetla-revlib-tree nil)
-(defun xetla-revlib-tree-get-archive (archive &optional archive-tree)
-  "Get ARCHIVE from ARCHIVE-TREE.
-If ARCHIVE-TREE is not given, `xetla-revlib-tree' is used instead."
-  (assoc archive (or archive-tree xetla-revlib-tree)))
-
-(defun xetla-revlib-tree-build-archives (&optional use-cache ignore-error)
-  "Build the list of archives in `xetla-revlib-tree'.
-If USE-CACHE is non-nil, load from the cache where possible.
-If IGNORE-ERROR is non-nil, error is not reported.
-Return non-nil if the tree entry for archives are updated."
-  (when (or (not use-cache)
-            (not xetla-revlib-tree))
-    (xetla-run-tla-sync '("library-archives")
-                       :finished 'xetla-null-handler
-                       :error
-                       (if ignore-error
-                           'xetla-null-handler
-                         'xetla-default-error-function))
-    (let ((old-revlib-tree xetla-revlib-tree) )
-      (setq xetla-revlib-tree nil)
-      (save-excursion
-        (let ((archive-name)
-              (tmp xetla-archive-tree)
-              (xetla-archive-tree xetla-revlib-tree)
-              result)
-          (set-buffer xetla-last-process-buffer)
-          (goto-char (point-min))
-          (while (> (point-at-eol) (point-at-bol))
-            (setq result t)
-            (setq archive-name (buffer-substring-no-properties
-                                (point-at-bol)
-                                (point-at-eol)))
-            (forward-line 1)
-            (xetla-archive-tree-add-archive archive-name
-                                           nil
-                                           old-revlib-tree))
-          (setq xetla-revlib-tree xetla-archive-tree
-                xetla-archive-tree tmp)
-          result)))))
-
-(defun xetla-revlib-tree-get-category (archive category)
-  "Get a category from ARCHIVE named CATEGORY."
-  (assoc category (cdr (cdr (xetla-revlib-tree-get-archive archive)))))
-
-(defun xetla-revlib-tree-build-categories (archive &optional
-                                                  use-cache
-                                                  ignore-error)
-  "Builds the list of categories for an ARCHIVE in `xetla-revlib-tree'.
-If USE-CACHE is non-nil, load from the cache where possible.
-If IGNORE-ERROR is non-nil, error is not reported.
-Return non-nil if the tree entry for categories are updated."
-  (when (or (not use-cache)
-            (not (cddr (xetla-revlib-tree-get-archive archive))))
-    (xetla-run-tla-sync (list "library-categories" "-A" archive)
-                       :finished 'xetla-null-handler
-                       :error
-                       (if ignore-error
-                           'xetla-null-handler
-                         'xetla-default-error-function))
-    (with-current-buffer xetla-last-process-buffer
-      (let (category
-            (tmp xetla-archive-tree)
-            (xetla-archive-tree xetla-revlib-tree)
-            result)
-        (goto-char (point-min))
-        (while (> (point-at-eol) (point-at-bol))
-          (setq result t)
-          (setq category (buffer-substring-no-properties
-                          (point-at-bol)
-                          (point-at-eol)))
-          (forward-line 1)
-          (xetla-archive-tree-add-category archive category))
-        (setq xetla-revlib-tree xetla-archive-tree
-              xetla-archive-tree tmp)
-        result))))
-
-(defun xetla-revlib-tree-get-branch (archive category branch)
-  "From ARCHIVE/CATEGORY, get BRANCH."
-  (assoc branch (cdr (xetla-revlib-tree-get-category
-                      archive category))))
-
-(defun xetla-revlib-tree-build-branches (archive category
-                                                &optional
-                                                use-cache
-                                                ignore-error)
-  "Build the list of branches for ARCHIVE/CATEGORY in `xetla-revlib-tree'.
-If USE-CACHE is non-nil, load from the cache where possible.
-If IGNORE-ERROR is non-nil, error is not reported.
-Return non-nil if the tree entry for branches are updated."
-  (when (or (not use-cache)
-            (not (cdr (xetla-revlib-tree-get-category archive category))))
-    (xetla-run-tla-sync (list "library-branches" "-A" archive category)
-                       :finished 'xetla-null-handler
-                       :error
-                       (if ignore-error
-                           'xetla-null-handler
-                         'xetla-default-error-function))
-    (with-current-buffer xetla-last-process-buffer
-      (let (branch
-            (tmp xetla-archive-tree)
-            (xetla-archive-tree xetla-revlib-tree)
-            result)
-        (goto-char (point-min))
-        (while (> (point-at-eol) (point-at-bol))
-          (setq result t)
-          (setq branch (buffer-substring-no-properties
-                        (point-at-bol)
-                        (point-at-eol)))
-          (forward-line 1)
-          (xetla-archive-tree-add-branch
-           archive
-           category
-           (xetla-name-branch (xetla-name-split-semi-qualified branch))))
-        (setq xetla-revlib-tree xetla-archive-tree
-              xetla-archive-tree tmp)
-        result))))
-
-(defun xetla-revlib-tree-get-version (archive category branch version)
-  "Get ARCHIVE/CATEGORY-BRANCH-VERSION from the revlib tree."
-  (assoc version (cdr (xetla-revlib-tree-get-branch
-                       archive category branch))))
-
-(defun xetla-revlib-tree-build-versions (archive category branch
-                                                &optional
-                                                use-cache
-                                                ignore-error)
-  "Build the versions list in ARCHIVE/CATEGORY/BRANCH in `xetla-archive-tree'.
-If USE-CACHE is non-nil, load from the cache where possible.
-If IGNORE-ERROR is non-nil, error is not reported.
-Return non-nil if the tree entry for versions are updated."
-  (when (or (not use-cache)
-            (not (cdr (xetla-revlib-tree-get-branch archive category
-                                                   branch))))
-    (xetla-run-tla-sync (list "library-versions"
-                             (xetla-name-construct
-                              archive category branch))
-                       :finished 'xetla-null-handler
-                       :error
-                       (if ignore-error
-                           'xetla-null-handler
-                         'xetla-default-error-function))
-    (with-current-buffer xetla-last-process-buffer
-      (let (version
-            (tmp xetla-archive-tree)
-            (xetla-archive-tree xetla-revlib-tree)
-            result)
-        (goto-char (point-min))
-        (while (> (point-at-eol) (point-at-bol))
-          (setq result t)
-          (setq version (buffer-substring-no-properties
-                         (point-at-bol)
-                         (point-at-eol)))
-          (forward-line 1)
-          (xetla-archive-tree-add-version
-           archive
-           category
-           branch
-           (xetla-name-version (xetla-name-split-semi-qualified version))))
-        (setq xetla-revlib-tree xetla-archive-tree
-              xetla-archive-tree tmp)
-        result))))
-
-(defun xetla-revlib-tree-get-revision (archive category branch version revision)
-  "Get ARCHIVE/CATEGORY-BRANCH-VERSION-REVISION from the revlib tree."
-  (assoc revision (cdr (xetla-revlib-tree-get-version
-                        archive category branch version))))
-
-(defun xetla-revlib-tree-build-revisions (archive category branch version
-                                                 &optional
-                                                 use-cache
-                                                 ignore-error)
-
-  "Build the revision list of ARCHIVE/CATEGORY-BRANCH-VERSION.
-Updates `xetla-revlib-tree'.
-If IGNORE-ERROR is non-nil, error is not reported.
-Return non-nil if the tree entry for revisions are updated."
-  (when (or (not use-cache)
-            (not (cdr (xetla-revlib-tree-get-version archive category branch
-                                                    version))))
-    (xetla-run-tla-sync (list "library-revisions"
-                             "--summary" "--date" "--creator"
-                             (xetla-name-construct
-                              archive category branch version))
-                       :finished 'xetla-null-handler
-                       :error (if ignore-error
-                                  'xetla-null-handler
-                                'xetla-default-error-function))
-    (with-current-buffer xetla-last-process-buffer
-      (let (revision
-            date
-            creator
-            summary
-            (tmp xetla-archive-tree)
-            (xetla-archive-tree xetla-revlib-tree)
-            result)
-
-        (goto-char (point-min))
-        (while (> (point-at-eol) (point-at-bol))
-          (setq result t)
-          (setq revision (buffer-substring-no-properties
-                          (point-at-bol)
-                          (point-at-eol)))
-          (forward-line 1)
-          (skip-chars-forward " ")
-          (setq date (buffer-substring-no-properties (point)
-                                                     (point-at-eol)))
-          (forward-line 1)
-          (skip-chars-forward " ")
-          (setq creator (buffer-substring-no-properties (point)
-                                                        (point-at-eol)))
-          (forward-line 1)
-          (skip-chars-forward " ")
-          (setq summary (buffer-substring-no-properties
-                         (point)
-                         (progn (re-search-forward "^\\([^ \t]\\|$\\)")
-                                (previous-line 1)
-                                (end-of-line)
-                                (point))))
-          (forward-line 1)
-          (xetla-archive-tree-add-revision
-           archive
-           category
-           branch
-           version
-           revision
-           summary
-           creator
-           date))
-        (setq xetla-revlib-tree xetla-archive-tree
-              xetla-archive-tree tmp)
-        result
-        ))))
-
-;; --------------------------------------
-;; Name reading engine
-;; --------------------------------------
-;;Currently only able to read a full revision starting from nothing.
-(defun xetla-name-read-refresh-cache ()
-  "Function to be called from the minibuffer while reading a name."
-  (interactive)
-  (xetla-archive-tree-build
-   (xetla-name-construct
-    (butlast (delete nil (xetla-name-split (buffer-substring))))))
-  (setq xetla-archive-tree nil))
-
-(defvar xetla-name-read-arguments "This value should not be refereed."
-  "Used to suppress warnings from the byte code compiler.
-This variable is a just placeholder introduced to suppress the
-warnings from byte code compiler.  Variable `xetla-name-read-arguments'
-should be bound in `let'.  Variable `xetla-name-read-arguments' is used
-for passing information from `xetla-name-read' to functions called internally
-from `xetla-name-read'.  Use function `xetla-name-read-arguments' to get the
-information")
-
-(defun xetla-name-read-arguments (key)
-  "Get `xetla-name-read' context information associated to KEY.
-`xetla-name-read' calls some functions to read a xetla name.
-In the functions, the arguments passed to `xetla-name-read'(context information)
-are needed to know.  However, `xetla-name-read' cannot pass the context
-information directly to the functions because the functions are something to do
-with Emacs's completion mechanism; and the mechanism specifies the number
-of arguments of the functions.  So the context information is passed via
-a local variable, `xetla-name-read-arguments', defined in let.
-
-Symbol `archive', `category', `branch', `version', or `revision' are
-acceptable as KEY."
-  (cdr (assoc key xetla-name-read-arguments)))
-
-
-(defun xetla-name-read-complete (string predicate what)
-  "Completion function for name reading.
-
-Displays STRING and prompts for something satisfying PREDICATE.
-
-This function uses the free variables archive, category, branch,
-version, and revision.  If one of these variables is non-nil, it means
-the corresponding value must be read from keyboard.
-
-REMINDER: this function may be called several times, with different
-values for WHAT:
-
- - nil : The function must return the longest prefix
- - t : The function must return the list of completions
- - 'lambda : The function must return t if the completion correspond
-   to an exact match, nil otherwise.  (so that Emacs can distinguish
-   between \"sole completion\" and \"complete, but not unique\"."
-  (if (and (eq what 'lambda)
-           (string-match "/\\(.*--\\)?$" string))
-      ;; The caller just want to know whether this is a full
-      ;; completion. This can not be the case with such suffix.
-      nil
-    (let* ((empty-branch nil)
-           (use-cache (not current-prefix-arg))
-           (splited (xetla-name-split string))
-           (archive-loc  (xetla-name-archive  splited))
-           (category-loc (xetla-name-category splited))
-           (branch-loc   (xetla-name-branch   splited))
-           (version-loc  (xetla-name-version  splited))
-           (revision-loc (xetla-name-revision splited))
-           (suffix (cond
-                    ((and (xetla-name-read-arguments 'category)
-                          (not category-loc) "/"))
-                    ((and (xetla-name-read-arguments 'branch)
-                          (not branch-loc)   "--"))
-                    ((and (xetla-name-read-arguments 'version)
-                          (not version-loc)  "--"))
-                    ((and (xetla-name-read-arguments 'revision)
-                          (not revision-loc) "--"))
-                    (t nil)))
-           (maybep (cond
-                    ((eq 'maybe (xetla-name-read-arguments 'category))
-                     t)
-                    ((and (eq 'maybe (xetla-name-read-arguments 'branch))
-                          archive-loc category-loc)
-                     t)
-                    ((and (eq 'maybe (xetla-name-read-arguments 'version))
-                          archive-loc category-loc branch-loc)
-                     t)
-                    ((and (eq 'maybe (xetla-name-read-arguments 'revision))
-                          archive-loc category-loc branch-loc version-loc)
-                     t)
-                    (t nil)))
-           (completions
-            (cond
-             ;; If the user started to write a revision ...
-             (revision-loc
-              ;; ... and if the user is supposed to be prompted a
-              ;; revision
-              (when (xetla-name-read-arguments 'revision)
-                (let ((xetla-revisions-shows-summary nil)
-                      (xetla-revisions-shows-date nil)
-                      (xetla-revisions-shows-creator nil))
-                  (xetla-archive-tree-build-revisions
-                   archive-loc category-loc branch-loc version-loc use-cache t))
-                (cdr (xetla-archive-tree-get-version
-                      archive-loc category-loc branch-loc version-loc))))
-             (version-loc
-              (when (xetla-name-read-arguments 'version)
-                (xetla-archive-tree-build-versions
-                 archive-loc category-loc branch-loc use-cache t)
-                (cdr (xetla-archive-tree-get-branch
-                      archive-loc category-loc branch-loc))))
-             ;; If the user started a branch ...
-             (branch-loc
-              ;; And a branch is needed
-              (when (xetla-name-read-arguments 'branch)
-                (xetla-archive-tree-build-branches
-                 archive-loc category-loc use-cache t)
-                (let ((result (cdr (xetla-archive-tree-get-category
-                                    archive-loc category-loc))))
-                  (when (and (string= branch-loc "")
-                             (xetla-name-read-arguments 'version)
-                             (let ((empty-br-exists nil))
-                               (dolist (branch
-                                        (cdr (xetla-archive-tree-get-category
-                                              archive-loc category-loc)))
-                                 (when (string= (car branch) "")
-                                   (setq empty-br-exists t)))
-                               empty-br-exists))
-                    (xetla-archive-tree-build-versions
-                     archive-loc category-loc "")
-                    (setq empty-branch (xetla-archive-tree-get-branch
-                                        archive-loc category-loc ""))
-                    (when empty-branch
-                      ;; Remove the "" branch to avoid the --
-                      ;; completion.
-                      (let ((tmp result))
-                        (setq result nil)
-                        (while tmp
-                          (when (not (string= (caar tmp) ""))
-                            (setq result (cons (car tmp) result)))
-                          (setq tmp (cdr tmp))))))
-                  result)))
-             (category-loc
-              (when (xetla-name-read-arguments 'category)
-                (xetla-archive-tree-build-categories archive-loc use-cache t)
-                (cddr (xetla-archive-tree-get-archive archive-loc))))
-             (t
-              (when (xetla-name-read-arguments 'archive)
-                (xetla-archive-tree-build-archives use-cache t)
-                xetla-archive-tree)))))
-      (let* ((base (mapcar (lambda (x)
-                             (xetla-name-construct
-                              (delete
-                               nil
-                               (list
-                                (when category-loc archive-loc)
-                                (when branch-loc category-loc)
-                                (when version-loc branch-loc)
-                                (when revision-loc version-loc)
-                                (car x)))))
-                           completions))
-             (sans-suffix
-              (and maybep suffix))
-             (empty-branch-versions
-              (and empty-branch
-                   (mapcar (lambda (x)
-                             (xetla-name-construct
-                              archive-loc category-loc "" (car x)))
-                           (cdr empty-branch))))
-             (completions (funcall 'all-completions
-                                   string
-                                   (nconc (mapcar
-                                           (lambda (x)
-                                             (list (concat x suffix)))
-                                           base)
-                                          (when sans-suffix
-                                            (mapcar
-                                             (lambda (x) (list x))
-                                             base))
-                                          (when empty-branch
-                                            (mapcar
-                                             (lambda (x) (list x))
-                                             empty-branch-versions)))
-                                   predicate)))
-        (let ((result
-               (cond ((eq what t)
-                      ;; We just want the list of completions
-                      completions)
-                     ((eq (length completions) 1)
-                      ;; There's only one completion
-                      (if (eq what 'lambda)
-                          (string= (car completions) string)
-                        (cond ((string= (car completions) string) t)
-                              (t (car completions)))))
-                     ;; there are several possible completions
-                     (t (if (eq what 'lambda)
-                            ;; complete, but not unique ?
-                            (member string completions)
-                          (try-completion string (mapcar 'list
-                                                         completions)))))))
-;;          (xetla-trace "string=%s predicate=%S what=%s ==> result=%S\ncompletions=%S"
-;;                      string predicate what result completions)
-          result)))))
-
-;; Test cases
-;; (xetla-name-read "enter category: " "Matthieu.Moy@imag.fr--public" 'prompt)
-;; (xetla-name-read "branch: " "lord@emf.net--2004" 'prompt 'prompt)
-;; (xetla-name-read "revision: " 'prompt 'prompt 'prompt 'prompt 'prompt)
-;; (xetla-name-read "revision or version: " 'prompt 'prompt 'prompt 'prompt 'maybe)
-;; (xetla-name-read "revision or version: " "jet@gyve.org--xetla" "xetla" "jet" 'prompt 'maybe)
-;;
-(defvar xetla-name-read-history nil)     ; TODO: multiple history list?
-(defvar xetla-name-read-debug nil
-  "If non-nil, `condition-case' in `xetla-name-read' is made disabled.")
-(defun xetla-name-read (&optional prompt archive category
-                                 branch version revision)
-  "Read a name.
-To get help on the user interface of `xetla-name-read', please type
-M-x xetla-name-read-help RET.
-
-Function reading an archive location from keyboard.
-Read name is expressed in a list built by `xetla-name-split'.
-
-First argument PROMPT is the prompt the user will get. Next arguments
-ARCHIVE CATEGORY BRANCH VERSION and REVISION are either the default
-value, or a request for a value. They can take four values:
-
- - A string means the default value, and will be used as an initial
-   input.
-
- - The symbol 'prompt means the value will be prompted from the user.
-   The user will HAVE to give this value.
-
- - The symbol 'maybe means the value will be prompted, but is optional
-   for the user.
-
- - nil means the value won't be prompted.
-
-They should appear in the same order as above.
-
-Example:
-- Read a category in archive \"Matthieu.Moy@imag.fr--public\":
- (xetla-name-read \"enter category: \" \"Matthieu.Moy@imag.fr--public\" 'prompt)
-- Read a revision, anywhere:
- (xetla-name-read \"revision: \" 'prompt 'prompt 'prompt 'prompt 'prompt)
-- Read either a revision or a version:
- (xetla-name-read \"revision: \" 'prompt 'prompt 'prompt 'prompt 'maybe)
-
-While prompting, a menu \"Xetla\" is added to the menubar. The
-following commands are available:
-
-\\{xetla-name-read-minibuf-map}"
-  (let ((xetla-name-read-arguments `((archive  . ,archive)
-                                    (category . ,category)
-                                    (branch   . ,branch)
-                                    (version  . ,version)
-                                    (revision . ,revision))))
-    (if xetla-name-read-debug
-        (xetla-name-read-internal prompt archive category branch version revision)
-      (condition-case reason
-          (xetla-name-read-internal prompt archive category branch version revision)
-        ((quit error)
-         (run-hooks 'xetla-name-read-error-hook)
-         (signal (car reason) (cdr reason)))))))
-
-(defun xetla-name-read-internal (prompt archive category branch version revision)
-  "See `xetla-name-read'."
-  (run-hooks 'xetla-name-read-init-hook)
-  (let* ((minibuffer-local-completion-map xetla-name-read-minibuf-map)
-         (result (xetla-name-construct
-                  (delete
-                   'maybe
-                   (delete 'prompt (list archive category
-                                         branch version)))))
-         (first-try t)
-         not-finished too-long last-empty)
-    ;; Without in some case 'maybe is ignored by xetla-prompt-not-finished
-    ;; and never the control flow enters the while loop.
-    ;; We need C language's do-while loop.
-    (while (or first-try
-               not-finished
-               too-long
-               last-empty)
-      (unless first-try
-        (unless (eq this-command 'choose-completion)
-          (ding)
-          (message (cond (not-finished "%s%s [incomplete input: %s]")
-                         (too-long "%s%s [too long input for: %s]")
-                         (last-empty (concat "%s%s [empty " last-empty
-                                             " name]"))
-                         (t (error
-                             (concat "case not managed."
-                                     " Please submit a bug report"))))
-                   prompt result
-                   (xetla-name-read-required-input archive
-                                                  category
-                                                  branch
-                                                  version
-                                                  revision))
-          (sit-for 2)
-          (message nil)))
-
-      (setq result (completing-read
-                    (or prompt "Location: ")
-                    'xetla-name-read-complete
-                    nil nil result
-                    'xetla-name-read-history)
-            first-try nil)
-      (setq not-finished (xetla-prompt-not-finished
-                          result archive category branch
-                          version revision))
-      (setq too-long (xetla-prompt-too-long
-                      result archive category branch
-                      version revision))
-      (setq last-empty (xetla-prompt-last-empty result)))
-
-    (when result
-      (setq result (xetla-name-split result)))
-    (run-hook-with-args 'xetla-name-read-final-hook result)
-    result))
-
-(defun xetla-prompt-not-finished (result archive category branch
-                                        version revision)
-  "Check whether user input is complete.
-True if RESULT (a string) is not sufficient when the user is
-prompted for ARCHIVE CATEGORY BRANCH VERSION REVISION."
-  (let ((res-split (xetla-name-split result)))
-    (or (and (eq archive 'prompt) ;; archive required
-             (not (xetla-name-archive res-split))) ;; but not provided
-        (and (eq category 'prompt)
-             (not (xetla-name-category res-split)))
-        (and (eq branch 'prompt)
-             (not (xetla-name-branch res-split)))
-        (and (eq version 'prompt)
-             (not (xetla-name-version res-split)))
-        (and (eq revision 'prompt)
-             (not (xetla-name-revision res-split))))))
-
-(defun xetla-prompt-too-long (result archive category branch
-                                    version revision)
-  "Check whether the user has entered too many elements.
-True if RESULT (a string) contains too many elements when the user
-is prompted for ARCHIVE CATEGORY BRANCH VERSION REVISION.
-
-For example, will return true if the user entered
-foo@bar-2004/xetla-main while prompted only for a category."
-  (let ((res-split (xetla-name-split result)))
-    (or (and (not revision) ;; revision not needed
-             (xetla-name-revision res-split)) ;; but provided
-        (and (not version)
-             (xetla-name-version res-split))
-        (and (not branch)
-             (xetla-name-branch res-split))
-        (and (not category)
-             (xetla-name-category res-split))
-        (and (not archive)
-             (xetla-name-archive res-split)))))
-
-(defun xetla-prompt-last-empty (result)
-  "Check whether the last field is empty.
-Non-nil if RESULT (a string) is terminated by \"--\" or \"/\". This
-means the user entered a delimiter but not the element after.
-
-When non-nil, the returned value is a string giving the name of the
-item that is currently empty. (eg: archive, category, ...)"
-  (let ((res-split (xetla-name-split result)))
-    (cond ((equal (xetla-name-archive  res-split) "") "archive" )
-          ((equal (xetla-name-category res-split) "") "category")
-          ((and (equal (xetla-name-branch res-split) "")
-                (not (xetla-name-version res-split))) "branch"  )
-          ((equal (xetla-name-version  res-split) "") "version" )
-          ((equal (xetla-name-revision res-split) "") "revision")
-          (t nil))))
-
-
-(defun xetla-name-read-required-input (archive
-                                      category
-                                      branch
-                                      version
-                                      revision)
-  "Return string which represents the elements to be readin `xetla-name-read'.
-If ARCHIVE, CATEGORY, BRANCH, VERSION or REVISION are equal to 'maybe, the
-corresponding element will be optionally read.
-If any of these are non-nil (but not 'maybe), the corresponding element will be
-required.
-If any of these are nil, the correpsonding element is not required."
-  (concat
-   (cond ((eq archive 'maybe) "[A]")
-         (archive "A")
-         (t ""))
-   (cond ((eq category 'maybe) "[/C]")
-         (category "/C")
-         (t ""))
-   (cond ((eq branch 'maybe) "[--B]")
-         (branch "--B")
-         (t ""))
-   (cond ((eq version 'maybe) "[--V]")
-         (version "--V")
-         (t ""))
-   (cond ((eq revision 'maybe) "[--R]")
-         (revision "--R")
-         (t ""))))
-
-
-
-(defun xetla-location-type (location)
-  "Return the type of LOCATION."
-  (cond
-   ((string-match "^ftp://" location) 'ftp)
-   ((string-match "^sftp://" location) 'sftp)
-   ((string-match "^http://" location) 'http)
-   (t 'local)))
-
-(defun xetla-archive-type (archive)
-  "Return the type of ARCHIVE."
-  (cond
-   ((string-match "SOURCE$" archive) 'source)
-   ;; archive-MIRROR, archive-MIRROR-2 should be treated as mirror
-   ((string-match ".+-MIRROR" archive) 'mirror)
-   (t 'normal)))
-
-;; (xetla-archive-name-source "a")
-;; (xetla-archive-name-source "a-SOURCE")
-;; (xetla-archive-name-source "a-MIRROR")
-(defun xetla-archive-name-source (archive &optional existence-check)
-  "Make source archive name from ARCHIVE.
-If EXISTENCE-CHECK is non-nil, check whether the made source archive name
-already exists or not; return nil if it doesn't exists.
-Example:
-ELISP> (xetla-archive-name-source \"jet@gyve.org-xetla\")
-\"jet@gyve.org-xetla-SOURCE\"
-ELISP> (xetla-archive-name-source \"jet@gyve.org-xetla-MIRROR\")
-\"jet@gyve.org-xetla\"
-ELISP> (xetla-archive-name-source \"jet@gyve.org-xetla-SOURCE\")
-nil"
-  (let* ((type (xetla-archive-type archive))
-         (source (cond
-                 ((eq 'normal type)
-                  (concat archive "-SOURCE"))
-                 ((eq 'mirror type)
-                  (string-match "\\(.*\\)-MIRROR$" archive)
-                  (match-string 1 archive))
-                 (t nil))))
-    (if existence-check
-        (progn
-          (xetla-archive-tree-build-archives t)
-          (when (and source (xetla-archive-tree-get-archive source))
-            source))
-      source)))
-
-;; (xetla-archive-name-mirror "a")
-;; (xetla-archive-name-mirror "a-SOURCE")
-;; (xetla-archive-name-mirror "a-MIRROR")
-(defun xetla-archive-name-mirror (archive &optional existence-check)
-  "Make mirror archive name from ARCHIVE.
-If EXISTENCE-CHECK is non-nil, check whether the made mirror archive name
-already exists or not; return nil if it doesn't exists.
-Example:
-ELISP> (xetla-archive-name-mirror \"jet@gyve.org--xetla\")
-\"jet@gyve.org--xetla-MIRROR\"
-ELISP> (xetla-archive-name-mirror \"jet@gyve.org--xetla-SOURCE\")
-\"jet@gyve.org--xetla\"
-ELISP> (xetla-archive-name-mirror \"jet@gyve.org--xetla-MIRROR\")
-nil"
-  (let* ((type (xetla-archive-type archive))
-         (mirror (cond
-                  ((eq 'normal type)
-                   (concat archive "-MIRROR"))
-                  ((eq 'source type)
-                   (string-match "\\(.*\\)-SOURCE" archive)
-                   (match-string 1 archive))
-                  (t nil))))
-    (if existence-check
-        (progn
-          (xetla-archive-tree-build-archives t)
-          (when (and mirror (xetla-archive-tree-get-archive mirror))
-            mirror))
-      mirror)))
-
-(defun xetla-compute-direct-ancestor (&optional revision)
-  "Compute the direct ancestor of REVISION.
-REVISION must be provided as a list, and a list is returned.
-If revision is nil, return the ancestor of the last revision
-of the local tree."
-  (interactive
-   (list (xetla-name-read "Compute direct ancestor of: "
-                         'prompt 'prompt 'prompt 'prompt 'prompt)))
-  (let ((ancestor
-         (xetla-run-tla-sync (list "ancestry-graph" "--immediate"
-                                  (and revision
-                                       (xetla-name-construct revision)))
-                            :finished (lambda (output error status arguments)
-                                        (xetla-name-split
-                                         (xetla-buffer-content
-                                          output))))))
-    (when (interactive-p)
-      (message "Ancestor of: %s\n         is: %s"
-               (xetla-name-construct ancestor)
-               (xetla-name-construct revision)))
-    ancestor))
-
-;; Copied from ediff-mouse-event-p. I prefer keeping this duplication
-;; to avoid one more dependancy on ediff.el (whose interface may
-;; change one day ...)
-(defsubst xetla-mouse-event-p (event)
-  "Return true if EVENT is a mouse-related event."
-  (if (featurep 'xemacs)
-      (xetla-do-in-xemacs (button-event-p event))
-    (xetla-do-in-gnu-emacs
-      (string-match "mouse" (format "%S" (event-basic-type event))))))
-
-;; --------------------------------------
-;; Face manipulators
-;; --------------------------------------
-(defun xetla-face-add (str face &optional keymap menu help)
-  "Add to string STR the face FACE.
-Optionally, also add the text properties KEYMAP, MENU and HELP.
-
-If KEYMAP is a symbol, (symbol-value KEYMAP) is used
-as a keymap; and `substitute-command-keys' result
-against (format \"\\{%s}\" (symbol-name keymap)) is appended to HELP.
-
-If HELP is nil and if MENU is non nil, the MENU title is used as HELP."
-  (if xetla-highlight
-      (let* ((strcpy (copy-sequence str))
-             (key-help (when (symbolp keymap)
-                         (substitute-command-keys (format "\\{%s}" (symbol-name keymap)))))
-             (prefix-help (if help help (when (and menu (stringp (cadr menu))) (cadr menu))))
-             (long-help (if key-help
-                            (if prefix-help (concat prefix-help "\n"
-                                             ;; Sigh. Font used on tooltips in GNU Emacs with Gtk+
-                                             ;; is a proportional.
-                                             ;; (make-string (length help) ?=) "\n"
-                                             "================" "\n"
-                                             key-help) key-help)
-                          help))
-             (keymap (if (symbolp keymap) (symbol-value keymap) keymap)))
-        (add-text-properties 0 (length strcpy)
-                             `(face ,face
-;;; Even if we define a face in a buffer, it seems that
-;;; font-lock mode just ignore it or remove the face property.
-;;; I don't know the detail but in xetla-inventory buffer,
-;;; I cannot make both font-lock keywords and faces put by tl-face-add
-;;; highlight at once. When font-lock-face is defined, I can do.
-;;; See "Special Properties" subsection in the emacs lisp reference manual.
-;;; `font-lock-face' property is new in Emacs 21.4. However, I guess there is
-;;; no wrong side effect if I define font-lock-face property here.
-                                    font-lock-face ,face
-                                    ,@(when keymap
-                                        `(mouse-face highlight
-                                                     keymap ,keymap
-                                                     help-echo ,long-help))
-                                    ,@(when menu
-                                        `(menu ,menu))
-                                    )
-                             strcpy)
-        strcpy)
-    str))
-
-;; --------------------------------------
-;; Debugging facilities
-;; --------------------------------------
-(defvar xetla-debug t)
-
-(defun xetla-trace (&rest msg)
-  "Display the trace message MSG.
-Same as `message' if `xetla-debug' is non-nil.
-Does nothing otherwise.  Please use it for your debug messages."
-  (when xetla-debug
-    (apply 'message (concat "xetla: " (car msg)) (cdr msg))))
-
-(defun xetla-reload (directory)
-  "Reloads xetla \(usually for debugging purpose\).
-
-With prefix arg, prompts for the DIRECTORY in which xetla should be
-loaded.  Useful to switch from one branch to the other.
-
-If a Makefile is present in the directory where xetla is to be loaded,
-run \"make\"."
-  (interactive
-   (list (when current-prefix-arg
-           (let* ((other (read-directory-name
-                         "Load XEtla from: "))
-                  (lispdir (concat (file-name-as-directory other)
-                                   "lisp")))
-             (if (file-directory-p lispdir)
-                 lispdir
-               other)))))
-  (when directory
-    (let ((current-path (file-name-directory (locate-library
-                                              "xetla"))))
-      (setq load-path
-            (cons directory (remove current-path load-path)))))
-  (let ((default-directory (file-name-directory (locate-library "xetla"))))
-    (when (file-exists-p
-           "Makefile")
-      (shell-command "make")))
-  (when (featurep 'xetla-tips)      (unload-feature 'xetla-tips      t))
-  (when (featurep 'xetla-browse)    (unload-feature 'xetla-browse    t))
-  (when (featurep 'xetla)           (unload-feature 'xetla           t))
-  (when (featurep 'xetla-core)      (unload-feature 'xetla-core      t))
-  (when (featurep 'xetla-defs)      (unload-feature 'xetla-defs      t))
-  (when (featurep 'xetla-autoloads) (unload-feature 'xetla-autoloads t))
-  (ignore-errors (require 'xetla-autoloads))
-  (require 'xetla))
-
-;; --------------------------------------
-;; Supports spaces in filenames
-;; --------------------------------------
-(defvar xetla-supports-spaces-in-filenames nil
-  "Wether xetla supports spaces in filenames.
-
-Possible values are nil (don't know), 'yes, or 'no.  Don't use this
-variable directly.  Use `xetla-supports-spaces-in-filenames' instead.")
-
-(defun xetla-supports-spaces-in-filenames ()
-  "Wether xetla supports spaces in filenames.
-
-Returns 't or nil.
-
-If `xetla-supports-spaces' is non-nil, use its value.  Otherwise, test
-if \"escape\" is listed by \"xetla help\", and memorize the result in
-`xetla-supports-spaces-in-filenames'"
-  (interactive)
-  (let ((answer
-         (cond ((eq xetla-supports-spaces-in-filenames 'yes) t)
-               ((eq xetla-supports-spaces-in-filenames 'no) nil)
-               (t (xetla-run-tla-sync
-                   '("help")
-                   :finished (lambda (output error status arguments)
-                               (with-current-buffer output
-                                 (goto-char (point-min))
-                                 (search-forward "escape :"
-                                                 nil t))))))))
-    (when (interactive-p)
-      (message (if answer "Yes" "No")))
-    (setq xetla-supports-spaces-in-filenames
-          (if answer 'yes 'no))
-    answer))
-
-(defun xetla-escape (string &optional unescape message)
-  "Return the pika escaped value of STRING.
-If pika escaping is not supported by xetla, return STRING.
-If UNESCAPE is non-nil, returns the unescaped version of string.
-If MESSAGE is non-nil or if run interactively, also display the value
-as a message."
-  (interactive "sString to escape: ")
-  (let ((res (if (and (string-match (if unescape "\\\\"
-                                      "[^a-zA-Z._+,{}-]") string)
-                      ;; We need to do the (un)escaping
-                      (xetla-supports-spaces-in-filenames))
-                 (xetla-run-tla-sync
-                  (list "escape" (when unescape "--unescaped") string)
-                  :finished (lambda (output error status arguments)
-                              (xetla-buffer-content output)))
-               string)))
-    (when (or (interactive-p) message)
-      (message res))
-    res))
-
-(defun xetla-unescape (string)
-  "Run \"tla escape -unescaped\" on STRING.
-
-Return STRING if \"tla escape\" is not available."
-  (interactive "sString to unescape: ")
-  (xetla-escape string t (interactive-p)))
-
-(defun xetla-regexp-quote (string)
-  "Return a regexp string which matches exactly STRING and nothing else.
-Special characters are escaped to leave STRING in a suitable form for
-Arch."
-  (let ((quoted (regexp-quote string)))
-    (replace-regexp-in-string
-     "\\([{}()|]\\)"
-     (concat "\\\\"                     ; leading slash
-             "\\1")                     ; quoted character
-     quoted)))
-
-;; --------------------------------------
-;; Saving and loading state variables
-;; --------------------------------------
-(defun xetla-pp-to-string (sexp)
-  "Return sexp pretty printed by `pp-to-string'."
-  (let ((print-readably t)
-        print-level print-length)
-    (pp-to-string sexp)))
-
-(defun xetla-save-state (&optional vars state-file pp)
-  "Save variables from VARS list to file STATE-FILE.
-The default for VARS is `xetla-state-variables-list'
-The default for STATE-FILE is `xetla-state-file-name'.
-If PP is non-nil use `xetla-pp-to-string' to format object.
-
-The file will contain a setq setting the vars during loading by
-`xetla-load-state'."
-  (let ((state-file (or state-file
-                        (expand-file-name xetla-state-file-name
-                                          xetla-config-directory)))
-        (vars (or vars xetla-state-variables-list))
-        v)
-    (if (not (file-exists-p (file-name-directory state-file)))
-        (make-directory (file-name-directory state-file) t))
-    (save-excursion
-      (set-buffer (get-buffer-create " *xetla-state*"))
-      (erase-buffer)
-      (insert ";; Generated file. Do not edit!!!\n(setq\n")
-      (if pp
-          (while vars
-            (setq v (car vars) vars (cdr vars))
-            (insert (format "%s\n'%s"
-                            (symbol-name v)
-                            (xetla-pp-to-string (symbol-value v)))))
-        (while vars
-          (setq v (car vars) vars (cdr vars))
-          (insert (format "      %s '%S\n"
-                          (symbol-name v)
-                          (symbol-value v)))))
-      (insert "      )")
-      (write-region (point-min) (point-max) state-file))))
-
-(defun xetla-load-state (&optional state-file)
-  "Load `xetla-state-file-name`, i.e. evaluate its content."
-  (let ((state-file (or state-file
-                        (expand-file-name xetla-state-file-name
-                                          xetla-config-directory))))
-    (if (file-exists-p state-file)
-        (load state-file nil t t))))
-
-;; (setq xetla-archive-tree nil)
-;; (setq xetla-revlib-tree nil)
-
-(provide 'xetla-core)
-;;; xetla-core.el ends here
diff --git a/xemacs-packages/xetla/xetla-defs.el b/xemacs-packages/xetla/xetla-defs.el
deleted file mode 100644 (file)
index 545f5b2..0000000
+++ /dev/null
@@ -1,2633 +0,0 @@
-;;; xetla-defs.el --- UI XEtla's element definitions
-
-;; Copyright (C) 2003-2004 by Stefan Reichoer (GPL)
-;; Copyright (C) 2004 Steve Youngs (BSD)
-
-;; Author:        Steve Youngs <steve@eicq.org>
-;; Maintainer:    Steve Youngs <steve@eicq.org>
-;; Created:       2004-11-25
-;; Keywords:      arch archive tla
-
-;; Based on xtla-defs.el by: Stefan Reichoer, <stefan@xsteve.at>
-
-;; This file is part of XEtla.
-
-;; Redistribution and use in source and binary forms, with or without
-;; modification, are permitted provided that the following conditions
-;; are met:
-;;
-;; 1. Redistributions of source code must retain the above copyright
-;;    notice, this list of conditions and the following disclaimer.
-;;
-;; 2. Redistributions in binary form must reproduce the above copyright
-;;    notice, this list of conditions and the following disclaimer in the
-;;    documentation and/or other materials provided with the distribution.
-;;
-;; 3. Neither the name of the author nor the names of any contributors
-;;    may be used to endorse or promote products derived from this
-;;    software without specific prior written permission.
-;;
-;; THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR
-;; IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-;; WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-;; DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
-;; FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-;; CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-;; SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
-;; BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-;; WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
-;; OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
-;; IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-;;; Commentary:
-
-;; Contributions from:
-;;    Matthieu Moy <Matthieu.Moy@imag.fr>
-;;    Masatake YAMATO <jet@gyve.org>
-;;    Milan Zamazal <pdm@zamazal.org>
-;;    Martin Pool <mbp@sourcefrog.net>
-;;    Robert Widhopf-Fenk <hack@robf.de>
-;;    Mark Triggs <mst@dishevelled.net>
-
-;; In order to keep UI consistency, especially about key binding,
-;; we gather all UI definition in this separated file.
-;;
-
-
-;;; History:
-;;
-
-;;; Code:
-
-(eval-when-compile
-  (require 'cl))
-
-(eval-and-compile
-  (autoload 'ad-add-advice "advice")
-  (require 'ediff)
-  (require 'diff-mode)
-  (require 'font-lock)
-  (require 'add-log)
-  (require 'ffap)
-  (require 'easymenu))
-
-;; Macros to generate correct code for different emacs variants
-;; This doesn't really belong here, but then again it doesn't "fit"
-;; anywhere else.
-;;;###autoload
-(defmacro xetla-do-in-gnu-emacs (&rest body)
-  "Execute BODY if in GNU/Emacs."
-  (unless running-xemacs `(progn ,@body)))
-(put 'xetla-do-in-gnu-emacs 'lisp-indent-hook 'defun)
-
-;;;###autoload
-(defmacro xetla-do-in-xemacs (&rest body)
-  "Execute BODY if in XEmacs."
-  (when running-xemacs `(progn ,@body)))
-(put 'xetla-do-in-xemacs 'lisp-indent-hook 'defun)
-
-(defmacro xetla-funcall-if-exists (function &rest args)
-  "Call FUNCTION with ARGS as parameters if it exists."
-  (if (fboundp function)
-      `(funcall ',function ,@args)))
-
-(defun xetla-clone-process (process &optional newname)
-  "Create a twin copy of PROCESS.
-If NEWNAME is nil, it defaults to PROCESS' name;
-NEWNAME is modified by adding or incrementing <N> at the end as necessary.
-If PROCESS is associated with a buffer, the new process will be associated
-  with the current buffer instead.
-Returns nil if PROCESS has already terminated."
-  (setq newname (or newname (process-name process)))
-  (if (string-match "<[0-9]+>\\'" newname)
-      (setq newname (substring newname 0 (match-beginning 0))))
-  (when (memq (process-status process) '(run stop open))
-    (let* ((process-connection-type (process-tty-name process))
-          (old-kwoq (process-kill-without-query process nil))
-          (new-process
-           (if (memq (process-status process) '(open))
-               (apply 'open-network-stream newname
-                      (if (process-buffer process) (current-buffer)))
-             (apply 'start-process newname
-                    (if (process-buffer process) (current-buffer))
-                    (process-command process)))))
-      (process-kill-without-query new-process old-kwoq)
-      (process-kill-without-query process old-kwoq)
-      (set-process-filter new-process (process-filter process))
-      (set-process-sentinel new-process (process-sentinel process))
-      new-process)))
-
-(defun-when-void clone-buffer (&optional newname display-flag)
-  "Create a twin copy of the current buffer.
-If NEWNAME is nil, it defaults to the current buffer's name;
-NEWNAME is modified by adding or incrementing <N> at the end as necessary.
-
-If DISPLAY-FLAG is non-nil, the new buffer is shown with `pop-to-buffer'.
-This runs the normal hook `clone-buffer-hook' in the new buffer
-after it has been set up properly in other respects."
-  (interactive (list (if current-prefix-arg (read-string "Name: "))
-                    t))
-  (if buffer-file-name
-      (error "Cannot clone a file-visiting buffer"))
-  (if (get major-mode 'no-clone)
-      (error "Cannot clone a buffer in %s mode" mode-name))
-  (setq newname (or newname (buffer-name)))
-  (if (string-match "<[0-9]+>\\'" newname)
-      (setq newname (substring newname 0 (match-beginning 0))))
-  (let ((buf (current-buffer))
-       (ptmin (point-min))
-       (ptmax (point-max))
-       (pt (point))
-       (mk (mark t))
-       (modified (buffer-modified-p))
-       (mode major-mode)
-       (lvars (buffer-local-variables))
-       (process (get-buffer-process (current-buffer)))
-       (new (generate-new-buffer (or newname (buffer-name)))))
-    (save-restriction
-      (widen)
-      (with-current-buffer new
-       (insert-buffer-substring buf)))
-    (with-current-buffer new
-      (narrow-to-region ptmin ptmax)
-      (goto-char pt)
-      (if mk (set-mark mk))
-      (set-buffer-modified-p modified)
-
-      ;; Clone the old buffer's process, if any.
-      (when process (xetla-clone-process process))
-
-      ;; Now set up the major mode.
-      (funcall mode)
-
-      ;; Set up other local variables.
-      (mapcar (lambda (v)
-               (condition-case ()      ;in case var is read-only
-                   (if (symbolp v)
-                       (makunbound v)
-                     (set (make-local-variable (car v)) (cdr v)))
-                 (error nil)))
-             lvars)
-
-        ;; Run any hooks (typically set up by the major mode
-        ;; for cloning to work properly).
-        (run-hooks 'clone-buffer-hook))
-      (if display-flag (pop-to-buffer new))
-      new))
-
-
-;; --------------------------------------
-;; Key bindings
-;; --------------------------------------
-;;
-;; Conventions
-;;
-;; - Meta Rules:
-;; 0. If you feel a binding odd more than 3 times, report it to xetla dev mailing
-;;    list. Especially about some danger functions like undo, merge; and functions
-;;    taking longer time to be executed.
-;;
-;; 1. Our key binding should not surprise "general users" even if the
-;;    binding is convenience. Instead, provide hooks for customization.
-;;    We know it is difficult to define "general users".
-;;
-;; 2. Write the result of discussion here.
-;;
-;; 3. See http://mail.gnu.org/archive/html/emacs-devel/2004-03/msg00608.html
-;;
-;;
-;; - Generic Rules:
-;;
-;; 1. xetla-inventory should have similar key bindings to pcl-cvs.
-;;    If a pcl-cvs's binding is too odd, talk it in xetla dev mailing list.
-;;
-;; 2. Define common prefix for command groups like '>'.
-;;    So a key binding for a grouped command has following structure:
-;;
-;;    ?{prefix} ?{suffix}
-;;
-;;    e.g. `get something commands' should have `>' as prefix.
-;;
-;;    About suffix part, ? should show the help for the groups.
-;;
-;;    e.g. `help for `get something commands'' is >?.
-;;
-;;    BTW, The prefix ? is for help related command.
-;;    So `? >' can stand for "show the help for get-something related
-;;    command". In other word, prefix and suffix is swappable if
-;;    prefix or suffix is `?'.
-;;
-;; 3. Upper case for commands taking longer time to be executed.
-;; 4. Lower case for commands taking shorter time to be executed.
-;; 5. dired's binding is also helpful.
-;;
-;;
-;; - Concrete Rules:
-;;
-
-;; t  ?    list all toggles
-;; c       xetla-edit-log
-;; RET     Open the thing at point
-;;
-
-;;
-;; Definitions for key concrete rules
-;;
-
-;; common keys
-(defvar xetla-key-help        ??)        ; help
-(defvar xetla-key-mark-prefix ?*)   ; other mark related command prefix
-(defvar xetla-key-apply-from-here ?.)    ; apply something from here
-(defvar xetla-key-add-bookmark    ?b)    ; add this to bookmark
-(defvar xetla-key-get      ?>)           ; prefix for getting something
-(defvar xetla-key-reflect  ?<)           ; mirror, apply, install...
-(defvar xetla-key-parent   ?^)       ; visit uppper XX. e.g. directory
-(defvar xetla-key-apply-from-head ?@)    ; Do something head revision
-(defvar xetla-key-diff     ?=)           ; one shot
-
-(defvar xetla-key-add      ?a)           ; prefix for adding something
-(defvar xetla-key-show-bookmark ?b)      ; show bookmark
-(defvar xetla-key-diff-prefix ?d)
-(defvar xetla-key-file-diff ?d)
-(defvar xetla-key-tree-lint ?l)
-(defvar xetla-key-logs      ?L)
-(defvar xetla-key-ediff     ?e)
-(defvar xetla-key-log-entry ?a)
-(defvar xetla-key-refresh   ?g)           ; refresh buffer
-(defvar xetla-key-inventory ?i)           ; inventory
-(defvar xetla-key-mark      ?m)           ; mark
-(defvar xetla-key-next      ?n)           ; next item
-(defvar xetla-key-previous  ?p)           ; previous item
-(defvar xetla-key-quit      ?q)           ; quit
-(defvar xetla-key-remove    ?r)           ; prefix for remove something
-(defvar xetla-key-move      ?R)           ; prefix for move/rename something
-(defvar xetla-key-toggle    ?t)           ; prefix for toggle
-(defvar xetla-key-unmark    ?u)           ; unmark
-(defvar xetla-key-popup-menu ?\C-j)
-(defvar xetla-key-kill-ring-prefix ?w)
-(defvar xetla-key-commit    ?c)          ; actually edit-log, but
-                                        ; that's what you do when you
-                                        ; want to commit.
-(defvar xetla-key-update     ?u)           ; to run tla update
-(defvar xetla-key-replay     ?r)           ; to run tla replay
-(defvar xetla-key-star-merge ?s)           ; to run tla star-merge
-(defvar xetla-key-missing    ?m)           ; to run tla missing
-
-(defvar xetla-key-buffer-prefix ?B)   ; perfix for switching XX buffer
-(defvar xetla-key-directory-prefix ?D)
-(defvar xetla-key-merge-prefix ?M)
-(defvar xetla-key-tag ?T)
-(defvar xetla-key-revert ?U)
-(defvar xetla-key-working-copy ?W)       ; Affecting on working copy
-(defvar xetla-key-partner-file-prefix ?f)
-(defvar xetla-key-tagging-method-prefix ?#)
-(defvar xetla-key-id ?i)
-
-;; functions for creating key groups
-(defun xetla-key-group (prefix &rest keys)
-  (apply 'vector prefix keys))
-
-(defun  xetla-prefix-toggle (&rest keys)
-  (xetla-key-group xetla-key-toggle keys))
-
-(defun xetla-prefix-add (&rest keys)
-  (xetla-key-group xetla-key-add keys))
-
-(defun xetla-prefix-remove (&rest keys)
-  (xetla-key-group xetla-key-remove keys))
-
-(defun xetla-prefix-move (&rest keys)
-  (xetla-key-group xetla-key-move keys))
-
-(defun xetla-prefix-apply-from-here (&rest keys)
-  (xetla-key-group xetla-key-apply-from-here keys))
-
-(defun xetla-prefix-apply-from-head (&rest keys)
-  (xetla-key-group xetla-key-apply-from-head keys))
-
-(defun xetla-prefix-mark (&rest keys)
-  (xetla-key-group xetla-key-mark-prefix keys))
-
-(defun xetla-prefix-diff (&rest keys)
-  (xetla-key-group xetla-key-diff-prefix keys))
-
-(defun xetla-prefix-merge (&rest keys)
-  (xetla-key-group xetla-key-merge-prefix keys))
-
-(defun xetla-prefix-directory (&rest keys)
-  (xetla-key-group xetla-key-directory-prefix keys))
-
-(defun xetla-prefix-kill-ring (&rest keys)
-  (xetla-key-group xetla-key-kill-ring-prefix keys))
-
-(defun xetla-prefix-buffer (&rest keys)
-  (xetla-key-group xetla-key-buffer-prefix keys))
-
-(defun xetla-prefix-working-copy (&rest keys)
-  (xetla-key-group xetla-key-working-copy keys))
-
-(defun xetla-prefix-partner-file (&rest keys)
-  (xetla-key-group xetla-key-partner-file-prefix keys))
-
-(defun xetla-prefix-tag (&rest keys)
-  (xetla-key-group xetla-key-tag keys))
-
-(defun xetla-prefix-tagging-method (&rest keys)
-  (xetla-key-group xetla-key-tagging-method-prefix keys))
-
-;; predefined key vectors
-(defvar xetla-keyvec-toggle-set     (xetla-prefix-toggle ?+))
-(defvar xetla-keyvec-toggle-reset   (xetla-prefix-toggle ?-))
-(defvar xetla-keyvec-toggle-invert  (xetla-prefix-toggle ?~))
-
-
-(defvar xetla-keyvec-help    (vector xetla-key-help))
-(defvar xetla-keyvec-parent  (vector xetla-key-parent))
-(defvar xetla-keyvec-add     (vector xetla-key-add))
-(defvar xetla-keyvec-remove  (vector xetla-key-remove))
-(defvar xetla-keyvec-get     (vector xetla-key-get))
-(defvar xetla-keyvec-refresh (vector xetla-key-refresh))
-
-(defvar xetla-keyvec-next     (vector xetla-key-next))
-(defvar xetla-keyvec-previous (vector xetla-key-previous))
-
-(defvar xetla-keyvec-mark     (vector xetla-key-mark))
-(defvar xetla-keyvec-unmark   (vector xetla-key-unmark))
-(defvar xetla-keyvec-mark-all (xetla-prefix-mark ?*))
-(defvar xetla-keyvec-unmark-all (xetla-prefix-mark ?!))
-(defvar xetla-keyvec-quit (vector xetla-key-quit))
-(defvar xetla-keyvec-popup-menu   (vector xetla-key-popup-menu))
-
-
-
-(defvar xetla-keyvec-ediff (vector xetla-key-ediff))
-
-(defvar xetla-keyvec-tree-lint (vector xetla-key-tree-lint))
-
-(defvar xetla-keyvec-logs      (vector xetla-key-logs))
-
-(defvar xetla-keyvec-log-entry (vector xetla-key-log-entry))
-
-(defvar xetla-keyvec-diff (vector xetla-key-diff))
-
-(defvar xetla-keyvec-file-diff (vector xetla-key-file-diff))
-
-(defvar xetla-keyvec-file-diff (vector xetla-key-file-diff))
-
-(defvar xetla-keyvec-commit (vector xetla-key-commit))
-
-(defvar xetla-keyvec-update     (vector xetla-key-update))
-(defvar xetla-keyvec-replay     (vector xetla-key-replay))
-(defvar xetla-keyvec-star-merge (vector xetla-key-star-merge))
-
-(defvar xetla-keyvec-reflect  (vector xetla-key-reflect))
-(defvar xetla-keyvec-revert   (vector xetla-key-revert))
-
-
-(defvar xetla-keyvec-inventory (vector xetla-key-inventory))
-
-
-(defvar xetla-keyvec-show-bookmark (vector xetla-key-show-bookmark))
-(defvar xetla-keyvec-add-bookmark (vector xetla-key-add-bookmark))
-
-(defvar xetla-keyvec-tag (vector xetla-key-tag))
-(defvar xetla-keyvec-kill-ring (vector xetla-key-kill-ring-prefix))
-
-(defvar xetla-keyvec-id (vector xetla-key-id))
-(defvar xetla-keyvec-toggle (vector xetla-key-toggle))
-;;
-;; Global
-;;
-
-(defvar xetla-global-keymap
-  (let ((map (make-sparse-keymap)))
-    (define-key map xetla-keyvec-log-entry     'xetla-add-log-entry)
-    (define-key map [?A] 'xetla-archives)
-    (define-key map xetla-keyvec-show-bookmark 'xetla-bookmarks)
-    (define-key map xetla-keyvec-file-diff     'xetla-file-diff)
-    (define-key map xetla-keyvec-ediff         'xetla-file-ediff)
-    (define-key map [?o]                      'xetla-file-view-original)
-    (define-key map xetla-keyvec-diff          'xetla-changes)
-    (define-key map xetla-keyvec-commit        'xetla-edit-log)
-    (define-key map [?t]                      'xetla-tag-insert)
-    (define-key map xetla-keyvec-inventory     'xetla-inventory)
-    (define-key map [?r]                      'xetla-tree-revisions)
-    (define-key map xetla-keyvec-logs          'xetla-logs)
-    (define-key map xetla-keyvec-tree-lint     'xetla-tree-lint)
-    (define-key map xetla-keyvec-update        'xetla-update)
-    (define-key map xetla-keyvec-help          'xetla-help)
-    map)
-  "Global keymap used by Xetla.")
-
-
-(define-key ctl-x-4-map [?T] 'xetla-add-log-entry)
-
-;;
-;; Minibuffer(for reading engine)
-;;
-(defvar xetla-name-read-partner-menu (cons "Insert Partner Version" nil))
-(fset 'xetla-name-read-partner-menu (cons 'keymap xetla-name-read-partner-menu))
-(defvar xetla-name-read-bookmark-menu (cons "Insert Version in Bookmarks" nil))
-(fset 'xetla-name-read-bookmark-menu (cons 'keymap xetla-name-read-bookmark-menu))
-
-
-(defvar xetla-name-read-extension-keydefs
-  '(([(control r)] . xetla-name-read-refresh-cache)
-    ([(meta *)]    . xetla-name-read-insert-default-archive)
-    ([(meta \.)]   . xetla-name-read-insert-info-at-point)
-    ([(meta \;)]   . xetla-name-read-insert-version-associated-with-default-directory)
-    ([(control n)] . xetla-name-read-insert-partner-next)
-    ([(control p)] . xetla-name-read-insert-partner-previous)
-    ([(control v)] . xetla-name-read-insert-bookmark-next)
-    ([(meta v)]    . xetla-name-read-insert-bookmark-previous)
-    ([(meta ^)]    . xetla-name-read-insert-ancestor)
-    ([(control h)] . xetla-name-read-help)
-    ([(meta \?)]    . xetla-name-read-inline-help))
-    "Key definitions table for `xetla-name-read-minibuf-map'.
-The reason these definitions are defined separately from
-`xetla-name-read-minibuf-map' is that to reuse these definitions
-in `xetla-name-read-help'. Don't forget to evalute
-`xetla-name-read-minibuf-map' again after updating this value.")
-
-
-(defvar xetla-name-read-minibuf-map
-  (let ((map (copy-keymap minibuffer-local-completion-map)))
-    ;; Keys
-    (mapc
-     (lambda (pair)
-       (let ((key (car pair))
-             (func (cdr pair)))
-         (define-key map key func)))
-     xetla-name-read-extension-keydefs)
-    ;; Menus
-    (define-key map [menu-bar xetla]
-      (cons "XEtla" (make-sparse-keymap "XEtla")))
-    (define-key map [menu-bar xetla refresh]
-      (list 'menu-item "Refresh Completion Cache"
-            'xetla-name-read-refresh-cache))
-    (define-key map [menu-bar xetla ancestor]
-      (list 'menu-item "Insert Ancestor"
-            'xetla-name-read-insert-ancestor
-            :enable '(and
-                      (window-minibuffer-p)
-                      (equal "" (buffer-substring))
-                      (member archive '(prompt maybe))
-                      (not (eq this-command 'xetla-compute-direct-ancestor))
-                      )))
-    (define-key map [menu-bar xetla default]
-      (list 'menu-item "Insert Default Archive"
-            'xetla-name-read-insert-default-archive
-            :enable '(and
-                      (window-minibuffer-p)
-                      (equal "" (buffer-substring))
-                      (member archive '(prompt maybe)))))
-    (define-key map [menu-bar xetla here]
-      (list 'menu-item "Insert Thing at Point"
-            'xetla-name-read-insert-info-at-point
-            :enable '(and (window-minibuffer-p)
-                          (equal "" (buffer-substring))
-                          xetla-name-read-insert-info-at-point)))
-    (define-key map [menu-bar xetla bookmark]
-      (list 'menu-item "Insert Version in Bookmark" 'xetla-name-read-bookmark-menu
-            :enable '(let* ((l (condition-case nil
-                                   (let ((default-version (xetla-tree-version-list default-directory)))
-                                     (xetla-bookmarks-get-partner-versions default-version))
-                                 (error nil))))
-                       (and l (< 0 (length l))))))
-    (define-key map [menu-bar xetla partner]
-      (list 'menu-item "Insert Partner Version" 'xetla-name-read-partner-menu
-            :enable '(let* ((l (condition-case nil (xetla-partner-list)
-                                 (error nil))))
-                       (and l (< 0 (length l))))))
-    map)
-  "Keymap to input a gnuarch revision at the minibuffer.")
-
-;;
-;; Context keymap template
-;;
-(defvar xetla-context-map-template
-  (let ((map (make-sparse-keymap)))
-    ;; TODO: [return[, "\C-m" => xetla-generic-context-action
-    (define-key map (xetla-prefix-apply-from-here xetla-key-help) 'describe-bindings)
-    (define-key map xetla-keyvec-help 'describe-mode)
-    (define-key map [button3] 'xetla-generic-popup-menu)
-    (define-key map xetla-keyvec-popup-menu 'xetla-generic-popup-menu-by-keyboard)
-    map)
-  "Template for keymaps used in items, files, changes, etc.")
-
-;;
-;; Bookmarks mode
-;;
-(defvar xetla-bookmarks-mode-map
-  (let ((map (make-sparse-keymap)))
-    (define-key map xetla-keyvec-help 'describe-mode)
-    ;; Move
-    (define-key map xetla-keyvec-next       'xetla-bookmarks-next)
-    (define-key map xetla-keyvec-previous   'xetla-bookmarks-previous)
-    (define-key map [?N] 'xetla-bookmarks-move-down)
-    (define-key map [?P] 'xetla-bookmarks-move-up)
-    ;; Actions
-    (define-key map (xetla-prefix-merge xetla-key-star-merge)
-      'xetla-bookmarks-star-merge)
-    (define-key map (xetla-prefix-merge xetla-key-replay)
-      'xetla-bookmarks-replay)
-    (define-key map (xetla-prefix-merge xetla-key-update)
-      'xetla-bookmarks-update)
-    (define-key map (xetla-prefix-merge xetla-key-missing)
-      'xetla-bookmarks-missing)
-    (define-key map (xetla-prefix-merge xetla-key-tag)
-      'xetla-bookmarks-tag)
-    (define-key map [?o] 'xetla-bookmarks-open-tree)
-    (define-key map [(control x) (control f)] 'xetla-bookmarks-find-file)
-    (define-key map xetla-keyvec-diff 'xetla-bookmarks-changes)
-    (define-key map xetla-keyvec-get  'xetla-bookmarks-get)
-    (define-key map "\C-m"           'xetla-bookmarks-goto)
-    ;; Marks
-    (define-key map xetla-keyvec-mark       'xetla-bookmarks-mark)
-    (define-key map xetla-keyvec-unmark     'xetla-bookmarks-unmark)
-    (define-key map xetla-keyvec-unmark-all 'xetla-bookmarks-unmark-all)
-    (define-key map (xetla-prefix-mark ?g)  'xetla-bookmarks-select-by-group)
-    ;; Partners
-    (define-key map [(meta p)] 'xetla-bookmarks-marked-are-partners)
-    (define-key map (xetla-prefix-add    ?p)
-      'xetla-bookmarks-add-partner-interactive)
-    (define-key map (xetla-prefix-remove ?p)
-      'xetla-bookmarks-delete-partner-interactive)
-    (define-key map (xetla-prefix-partner-file ?r)
-      'xetla-bookmarks-add-partners-from-file)
-    (define-key map (xetla-prefix-partner-file ?w)
-      'xetla-bookmarks-write-partners-to-file)
-    ;; Bookmark manipulation
-    (define-key map (xetla-prefix-add    ?b) 'xetla-bookmarks-add)
-    (define-key map (xetla-prefix-remove ?b) 'xetla-bookmarks-delete)
-    (define-key map [?e] 'xetla-bookmarks-edit)
-    (define-key map xetla-keyvec-toggle  'xetla-bookmarks-toggle-details)
-    ;; Fields
-    (define-key map (xetla-prefix-add    ?t) 'xetla-bookmarks-add-tree-interactive)
-    (define-key map (xetla-prefix-remove ?t) 'xetla-bookmarks-delete-tree-interactive)
-    (define-key map (xetla-prefix-add    ?g) 'xetla-bookmarks-add-group-interactive)
-    (define-key map (xetla-prefix-remove ?g) 'xetla-bookmarks-delete-group-interactive)
-    (define-key map (xetla-prefix-add    ?n) 'xetla-bookmarks-add-nickname-interactive)
-    (define-key map (xetla-prefix-remove ?n) 'xetla-bookmarks-delete-nickname-interactive)
-    ;; Switch to other buffers
-    (define-key map xetla-keyvec-inventory 'xetla-bookmarks-inventory)
-    (define-key map (xetla-prefix-buffer ?p) 'xetla-show-process-buffer)
-    (define-key map (xetla-prefix-buffer ?L) 'xetla-open-internal-log-buffer)
-    (define-key map xetla-keyvec-quit 'xetla-buffer-quit)
-    map)
-  "Keymap used in `xetla-bookmarks-mode' buffers.")
-
-(defvar xetla-bookmarks-entry-map
-  (let ((map (copy-keymap xetla-context-map-template)))
-    (define-key map [button2] 'xetla-bookmarks-goto-by-mouse)
-    map)
-  "Keymap used on entries in `xetla-bookmarks-mode' buffers.")
-
-;;
-;; Inventory mode
-;;
-(defvar xetla-inventory-mode-map
-  (let ((map (make-sparse-keymap)))
-    (define-key map xetla-keyvec-help    'describe-mode)
-    (define-key map xetla-keyvec-refresh 'xetla-generic-refresh)
-    (define-key map xetla-keyvec-add     'xetla-inventory-add-files)
-    (define-key map xetla-keyvec-remove  'xetla-inventory-remove-files)
-    (define-key map xetla-keyvec-quit    'xetla-buffer-quit)
-    (define-key map xetla-keyvec-next     'xetla-inventory-next)
-    (define-key map xetla-keyvec-previous 'xetla-inventory-previous)
-    (define-key map xetla-keyvec-parent   'xetla-inventory-parent-directory)
-    ;;
-    ;;
-    ;;
-    (define-key map [?X] 'xetla-inventory-delete-files)
-    (define-key map (xetla-prefix-move xetla-key-move) 'xetla-inventory-move)
-    (define-key map xetla-keyvec-commit 'xetla-inventory-edit-log) ;; mnemonic for commit
-    (define-key map [?l] 'xetla-changelog)
-    (define-key map xetla-keyvec-logs 'xetla-logs)
-    ;;
-    ;; Find file group
-    ;;
-    (define-key map [?f] 'xetla-inventory-find-file)
-    (define-key map [return] 'xetla-inventory-find-file)
-    (define-key map "\C-m" 'xetla-inventory-find-file)
-    (define-key map [?o] 'xetla-generic-find-file-other-window)
-    (define-key map [?v] 'xetla-generic-view-file)
-    ;;
-    ;; Diffs group
-    ;;
-    (define-key map (xetla-prefix-merge xetla-key-missing)
-      'xetla-inventory-missing)
-    (define-key map (xetla-prefix-diff xetla-key-diff)
-      'xetla-inventory-changes)
-    (define-key map (xetla-prefix-diff ?l) 'xetla-changes-last-revision)
-    (define-key map (xetla-prefix-diff xetla-key-ediff)
-      'xetla-inventory-file-ediff)
-    (define-key map (xetla-prefix-diff xetla-key-get)
-      'xetla-inventory-delta)
-    ;; Alias for above bindings
-    (define-key map xetla-keyvec-diff    'xetla-inventory-changes)
-    (define-key map xetla-keyvec-ediff   'xetla-inventory-file-ediff)
-    ;;
-    (define-key map xetla-keyvec-reflect 'xetla-inventory-mirror)
-    ;;
-    ;; Merge group
-    ;;
-    (define-key map (xetla-prefix-merge xetla-key-star-merge)
-      'xetla-inventory-star-merge)
-    (define-key map (xetla-prefix-merge xetla-key-replay)
-      'xetla-inventory-replay)
-    (define-key map (xetla-prefix-merge xetla-key-update)
-      'xetla-inventory-update)
-    (define-key map (xetla-prefix-merge xetla-key-reflect)
-      'xetla-inventory-apply-changeset)
-    ;;
-    ;; Buffers group
-    ;;
-    (define-key map (xetla-prefix-buffer ?p) 'xetla-show-process-buffer)
-    (define-key map (xetla-prefix-buffer ?L) 'xetla-open-internal-log-buffer)
-    (define-key map (xetla-prefix-buffer xetla-key-show-bookmark) 'xetla-bookmarks)
-    ;;
-    ;; Undo and redo group
-    ;;
-    (define-key map xetla-keyvec-revert        'xetla-inventory-revert)
-    (define-key map (xetla-prefix-working-copy xetla-key-revert) 'xetla-inventory-undo)
-    (define-key map (xetla-prefix-working-copy ?R) 'xetla-inventory-redo)
-    ;;
-    ;; Patches group
-    ;;
-    (define-key map (xetla-prefix-working-copy ?S) 'xetla-changes-save)
-    (define-key map (xetla-prefix-working-copy ?s) 'xetla-changes-save-as-tgz)
-    (define-key map (xetla-prefix-working-copy ?V) 'xetla-show-changeset)
-    (define-key map (xetla-prefix-working-copy ?v) 'xetla-show-changeset-from-tgz)
-    (define-key map (xetla-prefix-working-copy ?A) 'xetla-inventory-apply-changeset)
-    (define-key map (xetla-prefix-working-copy ?a) 'xetla-inventory-apply-changeset-from-tgz)
-    ;;
-    ;; Kill ring group
-    ;;
-    (define-key map (xetla-prefix-kill-ring ?a) 'xetla-save-archive-to-kill-ring)
-    ;;
-    ;; Tree lint
-    ;;
-    (define-key map (xetla-prefix-working-copy xetla-key-tree-lint)
-      'xetla-tree-lint)
-    ;;
-    ;; Mark group
-    ;;
-    (define-key map (xetla-prefix-mark xetla-key-mark) 'xetla-inventory-mark-file)
-    (define-key map (xetla-prefix-mark xetla-key-unmark) 'xetla-inventory-unmark-file)
-    ;; (define-key map xetla-keyvec-mark-all      'xetla-inventory-mark-all)
-    (define-key map xetla-keyvec-unmark-all    'xetla-inventory-unmark-all)
-    ;; Alias for above bindings
-    (define-key map xetla-keyvec-mark          'xetla-inventory-mark-file)
-    (define-key map xetla-keyvec-unmark        'xetla-inventory-unmark-file)
-    ;;
-    ;; Tagging method
-    ;;
-    (define-key map (xetla-prefix-tagging-method ?=) 'xetla-edit-=tagging-method-file)
-    (define-key map (xetla-prefix-tagging-method ?.) 'xetla-edit-.arch-inventory-file)
-    ;;
-    ;; Exclude, junk, precious, unrecognized...
-    ;;
-    (define-key map (xetla-prefix-move ?j) 'xetla-inventory-make-junk)
-    (define-key map (xetla-prefix-move ?,) 'xetla-inventory-make-junk)
-    (define-key map (xetla-prefix-move ?p) 'xetla-inventory-make-precious)
-    (define-key map (xetla-prefix-move ?+) 'xetla-inventory-make-precious)
-    (define-key map (xetla-prefix-tagging-method ?M) 'xetla-generic-set-id-tagging-method)
-    (define-key map (xetla-prefix-tagging-method ?V) 'xetla-generic-set-tree-version)
-    (define-key map (xetla-prefix-tagging-method ?x) 'xetla-generic-add-to-exclude) ; alias
-    (define-key map (xetla-prefix-tagging-method ?e) 'xetla-generic-add-to-exclude) ; alias
-    (define-key map (xetla-prefix-tagging-method ?j) 'xetla-generic-add-to-junk)
-    (define-key map (xetla-prefix-tagging-method ?b) 'xetla-generic-add-to-backup)
-    (define-key map (xetla-prefix-tagging-method ?~) 'xetla-generic-add-to-backup) ; alias
-    (define-key map (xetla-prefix-tagging-method ?p) 'xetla-generic-add-to-precious)
-    (define-key map (xetla-prefix-tagging-method ?u) 'xetla-generic-add-to-unrecognized)
-    ;;
-    ;; Toggles
-    ;;
-    (define-key map xetla-keyvec-toggle-set    'xetla-inventory-set-all-toggle-variables)
-    (define-key map xetla-keyvec-toggle-reset  'xetla-inventory-reset-all-toggle-variables)
-    (define-key map xetla-keyvec-toggle-invert 'xetla-inventory-toggle-all-toggle-variables)
-    map)
-  "Keymap used in `xetla-inventory-mode' buffers.")
-
-(defvar xetla-inventory-item-map
-  (let ((map (copy-keymap xetla-context-map-template)))
-    (define-key map [button2] 'xetla-inventory-find-file-by-mouse)
-    map)
-  "Keymap used on items in `xetla-inventory-mode' buffers.")
-
-(defvar xetla-inventory-default-version-map
-  (let ((map (copy-keymap xetla-context-map-template)))
-    (define-key map [return] 'xetla-generic-set-tree-version)
-    (define-key map "\C-m" 'xetla-generic-set-tree-version)
-    map)
-  "Keymap used on the default version field in `xetla-inventory-mode' buffers.")
-
-(defvar xetla-inventory-tagging-method-map
-  (let ((map (copy-keymap xetla-context-map-template)))
-    (define-key map [button2] 'xetla-generic-set-id-tagging-method-by-mouse)
-    (define-key map [return] 'xetla-generic-set-id-tagging-method)
-    (define-key map "\C-m" 'xetla-inventory-id-tagging-method)
-    map)
-  "Keymap used on the tagging method field in `xetla-inventory-mode' buffers.")
-
-
-(defconst xetla-inventory-file-types-manipulators
-  '((?S xetla-inventory-display-source
-        xetla-inventory-toggle-source ?s "source")
-    (?P xetla-inventory-display-precious
-        xetla-inventory-toggle-precious ?p "precious")
-    (?J xetla-inventory-display-junk
-        xetla-inventory-toggle-junk ?j "junk")
-    (?B xetla-inventory-display-backup
-        xetla-inventory-toggle-backup ?b "backup")
-    (?T xetla-inventory-display-tree
-        xetla-inventory-toggle-tree ?t "tree root")
-    (?U xetla-inventory-display-unrecognized
-        xetla-inventory-toggle-unrecognized ?u "unrecognized"))
-  "List of possible file types in inventory.")
-
-(dolist (type-arg xetla-inventory-file-types-manipulators)
-  (define-key xetla-inventory-mode-map `[?t ,(cadddr type-arg)] (caddr type-arg)))
-
-
-(dolist (type-arg xetla-inventory-file-types-manipulators)
-  (eval `(defcustom ,(cadr type-arg) t
-           ,(concat "Whether " (nth 4 type-arg)
-                    " should be printed in inventory")
-           :group 'xetla-inventory
-           :type 'boolean)))
-
-(defvar xetla-tree-lint-mode-map
-  (let ((map (make-sparse-keymap)))
-    (define-key map xetla-keyvec-help    'describe-mode)
-    (define-key map xetla-keyvec-refresh 'xetla-generic-refresh)
-    (define-key map xetla-keyvec-add     'xetla-tree-lint-add-files)
-    (define-key map xetla-keyvec-remove  'xetla-tree-lint-delete-files)
-    (define-key map xetla-keyvec-quit    'xetla-buffer-quit)
-    (define-key map xetla-keyvec-next    'xetla-tree-lint-next)
-    (define-key map xetla-keyvec-previous 'xetla-tree-lint-previous)
-    (define-key map [down]              'xetla-tree-lint-next)
-    (define-key map [up]                'xetla-tree-lint-previous)
-    (define-key map xetla-keyvec-id      'xetla-tree-lint-regenerate-id)
-    (define-key map (xetla-prefix-move ?j) 'xetla-tree-lint-make-junk)
-    (define-key map (xetla-prefix-move ?,) 'xetla-tree-lint-make-junk)
-    (define-key map (xetla-prefix-move ?p) 'xetla-tree-lint-make-precious)
-    (define-key map (xetla-prefix-move ?+) 'xetla-tree-lint-make-precious)
-    ;;
-    (define-key map (xetla-prefix-tagging-method ?=) 'xetla-edit-=tagging-method-file)
-    (define-key map (xetla-prefix-tagging-method ?.) 'xetla-edit-.arch-inventory-file)
-    (define-key map (xetla-prefix-tagging-method ?M) 'xetla-generic-set-id-tagging-method)
-    (define-key map (xetla-prefix-tagging-method ?V) 'xetla-generic-set-tree-version)
-    (define-key map (xetla-prefix-tagging-method ?x) 'xetla-generic-add-to-exclude) ; alias
-    (define-key map (xetla-prefix-tagging-method ?e) 'xetla-generic-add-to-exclude) ; alias
-    (define-key map (xetla-prefix-tagging-method ?j) 'xetla-generic-add-to-junk)
-    (define-key map (xetla-prefix-tagging-method ?b) 'xetla-generic-add-to-backup)
-    (define-key map (xetla-prefix-tagging-method ?~) 'xetla-generic-add-to-backup) ; alias
-    (define-key map (xetla-prefix-tagging-method ?p) 'xetla-generic-add-to-precious)
-    (define-key map (xetla-prefix-tagging-method ?u) 'xetla-generic-add-to-unrecognized)
-    ;;
-    (define-key map [return]            'xetla-generic-find-file-at-point)
-    (define-key map "\C-m"              'xetla-generic-find-file-at-point)
-    (define-key map [?o]                'xetla-generic-find-file-other-window)
-    (define-key map [?v]                'xetla-generic-view-file)
-    ;;
-    ;; Mark group
-    ;;
-    (define-key map (xetla-prefix-mark xetla-key-mark) 'xetla-tree-lint-mark-file)
-    (define-key map (xetla-prefix-mark xetla-key-unmark) 'xetla-tree-lint-unmark-file)
-    ;; TODO
-    ;; (define-key map xetla-keyvec-mark-all      'xetla-tree-lint-mark-all)
-    (define-key map xetla-keyvec-unmark-all    'xetla-tree-lint-unmark-all)
-    ;; Alias for above bindings
-    (define-key map xetla-keyvec-mark          'xetla-tree-lint-mark-file)
-    (define-key map xetla-keyvec-unmark        'xetla-tree-lint-unmark-file)
-    ;;
-    ;; Buffers group
-    ;;
-    (define-key map (xetla-prefix-buffer ?p) 'xetla-show-process-buffer)
-    (define-key map (xetla-prefix-buffer ?L) 'xetla-open-internal-log-buffer)
-    (define-key map (xetla-prefix-buffer xetla-key-show-bookmark) 'xetla-bookmarks)
-    map)
-  "Keymap used in `xetla-tree-lint-mode' buffers.")
-
-(defvar xetla-tree-lint-file-map
-  (let ((map (copy-keymap xetla-context-map-template)))
-    (define-key map [button2] 'xetla-generic-find-file-at-point-by-mouse)
-    map)
-  "Keymap used on files in xetla-lint-mode buffers.")
-
-;;
-;; Cat-Log mdoe
-;;
-(defvar xetla-cat-log-mode-map
-  (let ((map (make-sparse-keymap)))
-    (define-key map xetla-keyvec-help 'describe-mode)
-    (define-key map xetla-keyvec-inventory 'xetla-pop-to-inventory)
-    (define-key map xetla-keyvec-quit 'xetla-buffer-quit)
-    map)
-  "Keymap used in `xetla-cat-log-mode' buffers.")
-
-;;
-;; Log edit mode
-;;
-(defvar xetla-log-edit-mode-map
-  (let ((map (make-sparse-keymap)))
-    (define-key map [(control ?c) (control ?c)] 'xetla-log-edit-done)
-    (define-key map [(control ?c) (control ?d)] 'xetla-changes)
-    (define-key map [(control ?c) (control ?l)] 'xetla-changelog)
-    (define-key map [(control ?c) (control ?m)] 'xetla-log-edit-insert-log-for-merge)
-    (define-key map [(control ?c)          ?m ]
-      'xetla-log-edit-insert-log-for-merge-and-headers)
-    (define-key map [(control ?c) (control ?p)] 'xetla-log-edit-insert-memorized-log)
-    (define-key map [(control ?c) (control ?q)] 'xetla-log-edit-abort)
-    (define-key map [(control ?c) (control ?s)] 'xetla-log-goto-summary)
-    (define-key map [(control ?c) (control ?b)] 'xetla-log-goto-body)
-    (define-key map [(control ?c) (control ?k)] 'xetla-log-edit-keywords)
-    (define-key map "\t" 'xetla-log-edit-next-field)
-    map)
-  "Keymap used in `xetla-log-edit-mode' buffers.")
-
-;;
-;; Archive list mode
-;;
-(defvar xetla-archive-list-mode-map
-  (let ((map (make-sparse-keymap)))
-    (define-key map xetla-keyvec-help 'describe-mode)
-    (define-key map (xetla-prefix-kill-ring ?a) 'xetla-save-archive-to-kill-ring)
-    (define-key map "\C-m" 'xetla-archive-list-categories)
-    (define-key map [return] 'xetla-archive-list-categories)
-
-    ;; Buffers group
-    (define-key map (xetla-prefix-buffer ?p) 'xetla-show-process-buffer)
-    (define-key map (xetla-prefix-buffer ?L) 'xetla-open-internal-log-buffer)
-    (define-key map (xetla-prefix-buffer xetla-key-show-bookmark) 'xetla-bookmarks)
-
-    (define-key map xetla-keyvec-add-bookmark 'xetla-bookmarks-add)
-    (define-key map [?o] 'xetla-archive-browse-archive)
-    (define-key map [?*] 'xetla-archive-select-default)
-    (define-key map (xetla-prefix-add ?r) 'xetla-register-archive)
-    (define-key map (xetla-prefix-add ?a) 'xetla-make-archive)
-    (define-key map (xetla-prefix-add ?m) 'xetla-archive-mirror-archive)
-    (define-key map xetla-keyvec-remove   'xetla-archive-unregister-archive)
-    (define-key map [?g] 'xetla-archives)
-    (define-key map [?s] 'xetla-archive-synchronize-archive)
-    (define-key map [?e] 'xetla-archive-edit-archive-location)
-    (define-key map [down] 'xetla-archive-next)
-    (define-key map [up] 'xetla-archive-previous)
-    (define-key map [?n] 'xetla-archive-next)
-    (define-key map [?p] 'xetla-archive-previous)
-    (define-key map xetla-keyvec-quit 'xetla-buffer-quit)
-    map)
-  "Keymap used in `xetla-archive-list-mode' buffers.")
-
-(defvar xetla-archive-archive-map
-  (let ((map (make-sparse-keymap)))
-    (define-key map [button2] 'xetla-archive-list-categories-by-mouse)
-    map)
-  "Keymap used archives in `xetla-archive-list-mode' buffers.")
-
-;;
-;; Category list mode
-;;
-(defvar xetla-category-list-mode-map
-  (let ((map (make-sparse-keymap)))
-    (define-key map xetla-keyvec-help 'describe-mode)
-    (define-key map "\C-m" 'xetla-category-list-branches)
-    (define-key map [return] 'xetla-category-list-branches)
-
-    ;; Buffers group
-    (define-key map (xetla-prefix-buffer ?p) 'xetla-show-process-buffer)
-    (define-key map (xetla-prefix-buffer ?L) 'xetla-open-internal-log-buffer)
-    (define-key map (xetla-prefix-buffer xetla-key-show-bookmark) 'xetla-bookmarks)
-
-    (define-key map xetla-keyvec-add-bookmark 'xetla-category-bookmarks-add)
-    (define-key map (xetla-prefix-apply-from-here
-                     xetla-key-add-bookmark) 'xetla-category-bookmarks-add-here)
-    (define-key map [?^] 'xetla-archives)
-    (define-key map (xetla-prefix-add ?c) 'xetla-category-make-category)
-    (define-key map [?g] 'xetla-category-refresh)
-    (define-key map [?s] 'xetla-category-mirror-archive)
-    (define-key map [down] 'xetla-category-next)
-    (define-key map [up] 'xetla-category-previous)
-    (define-key map [?n] 'xetla-category-next)
-    (define-key map [?p] 'xetla-category-previous)
-    (define-key map xetla-keyvec-quit 'xetla-buffer-quit)
-    map)
-  "Keymap used in `xetla-category-list-mode' buffers.")
-
-(defvar xetla-category-category-map
-  (let ((map (make-sparse-keymap)))
-    (define-key map [button2] 'xetla-category-list-branches-by-mouse)
-    map)
-  "Keymap used categories in `xetla-category-list-mode' buffers.")
-
-;;
-;; Branch list mode section
-;;
-(defvar xetla-branch-list-mode-map
-  (let ((map (make-sparse-keymap)))
-    (define-key map xetla-keyvec-help 'describe-mode)
-    (define-key map "\C-m" 'xetla-branch-list-versions)
-    (define-key map [return] 'xetla-branch-list-versions)
-
-    ;; Buffers group
-    (define-key map (xetla-prefix-buffer ?p) 'xetla-show-process-buffer)
-    (define-key map (xetla-prefix-buffer ?L) 'xetla-open-internal-log-buffer)
-    (define-key map (xetla-prefix-buffer xetla-key-show-bookmark) 'xetla-bookmarks)
-
-    (define-key map xetla-keyvec-parent 'xetla-branch-list-parent-category)
-    (define-key map (xetla-prefix-add ?b) 'xetla-branch-make-branch)
-    (define-key map [?>] 'xetla-branch-get-branch)
-    (define-key map [?g] 'xetla-branch-refresh)
-    (define-key map [?s] 'xetla-branch-mirror-archive)
-    (define-key map [down] 'xetla-category-next)
-    (define-key map [up] 'xetla-category-previous)
-    (define-key map [?n] 'xetla-category-next)
-    (define-key map [?p] 'xetla-category-previous)
-    (define-key map xetla-keyvec-quit 'xetla-buffer-quit)
-    (define-key map (xetla-prefix-apply-from-here
-                     xetla-key-add-bookmark) 'xetla-branch-bookmarks-add-here)
-    (define-key map xetla-keyvec-add-bookmark 'xetla-branch-bookmarks-add)
-    map)
-  "Keymap used in `xetla-branch-list-mode' buffers.")
-
-(defvar xetla-branch-branch-map
-  (let ((map (make-sparse-keymap)))
-    (define-key map [button2] 'xetla-branch-list-versions-by-mouse)
-    map)
-  "Keymap used branches in `xetla-branch-list-mode' buffers.")
-
-;;
-;; Version list mode
-;;
-(defvar xetla-version-list-mode-map
-  (let ((map (make-sparse-keymap)))
-    (define-key map xetla-keyvec-help 'describe-mode)
-    (define-key map "\C-m" 'xetla-version-list-revisions)
-    (define-key map [return] 'xetla-version-list-revisions)
-
-    ;; Buffers group
-    (define-key map (xetla-prefix-buffer ?p) 'xetla-show-process-buffer)
-    (define-key map (xetla-prefix-buffer ?L) 'xetla-open-internal-log-buffer)
-    (define-key map (xetla-prefix-buffer xetla-key-show-bookmark) 'xetla-bookmarks)
-
-    (define-key map xetla-keyvec-parent 'xetla-version-list-parent-branch)
-    (define-key map (xetla-prefix-add ?v) 'xetla-version-make-version)
-    (define-key map [?>] 'xetla-version-get-version)
-    (define-key map [?g] 'xetla-version-refresh)
-    (define-key map [?s] 'xetla-version-mirror-archive)
-    (define-key map [down] 'xetla-category-next)
-    (define-key map [up] 'xetla-category-previous)
-    (define-key map [?n] 'xetla-category-next)
-    (define-key map [?p] 'xetla-category-previous)
-    (define-key map xetla-keyvec-quit 'xetla-buffer-quit)
-    (define-key map (xetla-prefix-apply-from-here
-                     xetla-key-add-bookmark) 'xetla-version-bookmarks-add-here)
-    (define-key map xetla-keyvec-add-bookmark 'xetla-version-bookmarks-add)
-    (define-key map xetla-keyvec-tag 'xetla-version-tag)
-    map)
-  "Keymap used in `xetla-version-list-mode' buffers.")
-
-(defvar xetla-version-version-map
-  (let ((map (make-sparse-keymap)))
-    (define-key map [button2] 'xetla-version-list-revisions-by-mouse)
-    map)
-  "Keymap used versions in `xetla-version-list-mode' buffers.")
-
-;;
-;; Revision list mode
-;;
-(defvar xetla-revision-list-mode-map
-  (let ((map (make-sparse-keymap)))
-    (define-key map xetla-keyvec-help 'describe-mode)
-    (define-key map xetla-keyvec-parent 'xetla-revision-list-parent-version)
-    (define-key map [?> ?g] 'xetla-revision-get-revision)
-    (define-key map [?> ?C] 'xetla-revision-cache-revision)
-    (define-key map [?> ?L] 'xetla-revision-add-to-library)
-
-    ;; Buffers group
-    (define-key map (xetla-prefix-buffer ?p) 'xetla-show-process-buffer)
-    (define-key map (xetla-prefix-buffer ?L) 'xetla-open-internal-log-buffer)
-    (define-key map (xetla-prefix-buffer xetla-key-show-bookmark) 'xetla-bookmarks)
-
-    (define-key map [?b] 'xetla-bookmarks-add)
-    (define-key map (xetla-prefix-toggle ??) 'xetla-revision-toggle-help)
-    (define-key map (xetla-prefix-toggle ?d) 'xetla-revision-toggle-date)
-    (define-key map (xetla-prefix-toggle ?c) 'xetla-revision-toggle-creator)
-    (define-key map (xetla-prefix-toggle ?s) 'xetla-revision-toggle-summary)
-    (define-key map (xetla-prefix-toggle ?l) 'xetla-revision-toggle-library)
-    (define-key map (xetla-prefix-toggle ?m) 'xetla-revision-toggle-merges)
-    (define-key map (xetla-prefix-toggle ?b) 'xetla-revision-toggle-merged-by)
-    (define-key map (xetla-prefix-toggle ?r) 'xetla-revision-toggle-reverse)
-
-    ;;
-    ;; Star merge
-    ;; from here
-    (define-key map (xetla-prefix-apply-from-here
-                     xetla-key-star-merge) 'xetla-revision-star-merge)
-    ;; from head
-    (define-key map (xetla-prefix-apply-from-head xetla-key-star-merge)
-      'xetla-revision-star-merge-version)
-    (define-key map (xetla-prefix-merge xetla-key-star-merge)
-      'xetla-revision-star-merge-version)
-    (define-key map xetla-keyvec-star-merge 'xetla-revision-star-merge-version)
-
-    ;;
-    ;; Replay
-    ;; from here
-    (define-key map (xetla-prefix-apply-from-here xetla-key-replay)
-      'xetla-revision-replay)
-    ;; from head
-    (define-key map (xetla-prefix-apply-from-head xetla-key-replay)
-      'xetla-revision-replay-version)
-    (define-key map xetla-keyvec-replay 'xetla-revision-replay-version)
-
-    (define-key map (xetla-prefix-apply-from-here ?y)
-      'xetla-revision-sync-tree)
-    ;;
-    ;; Update
-    (define-key map (xetla-prefix-merge xetla-key-update)
-      'xetla-revision-update)
-    ;;
-    ;; Tag
-    ;; from here
-    (define-key map (xetla-prefix-apply-from-here
-                     xetla-key-tag) 'xetla-revision-tag-from-here)
-
-    (define-key map (xetla-prefix-tag
-                     xetla-key-apply-from-here) 'xetla-revision-tag-from-here)
-    ;; from head
-    (define-key map (xetla-prefix-apply-from-head
-                     xetla-key-tag) 'xetla-revision-tag-from-head)
-    (define-key map (xetla-prefix-tag
-                     xetla-key-apply-from-head) 'xetla-revision-tag-from-head)
-
-    (define-key map [?g] 'xetla-generic-refresh)
-    (define-key map [down] 'xetla-revision-next)
-    (define-key map [up] 'xetla-revision-prev)
-    (define-key map [?n] 'xetla-revision-next)
-    (define-key map [?p] 'xetla-revision-prev)
-    (define-key map [?N] 'xetla-revision-next-unmerged)
-    (define-key map [?P] 'xetla-revision-prev-unmerged)
-    (define-key map [?l] 'xetla-revision-cat-log)
-    (define-key map "\C-m" 'xetla-revision-show-changeset)
-    (define-key map [return] 'xetla-revision-show-changeset)
-    (define-key map xetla-keyvec-mark   'xetla-revision-mark-revision)
-    (define-key map xetla-keyvec-unmark 'xetla-revision-unmark-revision)
-    (define-key map (xetla-prefix-diff xetla-key-diff) 'xetla-revision-delta)
-    (define-key map (xetla-prefix-diff xetla-key-get)  'xetla-revision-store-delta)
-    (define-key map [?=] 'xetla-revision-changeset)
-    (define-key map (xetla-prefix-buffer ?p) 'xetla-show-process-buffer)
-    (define-key map (xetla-prefix-buffer ?L) 'xetla-open-internal-log-buffer)
-    (define-key map (xetla-prefix-buffer xetla-key-show-bookmark) 'xetla-bookmarks)
-    (define-key map xetla-keyvec-inventory 'xetla-pop-to-inventory)
-    (define-key map xetla-keyvec-quit 'xetla-buffer-quit)
-    (define-key map xetla-keyvec-add-bookmark 'xetla-revision-bookmarks-add)
-    map)
-  "Keymap used in `xetla-revision-list-mode' buffers.")
-
-(defstruct (xetla-revision)
-  revision ;; The revision, as a list
-  summary creator date
-  merges ;; List of patches merged by this revision
-  merged-by ;; List of patches merging this revision
-  )
-
-(defvar xetla-revision-revision-map
-  (let ((map (copy-keymap xetla-context-map-template)))
-    (define-key map [button2] 'xetla-revision-show-changeset-by-mouse)
-    map)
-  "Keymap used on revisions in `xetla-revision-list-mode' buffers.")
-
-;;
-;; Changes mode
-;;
-(defvar xetla-changes-mode-map
-  (let ((map (copy-keymap diff-mode-shared-map)))
-    (define-key map xetla-keyvec-help 'describe-mode)
-    (define-key map "\C-m" 'xetla-changes-jump-to-change)
-    (define-key map [return] 'xetla-changes-jump-to-change)
-    (define-key map [?=] 'xetla-changes-diff)
-    (define-key map xetla-keyvec-ediff   'xetla-changes-ediff)
-    (define-key map xetla-keyvec-refresh 'xetla-generic-refresh)
-    (define-key map xetla-keyvec-commit  'xetla-changes-edit-log)
-    (define-key map [?I] 'xetla-inventory)
-    (define-key map xetla-keyvec-inventory 'xetla-pop-to-inventory)
-    (define-key map xetla-keyvec-next      'xetla-changes-next)
-    (define-key map xetla-keyvec-previous  'xetla-changes-prev)
-    (define-key map xetla-keyvec-revert    'xetla-changes-revert)
-    (define-key map xetla-keyvec-quit      'xetla-buffer-quit)
-    (define-key map [?d] 'xetla-changes-rm)
-    (define-key map xetla-keyvec-mark   'xetla-changes-mark-file)
-    (define-key map xetla-keyvec-unmark 'xetla-changes-unmark-file)
-    (define-key map [?v] 'xetla-changes-view-source)
-    (define-key map xetla-keyvec-parent 'xetla-changes-master-buffer)
-    (define-key map [?j] 'xetla-changes-diff-or-list)
-    ;; Buffers group
-    (define-key map (xetla-prefix-buffer ?p) 'xetla-show-process-buffer)
-    (define-key map (xetla-prefix-buffer ?L) 'xetla-open-internal-log-buffer)
-    (define-key map (xetla-prefix-buffer xetla-key-show-bookmark) 'xetla-bookmarks)
-    map)
-  "Keymap used in `xetla-changes-mode'.")
-
-(defvar xetla-changes-file-map
-  (let ((map (copy-keymap xetla-context-map-template)))
-    (define-key map [button2] 'xetla-changes-jump-to-change-by-mouse)
-    map)
-  "Keymap used on files in `xetla-changes-mode' buffers.")
-
-
-;;
-;; ChangeLog mode section
-;;
-(defvar xetla-changelog-mode-map
-  (let ((map (copy-keymap change-log-mode-map)))
-    (define-key map xetla-keyvec-quit 'xetla-buffer-quit)
-    map)
-  "Keymap used in `xetla-changelog-mode'.")
-
-
-;;
-;; Log buffer mode section
-;;
-(defvar xetla-log-buffer-mode-map
-  (let ((map (make-sparse-keymap)))
-    (define-key map xetla-keyvec-help 'describe-mode)
-    (define-key map [?o] 'xetla-switch-to-output-buffer)
-    (define-key map "\C-m" 'xetla-switch-to-output-buffer)
-    (define-key map [?e] 'xetla-switch-to-error-buffer)
-    (define-key map [?r] 'xetla-switch-to-related-buffer)
-    (define-key map [?n] 'xetla-log-next)
-    (define-key map [?p] 'xetla-log-prev)
-    (define-key map xetla-keyvec-quit 'xetla-buffer-quit)
-    map)
-  "Keymap used in XEtla's log buffer.")
-
-;;
-;; Process buffer mode section
-;;
-(defvar xetla-process-buffer-mode-map
-  (let ((map (make-sparse-keymap)))
-    (define-key map (xetla-prefix-buffer ?L) 'xetla-open-internal-log-buffer)
-
-    (define-key map xetla-keyvec-inventory 'xetla-show-inventory-buffer)
-    (define-key map xetla-keyvec-quit 'xetla-buffer-quit)
-    map)
-  "Keymap used in XEtla's log buffer.")
-
-;;
-;; Log edit buffer mode section
-;;
-
-(defvar xetla-log-edit-keywords-mode-map
-  (let ((map (make-sparse-keymap)))
-    (define-key map [?n] 'xetla-log-edit-keywords-next)
-    (define-key map [?p] 'xetla-log-edit-keywords-previous)
-    (define-key map [?m] 'xetla-log-edit-keywords-mark)
-    (define-key map [?u] 'xetla-log-edit-keywords-unmark)
-    (define-key map [?t] 'xetla-log-edit-keywords-toggle-mark)
-    (define-key map [?* ?!] 'xetla-log-edit-keywords-unmark-all)
-    (define-key map [?* ?*] 'xetla-log-edit-keywords-mark-all)
-    (define-key map "\C-c\C-c" 'xetla-log-edit-keywords-insert)
-    map)
-  "Keymap used in xetla-log-edit-keywords-mode buffers.")
-
-\f
-;; --------------------------------------
-;; Menu entries
-;; --------------------------------------
-;;
-;; Conventions
-;;
-;; 1. Each Nouns and verbs in menu items are should be capitalized.
-;; 2. TODO: Consider menu items order.
-
-;;
-;; Common submenus
-;;
-
-(defconst xetla-.arch-inventory-menu-list
-  '("Put to .arch-inventory"
-    ["Junk"         xetla-generic-add-to-junk         t]
-    ["Backup"       xetla-generic-add-to-backup       t]
-    ["Precious"     xetla-generic-add-to-precious     t]
-    ["Unrecognized" xetla-generic-add-to-unrecognized t]))
-
-(defconst xetla-=tagging-method-menu-list
-  '("Put to =tagging-method"
-    ["Junk"         (xetla-generic-add-to-junk t)     t]
-    ["Backup"       (xetla-generic-add-to-backup t)   t]
-    ["Precious"     (xetla-generic-add-to-precious t) t]
-    ["Unrecognized" (xetla-generic-add-to-junk t)     t]))
-
-
-;;
-;; Global
-;;
-
-(easy-menu-add-item
- (or (xetla-do-in-gnu-emacs menu-bar-tools-menu) nil)
- (or (xetla-do-in-xemacs '("Tools")) nil)
- '("XEtla"
-   ["Browse Archives" xetla-archives t]
-   ["Show Bookmarks" xetla-bookmarks t]
-   ["Start New Project" xetla-start-project t]
-   "--"
-   "Tree Commands:"
-   ["View Changes" xetla-changes t]
-   ["View Inventory" xetla-inventory t]
-   ["View Tree Lint" xetla-tree-lint t]
-   ["Show Tree Revisions" xetla-tree-revisions t]
-   ["Edit Arch Log" xetla-edit-log t]
-   "--"
-   "File Commands:"
-   ["Insert Arch Tag" xetla-tag-insert t]
-   ["Add Log Entry" xetla-add-log-entry t]
-   ["View File Diff" xetla-file-diff t]
-   ["View File Ediff" xetla-file-ediff t]
-   ["View Original" xetla-file-view-original t]
-   ["View Conflicts" xetla-view-conflicts t]
-   "--"
-   ("Quick Configuration"
-    ["Three Way Merge" xetla-toggle-three-way-merge
-     :style toggle :selected xetla-three-way-merge]
-    ["Use --forward" xetla-toggle-use-forward-option
-     :style toggle :selected xetla-use-forward-option]
-    ["Use --skip-present" xetla-toggle-use-skip-present-option
-     :style toggle :selected xetla-use-skip-present-option]
-    )
-   )
- "PCL-CVS")
-
-;;
-;; Bookmarks mode
-;;
-(defconst xetla-bookmarks-entry-menu-list
-  '("Bookmark Entry"
-    ["Delete"         xetla-bookmarks-delete    t]
-    ["Goto Location"  xetla-bookmarks-goto      t]
-    ("File Tree"
-     ["Find File"      xetla-bookmarks-find-file t]
-     ["Run Dired"      xetla-bookmarks-open-tree t]
-     ["Run Inventory"  xetla-bookmarks-inventory t]
-     ["View Changes"   xetla-bookmarks-changes t]
-     )
-    ("Merge"
-     ["View Missing Patches" xetla-bookmarks-missing t]
-     ["Replay"       xetla-bookmarks-replay  t]
-     ["Update"       xetla-bookmarks-update  t]
-     ["Star-merge"   xetla-bookmarks-star-merge t]
-     )
-    ("Edit"
-     ["Edit Bookmark"    xetla-bookmarks-edit t]
-     ["Add Nickname"     xetla-bookmarks-add-nickname-interactive    t]
-     ["Remove Nickname"  xetla-bookmarks-delete-nickname-interactive t]
-     ["Add Local Tree"   xetla-bookmarks-add-tree-interactive        t]
-     ["Remove Local Tree" xetla-bookmarks-delete-tree-interactive    t]
-     ["Add Group"        xetla-bookmarks-add-group-interactive       t]
-     ["Remove Group"     xetla-bookmarks-delete-group-interactive    t]
-     ["Add Partner"      xetla-bookmarks-add-partner-interactive     t]
-     ["Remove Partner"   xetla-bookmarks-delete-partner-interactive  t]
-     )
-    ("Partners"
-     ["Add Partner"      xetla-bookmarks-add-partner-interactive     t]
-     ["Remove Partner"   xetla-bookmarks-delete-partner-interactive  t]
-     ["Write to Partner File" xetla-bookmarks-write-partners-to-file t]
-     ["Load from Partner File" xetla-bookmarks-add-partners-from-file t]
-     ["View Missing Patches" xetla-bookmarks-missing t]
-     ))
-  "Used both for the local and the global menu."
-  )
-
-(easy-menu-define xetla-bookmarks-mode-menu xetla-bookmarks-mode-map
-  "`xetla-bookmarks-mode' menu"
-  `("XEtla-Bookmarks"
-    ["Add Bookmark" xetla-bookmarks-add t]
-    ["Show Details" xetla-bookmarks-toggle-details
-     :style toggle :selected xetla-bookmarks-show-details]
-    ["Select by Group" xetla-bookmarks-select-by-group t]
-    ["Cleanup 'local-tree fields" xetla-bookmarks-cleanup-local-trees t]
-    ,xetla-bookmarks-entry-menu-list
-    ))
-
-(easy-menu-define xetla-bookmarks-entry-menu nil
-  "Menu used on a xetla bookmark entry."
-  xetla-bookmarks-entry-menu-list)
-
-;;
-;; Inventory mode
-;;
-(easy-menu-define xetla-inventory-mode-partners-menu xetla-inventory-mode-map
-  "`xetla-inventory-mode' partners menu"
-  '("Partners"
-    ["Add Partner..." xetla-partner-add t]
-    ("Set Tree Version" :filter (lambda (x)
-                                  (xetla-partner-create-menu
-                                   'xetla-generic-set-tree-version)))
-    "--"
-    ("Show Changes" :filter (lambda (x)
-                              (xetla-partner-create-menu
-                               '(lambda (x)
-                                  (xetla-changes current-prefix-arg
-                                               (list 'revision (xetla-name-split x)))))))
-    ("Show Missing" :filter (lambda (x)
-                              (xetla-partner-create-menu
-                               '(lambda (x)
-                                  (xetla-missing default-directory x)))))
-    "--"
-    ("Replay" :filter (lambda (x)
-                            (xetla-partner-create-menu
-                             'xetla-inventory-replay)))
-    ("Star-merge" :filter (lambda (x)
-                            (xetla-partner-create-menu
-                             'xetla-inventory-star-merge)))))
-
-(defconst xetla-inventory-item-menu-list
-  `("Inventory Item"
-    ["Open File" xetla-inventory-find-file t]
-    ["Redo"      xetla-inventory-redo      (xetla-inventory-maybe-undo-directory)]
-    "--"
-    ["Add"    xetla-inventory-add-files    t]
-    ["Move"   xetla-inventory-move         t]
-    ["Remove" xetla-inventory-remove-files t]
-    ["Delete" xetla-inventory-delete-files t]
-    "--"
-    ["Make Junk"     xetla-inventory-make-junk     t]
-    ["Make Precious" xetla-inventory-make-precious t]
-    ,xetla-.arch-inventory-menu-list
-    ,xetla-=tagging-method-menu-list)
-  "Used both in the context and the global menu for inventory.")
-
-(easy-menu-define xetla-inventory-mode-menu xetla-inventory-mode-map
-  "`xetla-inventory-mode' menu"
-  `("Inventory"
-    ["Edit Log" xetla-inventory-edit-log t]
-    "--"
-    ["Show Changes"   xetla-inventory-changes t]
-    ["Show Changelog" xetla-changelog t]
-    ["Show Logs"      xetla-logs t]
-    ["Show Missing"   xetla-inventory-missing t]
-    "--"
-    ,xetla-inventory-item-menu-list
-    "--"
-    ["Update"     xetla-inventory-update t]
-    ["Replay"     xetla-inventory-replay t]
-    ["Star-merge" xetla-inventory-star-merge t]
-    ("Changesets"
-     ["Save actual changes in directory" xetla-changes-save t]
-     ["Save actual changes in tarball" xetla-changes-save-as-tgz t]
-     ["View changeset from directory" xetla-show-changeset t]
-     ["View changeset from tarball" xetla-show-changeset-from-tgz t]
-     ["Apply changeset from directory" xetla-inventory-apply-changeset t]
-     ["Apply changeset from tarball" xetla-inventory-apply-changeset-from-tgz t]
-     )
-    "--"
-    ["Undo" xetla-inventory-undo t]
-    ["Redo" xetla-inventory-redo t]
-    "--"
-    ["Synchronize Mirror" xetla-inventory-mirror t]
-    ("Taging Method"
-     ["Edit .arch-inventory" xetla-edit-.arch-inventory-file t]
-     ["Edit =tagging-method" xetla-edit-=tagging-method-file t]
-     ["Set Tagging Method"   xetla-generic-set-id-tagging-method t]
-     ["Set Tree Version From Scratch" xetla-generic-set-tree-version t]
-     )
-    ["Tree-lint" xetla-tree-lint t]
-    "--"
-    ("Toggles"
-     ["Set All Toggle Variables" xetla-inventory-set-all-toggle-variables t]
-     ["Reset All Toggle Variables" xetla-inventory-reset-all-toggle-variables t]
-     ["Toggle All Toggle Variables" xetla-inventory-toggle-all-toggle-variables t] .
-     ,(mapcar '(lambda (elem) `[,(concat "Toggle " (car (cddddr elem)))
-                                ,(caddr elem)
-                                :style toggle
-                                :selected ,(cadr elem)])
-              xetla-inventory-file-types-manipulators))))
-
-(easy-menu-define xetla-inventory-item-menu nil
-  "Menu used on a inventory item."
-  xetla-inventory-item-menu-list)
-
-(easy-menu-define xetla-inventory-tagging-method-menu nil
-  "Menu used on the taggine method line in a inventory buffer."
-  '("Switch Taggine Method"
-    ["Tagline"  (xetla-generic-set-id-tagging-method "tagline") t]
-    ["Explicit" (xetla-generic-set-id-tagging-method "explicit") t]
-    ["Names"    (xetla-generic-set-id-tagging-method "names") t]
-    ["Implicit" (xetla-generic-set-id-tagging-method "implicit") t]))
-
-;;
-;; Cat-log mode
-;;
-(easy-menu-define xetla-cat-log-mode-menu xetla-cat-log-mode-map
-  "'xetla-cat-log-mode' menu"
-  '("Cat-Log"
-    ["Inventory" xetla-pop-to-inventory t]
-    ["Quit" xetla-buffer-quit t]
-    ))
-
-;;
-;; Log edit mode
-;;
-(easy-menu-define xetla-log-edit-mode-menu xetla-log-edit-mode-map
-  "`xetla-log-edit-mode' menu"
-  '("Log"
-    ["Insert xetla log-for-merge" xetla-log-edit-insert-log-for-merge t]
-    ["log-for-merge and headers"
-     xetla-log-edit-insert-log-for-merge-and-headers t]
-    ["Insert memorized log"     xetla-log-edit-insert-memorized-log t]
-    ["Show changes"             xetla-changes                       t]
-    ["Commit"                   xetla-log-edit-done                 t]
-    ["Show Changelog"           xetla-changelog                     t]
-    ["Goto Summary Field"       xetla-log-goto-summary              t]
-    ["Goto Body"                xetla-log-goto-body                 t]
-    ["Edit Keywords Field"      xetla-log-edit-keywords             t]
-    ["Kill Body"                xetla-log-kill-body                 t]
-    ["Tree Lint"                xetla-tree-lint                     t]
-    ["Abort"                    xetla-log-edit-abort                t]))
-
-;;
-;; Archive list mode
-;;
-(easy-menu-define xetla-archive-list-mode-menu xetla-archive-list-mode-map
-  "`xetla-archive-list-mode' menu"
-  '("Archives"
-    ["Register New Archive"        xetla-register-archive t]
-    ["Add a Bookmark"              xetla-bookmarks-add t]
-    ["Update Archives List"        xetla-archives t]
-    ["Set Default Archive"         xetla-archive-select-default t]
-    ["Remove Archive Registration" xetla-archive-unregister-archive t]
-    ["Edit Archive Location"       xetla-archive-edit-archive-location t]
-    ["Make New Archive..."         xetla-make-archive t]
-    ["Create a Mirror"             xetla-archive-mirror-archive t]
-    ["Use as default Mirror"       xetla-archive-use-as-default-mirror t]
-    ["Synchronize Mirror"          xetla-archive-synchronize-archive t]
-    ))
-
-;;
-;; Category list mode
-;;
-(easy-menu-define xetla-category-list-mode-menu xetla-category-list-mode-map
-  "`xetla-category-list-mode' menu"
-  '("Categories"
-    ["List Archives"          xetla-archives                t]
-    ["Update Categories List" xetla-category-refresh         t]
-    ["Make New Category..."   xetla-category-make-category  t]
-    ["Add a Bookmark"         xetla-bookmarks-add           t]
-    ["Synchronize Mirror"     xetla-category-mirror-archive t]
-    ))
-
-
-;;
-;; Branch list mode
-;;
-(easy-menu-define xetla-branch-list-mode-menu xetla-branch-list-mode-map
-  "`xetla-branch-list-mode' menu"
-  '("Branches"
-    ["Update Branches List" xetla-branch-refresh               t]
-    ["List Parent Category" xetla-branch-list-parent-category t]
-    ["Make New Branch..."   xetla-branch-make-branch          t]
-    ["Synchronize Mirror"   xetla-branch-mirror-archive       t]
-    ["Bookmark Branch under Point"    xetla-branch-bookmarks-add        t]
-    ["Get..."               xetla-branch-get-branch           t]
-    ))
-
-;;
-;; Version list mode
-;;
-(easy-menu-define xetla-version-list-mode-menu xetla-version-list-mode-map
-  "`xetla-version-list-mode' menu"
-  '("Versions"
-    ["Update Versions List" xetla-version-refresh             t]
-    ["Get..."               xetla-version-get-version        t]
-    ["Make New Version..."  xetla-version-make-version       t]
-    ["List Parent Branch"   xetla-version-list-parent-branch t]
-    ["Synchronize Mirror"   xetla-version-mirror-archive     t]
-    ["Bookmark Version under Point"    xetla-version-bookmarks-add      t]
-    ["Tag This Version"     xetla-version-tag      t]))
-
-;;
-;; Revision list mode
-;;
-(easy-menu-define xetla-revision-list-mode-menu xetla-revision-list-mode-map
-  "`xetla-revision-list-mode' menu"
-  '("Revisions"
-    ["Refresh Revisions List" xetla-generic-refresh t]
-    ["List Parent Version"    xetla-revision-list-parent-version t]
-    "--"
-    ["Bookmark Revision under Point"      xetla-revision-bookmarks-add t]
-    ("Mark"
-     ["Mark Revision"   xetla-revision-mark-revision t]
-     ["Unmark Revision" xetla-revision-unmark-revision t])
-    "--"
-    ["Show Log"                            xetla-revision-cat-log t]
-    ["Unify Patch Logs with This Revision" xetla-revision-sync-tree t]
-    ["View changeset"                      xetla-revision-changeset t]
-    ("Delta"
-     ["View"  (xetla-revision-delta t) t]
-     ["Store to Directory" (xetla-revision-store-delta t) t])
-    "--"
-    ["Update" xetla-revision-update t]
-    ("Replay"
-     ["From Head Revision" xetla-revision-replay-version t]
-     ["From Revision under Point" xetla-revision-replay t])
-    ("Star-Merge"
-     ["From Head Revision" xetla-revision-star-merge-version t]
-     ["From Revision under Point" xetla-revision-star-merge t])
-    ("Get"
-     ["Get a Local Copy" xetla-revision-get-revision t]
-     ["Make Cache"       xetla-revision-cache-revision t]
-     ["Add to Library"   xetla-revision-add-to-library t])
-    ("Tag "
-     ["From Head Revision" xetla-revision-tag-from-head t]
-     ["From Revision under Point" xetla-revision-tag-from-here t])
-    ["Send comment to author" xetla-revision-send-comments t]
-    "--"
-    ("Filter Display"
-     ["Date"    xetla-revision-toggle-date
-      :style toggle :selected xetla-revisions-shows-date]
-     ["Creator" xetla-revision-toggle-creator
-      :style toggle :selected xetla-revisions-shows-creator]
-     ["Summary" xetla-revision-toggle-summary
-     :style toggle :selected xetla-revisions-shows-summary]
-     ["Presence in Revlib" xetla-revision-toggle-library
-     :style toggle :selected xetla-revisions-shows-library]
-     ["Merged Patches"   xetla-revision-toggle-merges
-     :style toggle :selected xetla-revisions-shows-merges]
-     ["Patches Merging ..." xetla-revision-toggle-merged-by
-      :style toggle :selected xetla-revisions-shows-merged-by])))
-
-(easy-menu-define xetla-revision-revision-menu nil
-  "Menu used on a revision item in `xetla-revision-list-mode' buffer"
-  '("Revision"
-     ["Show Log"        xetla-revision-cat-log t]
-     ["Unify Patch Logs with This Revision" xetla-revision-sync-tree t]
-     ["View changeset"  xetla-revision-changeset t]
-     ["Set Bookmark"    xetla-revision-bookmarks-add t]
-     ("Mark"
-      ["Mark Revision"   xetla-revision-mark-revision t]
-      ["Unmark Revision"   xetla-revision-unmark-revision t])
-     ("Delta"
-      ["In This Version"                     xetla-revision-delta t]
-      ["With Revision in Another Archive"    xetla-revision-store-delta t])
-     ("Merge"
-      ["Star-Merge"   xetla-revision-star-merge t]
-      ["Replay"       xetla-revision-replay t])
-     ("Get"
-      ["Get a Local Copy" xetla-revision-get-revision t]
-      ["Make Cache"       xetla-revision-cache-revision t]
-      ["Add to Library"   xetla-revision-add-to-library t])
-     ["Send comment to author" xetla-revision-send-comments t]
-     ["Tag from Here"      xetla-revision-tag-from-here]))
-
-;;
-;; Changes mode
-;;
-(defconst xetla-changes-file-menu-list
-  '("File Changes"
-    ["Jump to File"                   xetla-changes-jump-to-change t]
-    ["Jump to Diffs"                  xetla-changes-diff-or-list   t]
-    ["View Diff in Separate Buffer"   xetla-changes-diff           t]
-    ["View Diff with Ediff"           xetla-changes-ediff          t]
-    "--"
-    ["Delete File"                    xetla-changes-rm             t]
-    ["Revert File"                    xetla-changes-revert         t]
-    )
-  "Used both in the global and the context menu of `xetla-changes-mode'.")
-
-(easy-menu-define xetla-changes-mode-menu xetla-changes-mode-map
-  "`xetla-changes' menu"
-  `("Changes"
-    ["Refresh Buffer" xetla-generic-refresh t]
-    ["Edit log before commit" xetla-changes-edit-log t]
-    ["View other revisions" xetla-tree-revisions t]
-    ,xetla-changes-file-menu-list
-    ))
-
-(easy-menu-define xetla-changes-file-menu nil
-  "Menu used on a `xetla-changes' file"
-  xetla-changes-file-menu-list)
-
-;;
-;; Lint mode
-;;
-(defconst xetla-tree-lint-file-menu-list
-  `("File"
-    ["Jump to File"  xetla-generic-find-file-at-point t]
-    ("Mark"
-     ["Mark File" xetla-tree-lint-mark-file t]
-     ["Unmark File" xetla-tree-lint-unmark-file t])
-    "--"
-    ["Add File"      xetla-tree-lint-add-files        t]
-    ["Delete File"   xetla-tree-lint-delete-files     t]
-    ["Regenerate ID" xetla-tree-lint-regenerate-id    t]
-    "--"
-    ["Make Junk"     xetla-tree-lint-make-junk        t]
-    ["Make Precious" xetla-tree-lint-make-precious     t]
-    ,xetla-.arch-inventory-menu-list
-    ,xetla-=tagging-method-menu-list
-    )
-  "Used both for context and global menu.")
-
-(easy-menu-define xetla-tree-lint-file-menu nil
-  "Menu used on files listed in `xetla-tree-lint'"
-  xetla-tree-lint-file-menu-list
-  )
-
-(easy-menu-define xetla-tree-lint-mode-menu xetla-tree-lint-mode-map
-  "`xetla-tree-lint' menu"
-  `("Tree Lint"
-    ["Refresh Buffer"         xetla-generic-refresh t]
-    ,xetla-tree-lint-file-menu-list
-    ))
-
-;;
-;; Event Log buffer
-;;
-(easy-menu-define xetla-log-buffer-mode-menu xetla-log-buffer-mode-map
-  "`xetla-log-buffer' menu"
-  '("Logs"
-    ["Show Related Buffer" xetla-switch-to-related-buffer t]
-    ["Show Output Buffer"  xetla-switch-to-output-buffer  t]
-    ["Show Error Buffer"   xetla-switch-to-error-buffer   t]
-    ))
-
-\f
-;; --------------------------------------
-;; User customization section
-;; --------------------------------------
-
-
-(defgroup xetla nil
-  "Arch interface for emacs."
-  :group 'tools
-  :prefix "xetla-")
-
-
-(defgroup xetla-inventory nil
-  "This group contains items used in inventory mode."
-  :group 'xetla)
-
-
-(defgroup xetla-revisions nil
-  "This group contains items used in revisions mode."
-  :group 'xetla)
-
-
-(defgroup xetla-file-actions nil
-  "This group contains items manipulating finding, saving and reverting files."
-  :group 'xetla)
-
-
-(defgroup xetla-bindings nil
-  "This group contains items related to key bindings."
-  :group 'xetla)
-
-
-(defgroup xetla-faces nil
-  "This group contains faces defined for Xetla."
-  :group 'xetla)
-
-
-(defcustom xetla-prefix-key [(control x) ?T]
-  "Prefix key for most xetla commands."
-  :type '(choice (const [(control x) ?T])
-                 (const [(control x) ?t])
-                 (const [(control x) ?v])
-                 (const [(control x) ?V])
-                 (const [(control x) ?v ?t])
-                 (sexp))
-  :group 'xetla-bindings
-  :set  (lambda (var value)
-          (if (boundp var)
-              (global-unset-key (symbol-value var)))
-          (set var value)
-          (global-set-key (symbol-value var) xetla-global-keymap)))
-
-
-(global-set-key xetla-prefix-key xetla-global-keymap)
-
-
-(defcustom xetla-tla-executable "tla"
-  "*The name of the xetla executable."
-  :type 'string
-  :group 'xetla)
-
-
-(defcustom xetla-diff-executable "diff"
-  "*The name of the diff executable."
-  :type 'string
-  :group 'xetla)
-
-
-(defcustom xetla-patch-executable "patch"
-  "*The name of the patch executable."
-  :type 'string
-  :group 'xetla)
-
-
-(defcustom xetla-highlight t
-  "*Use highlighting for XEtla buffers."
-  :type 'boolean
-  :group 'xetla)
-
-
-(defcustom xetla-install-command-help-system t
-  "*Use f1 to display help for the actual function call during minibuffer input.
-Note: this functionality is provided for all minibuffer prompts."
-  :type 'boolean
-  :group 'xetla)
-
-
-(defcustom xetla-do-not-prompt-for-save nil
-  "*Whether or not xetla will prompt before saving.
-
-If non nil, xetla will not prompt you before saving buffers of the
-working local tree."
-  :type 'boolean
-  :group 'xetla-file-actions)
-
-
-(defcustom xetla-automatically-revert-buffers t
-  "*Whether or not xetla will automatically revert buffers.
-
-If non nil, xetla will automatically revert unmodified buffers after an
-arch operation modifying the file."
-  :type 'boolean
-  :group 'xetla-file-actions)
-
-
-(defcustom xetla-changes-recursive t
-  "*Whether or not xetla will compute changes recursively.
-
-If non nil, `xetla-changes' will be applied recursively to subprojects
-of the current tree"
-  :type 'boolean
-  :group 'xetla)
-
-
-(defcustom xetla-strict-commits nil
-  "*If non-nil, commit operations are invoked with the -strict option."
-  :type 'boolean
-  :group 'xetla)
-
-
-(defcustom xetla-commit-check-log-buffer-functions
-  '(xetla-commit-check-empty-headers
-    xetla-commit-check-empty-line
-    xetla-commit-check-missing-space)
-  "*List of functions to check the ++log.. buffer.
-
-Each function is called, from the log buffer, with no argument. It
-should raise an error if commit should be canceled."
-  :type 'hook
-  :group 'xetla)
-
-
-(defcustom xetla-commit-headers-allowed-to-be-empty
-  "^\\(Keywords\\)$"
-  "*Headers allowed to be empty in the ++log.. buffer.
-
-This should be a regexp matching the header names. Headers not
-matching this regexp should not be empty when committing."
-  :type 'string
-  :group 'xetla)
-
-
-(defcustom xetla-commit-fix-missing-space t
-  "*Whether or not xetla will add missing spaces after header names.
-
-If non-nil, missing spaces after a space will be inserted
-automatically instead of raising an error when committing."
-  :type 'boolean
-  :group 'xetla)
-
-
-(defcustom xetla-three-way-merge t
-  "*If non-nil, star-merge operations are invoked with -three-way."
-  :type 'boolean
-  :group 'xetla)
-
-
-(defcustom xetla-use-forward-option nil
-  "*If non-nil, use the -forward option with commands that allow it."
-  :type 'boolean
-  :group 'xetla)
-
-
-(defcustom xetla-use-skip-present-option nil
-  "*If non-nil, use -skip-present with commands that allow it."
-  :type 'boolean
-  :group 'xetla)
-
-
-(defun xetla-toggle-use-forward-option ()
-  "Toggle the value of `xetla-use-forward-option'."
-  (interactive)
-  (setq xetla-use-forward-option (not xetla-use-forward-option)))
-
-
-(defun xetla-toggle-use-skip-present-option ()
-  "Toggle the value of `xetla-use-skip-present-option'."
-  (interactive)
-  (setq xetla-use-skip-present-option
-        (not xetla-use-skip-present-option)))
-
-
-(defun xetla-toggle-three-way-merge ()
-  "Toggle the value of `xetla-three-way-merge'."
-  (interactive)
-  (setq xetla-three-way-merge (not xetla-three-way-merge)))
-
-
-(defgroup xetla-bookmarks nil
-  "xetla bookmarks allows you to save places (archive, category,
-branch, version) in the archive that you use often. Try M-x
-xetla-bookmarks RET to see."
-  :group 'xetla)
-
-
-(defcustom xetla-bookmarks-file-name "bookmarks.el"
-  "*File in which xetla bookmarks will be saved.
-The bookmark file is stored in the `xetla-config-directory'"
-  :type 'file
-  :group 'xetla-bookmarks)
-
-
-(defcustom xetla-tag-function 'xetla-tag-uuid
-  "Function called to generate the value of the arch-tag.
-
-The function must take no argument, and return a string without a
-final newline."
-  :type '(choice (const xetla-tag-uuid)
-                 (const xetla-tag-name-date-filename)
-                 function)
-  :group 'xetla)
-
-
-(defcustom xetla-config-directory "~/.xetla/"
-  "*Directory in which the xetla config files will be stored."
-  :type 'directory
-  :group 'xetla)
-
-
-(defcustom xetla-log-library "~/.arch-log-library/"
-  "*Directory in which the log library will be stored."
-  :type 'directory
-  :group 'xetla-internal)
-
-
-(defcustom xetla-log-library-greedy t
-  "*Whether log files are automatically saved in the log library.
-
-If non-nil, then, whenever xetla needs to access a log file, this file
-will be copied to the log library."
-  :type 'boolean
-  :group 'xetla-internal)
-
-
-(defcustom xetla-cache-xetla-get-changeset 2
-  "*Cache `xetla-get-changeset' calls.
-When nil, don't cache.
-When a number, cache only if the `xetla-get-changeset' call takes
-more seconds than the number.
-Otherwise don't cache the results.
-The cache is kept only in RAM."
-  :type 'integer
-  :group 'xetla)
-
-
-(defcustom xetla-bookmarks-cleanup-dont-prompt nil
-  "*Whether xetla should prompt before cleaning a local tree.
-
-non nil means `xetla-bookmarks-cleanup-local-trees' shouldn't prompt
-before removing a local-tree"
-  :type 'boolean
-  :group 'xetla-bookmarks)
-
-
-(defgroup xetla-internal nil
-  "This group contains items used mainly for debugging."
-  :group 'xetla)
-
-
-(defcustom xetla-log-commands t
-  "*Non nil means log all xetla commands in the buffer *xetla-log*."
-  :type 'boolean
-  :group 'xetla-internal)
-
-
-(defcustom xetla-log-buffer " *xetla-log*"
-  "*Name of the buffer in which xetla logs main events."
-  :type 'string
-  :group 'xetla-internal)
-
-
-(defcustom xetla-switch-to-buffer-mode 'pop-to-buffer
-  "*Mode for switching to xetla buffers.
-Recommended settings are: 'pop-to-buffer, and 'show-in-other-window
-and 'single-window"
-  :type '(choice (const pop-to-buffer)
-                 (const single-window)
-                 (const dedicated-frame)
-                 (const show-in-other-window))
-  :group 'xetla)
-
-(defcustom xetla-switch-to-changes-buffer nil
-  "Switch to the changes buffer or stay in the current buffer."
-  :type 'boolean
-  :group 'xetla)
-
-
-(defcustom xetla-read-project-tree-mode 'sometimes
-  "*Mode for prompting project tree directories. Possible values are:
-
-- always: When running a tla command requiring a tree, always prompt
-  for it.
-
-- sometimes: If a command is ran inside a project tree, the tree root
-  is used. Otherwise, prompt.
-
-- never: If a command is run inside a project tree, use the tree root.
-  Othwise, raise an error."
-  :type '(choice (const always)
-                 (const sometimes)
-                 (const never))
-  :group 'xetla)
-
-
-(defcustom xetla-read-directory-mode 'sometimes
-  "*How prompting project directories should be done.
-
-Works similarly to `xetla-read-project-tree-mode', but this one is used
-for commands like `xetla-inventory' for which a subdirectory of a
-project tree is accepted."
-  :type '(choice (const always)
-                 (const sometimes)
-                 (const never))
-  :group 'xetla)
-
-
-(defcustom xetla-switch-to-buffer-first t
-  "*Switch to newly created buffer on creation of buffers?
-
-If non-nil, xetla commands implementing this feature will switch to the
-newly created buffer when the command is called. Further (potentially
-asynchronous) processes are run without modifying your
-window-configuration. Otherwise, xetla will switch to the new buffer on
-command completion."
-  :type 'boolean
-  :group 'xetla)
-
-
-(defcustom xetla-buffer-quit-mode 'kill
-  "*How *xetla-...* buffer should be killed.
-If the value is 'kill, buffers are actually killed. Otherwise, just
-burry them."
-  :type '(choice (const kill)
-                 (const burry))
-  :group 'xetla)
-
-
-(defcustom xetla-log-insert-last t
-  "*If non-nil, insert changelog entries at the end of the log file."
-  :type 'boolean
-  :group 'xetla)
-
-
-(defgroup xetla-hooks nil
-  "This group contains hooks into xetla."
-  :prefix "xetla-"
-  :group 'xetla)
-
-
-(defcustom xetla-archive-list-mode-hook nil
-  "*Hooks run after switching to `xetla-archive-list-mode'."
-  :type 'hook
-  :group 'xetla-hooks)
-
-
-(defcustom xetla-bookmarks-mode-hook nil
-  "*Hooks run after switching to `xetla-bookmarks-mode'."
-  :type 'hook
-  :group 'xetla-hooks)
-
-
-(defcustom xetla-branch-list-mode-hook nil
-  "*Hooks run after switching to `xetla-branch-list-mode'."
-  :type 'hook
-  :group 'xetla-hooks)
-
-
-(defcustom xetla-cat-log-mode-hook nil
-  "*Hooks run after switching to `xetla-cat-log-mode'."
-  :type 'hook
-  :group 'xetla-hooks)
-
-
-(defcustom xetla-category-list-mode-hook nil
-  "*Hooks run after switching to `xetla-category-list-mode'."
-  :type 'hook
-  :group 'xetla-hooks)
-
-
-(defcustom xetla-inventory-file-mode-hook nil
-  "*Hooks run after switching to `xetla-inventory-file-mode'."
-  :type 'hook
-  :group 'xetla-hooks)
-
-
-(defcustom xetla-inventory-mode-hook nil
-  "*Hooks run after switching to `xetla-inventory-mode'."
-  :type 'hook
-  :group 'xetla-hooks)
-
-
-(defcustom xetla-log-edit-mode-hook nil
-  "*Hooks run after switching to `xetla-log-edit-mode'."
-  :type 'hook
-  :group 'xetla-hooks)
-
-
-(defcustom xetla-logs-mode-hook nil
-  "*Hooks run after switching to `xetla-logs-mode'."
-  :type 'hook
-  :group 'xetla-hooks)
-
-
-(defcustom xetla-revision-list-mode-hook nil
-  "*Hooks run after switching to `xetla-revision-list-mode'."
-  :type 'hook
-  :group 'xetla-hooks)
-
-
-(defcustom xetla-version-list-mode-hook nil
-  "*Hooks run after switching to `xetla-version-list-mode'."
-  :type 'hook
-  :group 'xetla-hooks)
-
-
-(defcustom xetla-make-branch-hook nil
-  "*Hooks run after making a branch."
-  :type 'hook
-  :group 'xetla-hooks)
-
-
-(defcustom xetla-make-category-hook nil
-  "*Hooks run after making a category."
-  :type 'hook
-  :group 'xetla-hooks)
-
-
-(defcustom xetla-make-version-hook nil
-  "*Hooks run after making a version."
-  :type 'hook
-  :group 'xetla-hooks)
-
-
-(defcustom xetla-make-archive-hook nil
-  "*Hooks run after creating a new archive."
-  :type 'hook
-  :group 'xetla-hooks)
-
-
-(defcustom xetla-name-read-init-hook nil
-  "*Hooks run when the control enters to `xetla-name-read'."
-  :type 'hook
-  :group 'xetla-hooks)
-
-(defcustom xetla-name-read-final-hook nil
-  "*Hooks run when the control leaves `xetla-name-read'.
-The name read by `xetla-name-read' is passed to functions connected
-to this hook as an argument."
-  :type 'hook
-  :group 'xetla-hooks)
-
-(defcustom xetla-name-read-error-hook nil
-  "*Hooks run when an error is occurred in `xetla-name-read'."
-  :type 'hook
-  :group 'xetla-hooks)
-
-(defcustom xetla-follow-symlinks 'tree
-  "*Follow symlinks of this type."
-  :type '(choice (const :tag "None" nil)
-                 (const :tag "Symlinks into an arch-managed tree" tree)
-                 (const :tag "Symlinks to an arch-managed file" id))
-  :group 'xetla-file-actions)
-
-(defcustom xetla-follow-symlinks-mode 'follow
-  "*Before following a symlink do this."
-  :type '(choice (const :tag "Ask" ask)
-                 (const :tag "Follow" follow)
-                 (const :tag "Warn" warn))
-  :group 'xetla-file-actions)
-
-(defcustom xetla-use-arrow-keys-for-navigation nil
-  "*Enable left/right for navigation.
-This works best if `xetla-switch-to-buffer-mode' is set to 'single-window.
-
-It enables binding for navigation allowing you to browse by only using the
-cursor keys, which is much faster than n/p/return/^.  Use up/down to move to
-an item, right to select it and left to go to its \"logical\" parent!
-
-Got the idea?
-
-See the variable `xetla-use-arrow-keys-for-navigation-list' for a list of
-bindings that will be installed."
-  :type '(choice (const :tag "Disabled" nil)
-                 (const :tag "Enabled"  t)
-                 (const :tag "Enabled with Shift" shift))
-  :group 'xetla-bindings)
-
-(defcustom xetla-revisions-shows-summary t
-  "*Whether summary should be displayed for `xetla-revisions'."
-  :type 'boolean
-  :group 'xetla-revisions)
-
-(defcustom xetla-revisions-shows-creator t
-  "*Whether creator should be displayed for `xetla-revisions'."
-  :type 'boolean
-  :group 'xetla-revisions)
-
-(defcustom xetla-revisions-shows-date t
-  "*Whether date should be displayed for `xetla-revisions'."
-  :type 'boolean
-  :group 'xetla-revisions)
-
-(defcustom xetla-revisions-shows-library t
-  "*Display library information in revision lists.
-
-If non-nil the presence of this revision in the library should be
-displayed for `xetla-revisions'"
-  :type 'boolean
-  :group 'xetla-revisions)
-
-(defcustom xetla-revisions-shows-merges nil
-  "*Display merge information in revision lists.
-
-If non-nil, the list of merged patches of this revision should be
-displayed for `xetla-revisions'"
-  :type 'boolean
-  :group 'xetla-revisions)
-
-(defcustom xetla-revisions-shows-merged-by t
-  "*Display \"merged-by\" field in revision lists.
-
-If non-nil the list of patches merged by this revision should be
-displayed for `xetla-revisions'"
-  :type 'boolean
-  :group 'xetla-revisions)
-
-;;; FIXME: This should be an alist of keyword . description, and
-;;; both the keyword and its description should display in the
-;;; *xetla-log-keywords* buffer.
-(defcustom xetla-log-edit-keywords
-  '("admin"                          &nbs