emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[elpa] externals/rudel 9ec4b84: * rudel-backend.el: Try and fix compilat


From: Stefan Monnier
Subject: [elpa] externals/rudel 9ec4b84: * rudel-backend.el: Try and fix compilation problem
Date: Sun, 10 Jul 2016 22:17:52 +0000 (UTC)

branch: externals/rudel
commit 9ec4b84e27f3faae8ad3eb5d3e96c523ce1fece2
Author: Stefan Monnier <address@hidden>
Commit: Stefan Monnier <address@hidden>

    * rudel-backend.el: Try and fix compilation problem
    
    * rudel-backend.el (rudel--with-memoization): New macro.
    (rudel-get-factory): Use it.  Use eieio-oref-default to access the
    class's slots.
    (rudel-backend-get-factory): Use the rudel-backend-factory class name
    directly rather than the var holding the class name.
    (rudel-backend-dump): Use oref-default to access the
    class's slots.
    (rudel-backend--format-backend-normal): Use slot names rather than
    initarg names when accessing slots.
---
 ChangeLog         | 4857 -----------------------------------------------------
 GNUmakefile       |    4 +-
 rudel-backend.el  |   47 +-
 rudel-loaddefs.el |   38 +-
 4 files changed, 50 insertions(+), 4896 deletions(-)

diff --git a/ChangeLog b/ChangeLog
deleted file mode 100644
index 0a00c5e..0000000
--- a/ChangeLog
+++ /dev/null
@@ -1,4857 +0,0 @@
-2010-07-25  Joseph Corneli  <address@hidden>
-
-        Extensive documentation changes, new README sections
-       * README: Extensive documentation changes, including
-       documentation for renamed functions and also:
-       (LISTING BACKENDS): new section
-       (SAVING AND REUSING CONFIGURED SESSIONS): new section
-       (WORKING WITHIN A CONNECTED SESSION): new section
-       (EXTRA MINOR MODES): new section
-
-       Renamed rudel-end-session to rudel-leave-session
-       * rudel.el (rudel-end-session): changed
-       rudel-end-session to rudel-leave-session
-       * rudel-mode.el (rudel-minor-keymap): likewise
-
-       Renamed rudel-unpublish-buffer to rudel-unsubscribe
-       * rudel.el (rudel-attach-to-buffer): changed
-       rudel-unpublish-buffer to rudel-unsubscribe
-       (rudel-detach-from-buffer): likewise
-       (rudel-unsubscribe): likewise
-       * rudel-mode.el (rudel-minor-keymap): likewise
-       * rudel-interactive.el (rudel-allocate-buffer-clear-existing):
-       likewise
-
-        Updates to INSTALL file.
-       * INSTALL: Rearranged and updated instructions so they make more
-       sense.
-
-2010-07-02  Jan Moringen  <address@hidden>
-
-       Proper comments for local variables in README, INSTALL
-       * README: added proper comments to local variables
-       * INSTALL: added proper comments to local variables
-
-2010-06-15  Jan Moringen  <address@hidden>
-
-       Require rudel-util.el in rudel-mode.el
-       * rudel-mode.el (header): minor fix in history section
-       (require rudel-util): new require; for object-{add,remove}-hook
-
-       New milestones and tags, reassigned items in TODO
-       * TODO (Future): reassigned and updated some items
-       (Milestone rudel-0.5): new milestone
-       (Milestone rudel-0.4): added tag 0.4; scheduled tasks "show cursor
-       positions of other users", "integrate unit tests", "only read
-       color hue"; minor fixes
-       (Milestone rudel-0.3): added tag 0.3
-       (Milestone rudel-0.2): added tags 0.2 and released
-       (Milestone rudel-0.1): added tags 0.1 and released
-
-       Hopefully fixed some notorious problems in rudel-compile.el
-       * rudel-compile.el (require cl): new require; for flet
-       (toplevel compilation): let-bind filename since there have been
-       some compilation problems related to `filename' being void; inject
-       requires for cl and rudel-backend into rudel-loaddefs.el
-
-       Mention Debian/Ubuntu packages in INSTALL
-       * INSTALL (REQUIREMENTS): mention Debian/Ubuntu packages for
-       gnutls-cli and Avahi
-       (footer): added settings startup, title and author
-
-       Removed redundant checks in -factory::rudel-suitable-backends
-       * rudel-backend.el
-       (rudel-backend-factory::rudel-suitable-backends): do not check the
-       cdr being an object twice
-
-       Better handling of loading errors in rudel-backend.el
-       * rudel-backend.el (header): minor fix in history
-       (rudel-backend-factory::rudel-all-backends): added optional
-       argument only-loaded; only return unloaded backends if requested
-       (rudel-backend-factory::rudel-suitable-backends): only consider
-       loaded backends
-       (rudel-backend-factory::rudel-load-backends): if the loading
-       fails, install the error message as a symbol property of the
-       backend name symbol
-       (rudel-backend-dump): format backends differently depending on
-       whether they have been loaded successfully or not
-       (rudel-backend--format-backend-normal): new function; format a
-       loaded or unloaded backend
-       (rudel-backend--format-backend-error): new function; format a
-       backend for which loading has failed
-
-2010-06-14  Jan Moringen  <address@hidden>
-
-       Added some docstrings in infinote/rudel-infinote-group.el
-       * infinote/rudel-infinote-group.el
-       (rudel-infinote-group::connection): added documentation string
-       (rudel-infinote-group::rudel-register-state): added documentation
-       string
-       (rudel-infinote-group::rudel-send): added documentation string
-
-       Improved session startup in infinote/rudel-infinote{,client}.el
-       * infinote/rudel-infinote.el
-       (rudel-infinote-backend::rudel-connect): use `rudel-wait' to
-       ensure the connection is ready for use; handle missing :host
-       property
-       (rudel-infinote-backend::rudel-make-node): do not set the :group
-       slot when creating nodes
-       * infinote/rudel-infinote-client.el
-       (rudel-infinote-client-connection::initialize-instance): cosmetic
-       changes
-       (rudel-infinote-client-connection::rudel-make-and-add-group):
-       added a comment
-       (rudel-infinote-client-connection::rudel-make-and-add-node): added
-       a comment
-       (rudel-infinote-client-connection::rudel-receive): added comments
-       (rudel-infinote-client-connection::rudel-wait): new method; block
-       until the connection is ready for use; this is determined by
-       monitoring the state of the directory group
-
-2010-06-13  Jan Moringen  <address@hidden>
-
-       Improved docstring of rudel-xmpp-backend::rudel-make-connection
-       * xmpp/rudel-xmpp.el (rudel-xmpp-backend::rudel-make-connection):
-       improved documentation string
-
-       Removed temporary slots id and status from rudel-infinote-user
-       * infinote/rudel-infinote-user.el (rudel-infinote-user::id):
-       removed; was temporary
-       (rudel-infinote-user::status): removed; was temporary
-
-       Added new class rudel-hook-state-machine to rudel-state-machine.el
-       * rudel-state-machine.el (header): fixed keyword; added version
-       0.2 to history section
-       (require rudel-util): new require; used by the hook state machine
-       (rudel-state-machine::state): added writer method
-       `rudel-set-state'
-       (rudel-state-machine::initialize-instance): use `rudel-set-state'
-       (rudel-state-machine::rudel-switch): use `rudel-set-state'
-       (rudel-hook-state-machine): new class; a state machine that runs
-       hooks when it accepts input or when it switches states
-
-2010-06-12  Jan Moringen  <address@hidden>
-
-       Added docs, comments to infinote/rudel-infinote-group-document.el
-       * infinote/rudel-infinote-group-document.el
-       (rudel-infinote-group-document-state-idle::rudel-infinote/sync-begin):
-       added documentation string; added some comments
-       
(rudel-infinote-group-document-state-idle::rudel-infinote/session-close):
-       added documentation string; added some comments
-       
(rudel-infinote-group-document-state-synchronizing::rudel-infinote/sync-user):
-       cleanup; updated some comments
-       
(rudel-infinote-group-document-state-synchronizing::rudel-infinote/sync-segment):
-       added documentation string; added some comments
-       
(rudel-infinote-group-document-state-synchronizing::rudel-infinote/sync-end):
-       added some comments
-       
(rudel-infinote-group-document-state-synchronizing::rudel-infinote/sync-cancel):
-       added some comments
-       (rudel-infinote-group-document-state-joining::rudel-infinote/user-join):
-       improved handling of self user; added documentation string
-
-       Specialize rudel-display-string on rudel-infinote-document-user
-       * infinote/rudel-infinote-display.el
-       (rudel-infinote-document-user::rudel-display-string): specialize
-       for `rudel-infinote-document-user' instead of
-       `rudel-infinote-user'
-
-       Only set :session-user if unset in rudel-infinote-document
-       * infinote/rudel-infinote-document.el
-       (rudel-infinote-document::rudel-add-user): only set the value of
-       the :session-user slot if it unset
-
-       Handle document users in infinote/rudel-infinote-group-document.el
-       * infinote/rudel-infinote-group-document.el
-       (rudel-infinote-group-document-state-idle::rudel-infinote/user-join):
-       display a warning if the user is already subscribed; do not use
-       the document slot explicitly
-       (rudel-infinote-group-document-state-idle::rudel-infinote/user-rejoin):
-       use writer methods to update user's slots; do not use the document
-       slot explicitly
-       
(rudel-infinote-group-document-state-idle::rudel-infinote/user-status-change):
-       use writer methods to update user's slots; do not use the document
-       slot explicitly
-       
(rudel-infinote-group-document-state-idle::rudel-infinote/user-color-change):
-       use writer methods to update user's slots; do not use the document
-       slot explicitly
-       (rudel-infinote-group-document-state-idle::rudel-infinote/request):
-       do not use the document slot explicitly
-       
(rudel-infinote-group-document-state-synchronizing::rudel-infinote/sync-user):
-       construct an instance of `rudel-infinote-document-user', not
-       `rudel-infinote-user'
-       (rudel-infinote-group-document-state-joining::rudel-enter): the
-       session user does not have a status, send "active" instead; no dot
-       explicitly use the :document slot
-       (rudel-infinote-group-document-state-joining::rudel-infinote/user-join):
-       add a document user object to the document; set the self user of
-       the document
-       
(rudel-infinote-group-document-state-joining::rudel-infinote/user-rejoin):
-       use writer methods to update user's slots; do not use the document
-       slot explicitly
-       (rudel-infinote-group-document): added superclasses
-       `rudel-impersonator' and `rudel-delegator'
-
-2010-06-11  Jan Moringen  <address@hidden>
-
-       Added handling of self user to infinote/rudel-infinote-document.el
-       * infinote/rudel-infinote-document.el
-       (rudel-infinote-document::self): new slot; the self user of the
-       document
-       (rudel-infinote-document::rudel-add-user): new method; add a user
-       to the document, also adding it to the session if necessary
-       (rudel-infinote-document::rudel-set-self): set the self user of
-       the document also setting the self user of the session if possible
-
-       Split accessor of rudel-user::color into reader and writer
-       * rudel.el (rudel-user::color): split accessor into reader and
-       writer
-
-       Added reader rudel-set-id to rudel-infinote-document-user::id
-       * infinote/rudel-infinote-user.el
-       (rudel-infinote-document-user::id): added reader `rudel-set-id'
-
-       Added class rudel-infinote-document-user to infinote backend
-       * infinote/rudel-infinote-user.el (require rudel-util): new
-       require; for `rudel-impersonator' and `rudel-delegator'
-       (rudel-infinote-document-user): new class; specialized infinote
-       user class for documents; in infinote, user properties can vary on
-       a per-session basis
-
-       Added args to infinote-client-connection::rudel-make-and-add-group
-       * infinote/rudel-infinote-client.el
-       (rudel-infinote-client-connection::initialize-instance): cosmetic
-       changes
-       (rudel-infinote-client-connection::rudel-make-and-add-group):
-       accept additional arguments name, method and node
-
-       Removed unused require in infinote/rudel-infinote-user.el
-       * infinote/rudel-infinote-user.el (require rudel-icons): remove;
-       unused
-
-2010-06-07  Jan Moringen  <address@hidden>
-
-       Moved display functions of infinote backend into separate file
-       * infinote/Project.ede (target infinote): added
-       infinote/rudel-infinote-display.el
-       * infinote/rudel-infinote-user.el
-       (rudel-infinote-user::rudel-display-string): moved to file
-       infinote/rudel-infinote-display.el
-       * infinote/rudel-infinote-display.el: new file; display functions
-       for infinote objects
-
-2010-06-06  Jan Moringen  <address@hidden>
-
-       Fixed incorrect parenthesis in infinote/rudel-infinote-user.el
-       * infinote/rudel-infinote-user.el
-       (rudel-infinote-user::rudel-display-string): fixed incorrect
-       parenthesis
-
-       Added rudel-make-{node, group} to rudel-infinote-backend
-       * infinote/rudel-infinote.el
-       (rudel-infinote-backend::rudel-make-node): new method; create node
-       object according to specified type and properties
-       (rudel-infinote-backend::rudel-make-group): new method; create
-       group object according to specified type and properties
-
-       Changed initarg of rudel-infinote-user::id to :id
-       * infinote/rudel-infinote-user.el (rudel-infinote-user::id):
-       changed initarg to :id
-       (rudel-infinote-user::rudel-display-string): minor cosmetic
-       changes
-
-       Added some docs in infinote/rudel-infinote-text-document.el
-       * infinote/rudel-infinote-text-document.el (header): added
-       commentary section
-       (rudel-infinote-text-document): added documentation string
-
-       Use correct users in requests of infinote-group-text-document
-       * infinote/rudel-infinote-group-text-document.el
-       
(rudel-infinote-group-text-document-state-idle::rudel-infinote/request/insert):
-       accept user argument; use passed in user object instead of dummy
-       user object
-       
(rudel-infinote-group-text-document-state-idle::rudel-infinote/request/insert-caret):
-       use passed in user object instead of dummy user object
-       
(rudel-infinote-group-text-document-state-idle::rudel-infinote/request/delete):
-       use passed in user object instead of dummy user object
-       
(rudel-infinote-group-text-document-state-idle::rudel-infinote/request/delete-caret):
-       use passed in user object instead of dummy user object
-       
(rudel-infinote-group-text-document-state-idle::rudel-infinote/request/delete-caret):
-       accept user argument; use passed in user object instead of dummy
-       user object
-       
(rudel-infinote-group-text-document-state-idle::rudel-infinote/request/no-op):
-       accept user argument
-       
(rudel-infinote-group-text-document-state-idle::rudel-infinote/request/move):
-       use passed in user object instead of dummy user object
-       
(rudel-infinote-group-text-document-state-synchronizing::rudel-infinote/sync-segment):
-       find user object in document and use it instead of the dummy user
-       object
-       (rudel-infinote-group-text-document::parent): restrict type to
-       rudel-infinote-node-directory-child
-       (rudel-infinote-group-text-document::initialize-instance): reset
-       state list before adding rudel-infinote-group-text-document-states
-
-       Use correct users in infinote document group states idle, joining
-       * infinote/rudel-infinote-group-document.el
-       (rudel-infinote-group-document-state-idle::rudel-infinote/request):
-       retrieve user object from document object and use it in request
-       processing
-       (rudel-infinote-group-document-state-joining::rudel-enter): do not
-       use a dummy user object, but the self object from the session
-
-2010-06-03  Jan Moringen  <address@hidden>
-
-       Added rudel-color.el and use it in infinote backend
-       * rudel-color.el: new file; utility functions for color
-       manipulation; currently RGB <-> HSV conversion
-       * Project.ede (target rudel): added rudel-color.el
-       * infinote/rudel-infinote-group-document.el (require rudel-color):
-       new require; used to convert hue values to RGB colors
-       (rudel-infinote-group-document-state-idle::rudel-infinote/user-join):
-       (rudel-infinote-group-document-state-idle::rudel-infinote/user-rejoin):
-       
(rudel-infinote-group-document-state-idle::rudel-infinote/user-color-change):
-       
(rudel-infinote-group-document-state-synchronizing::rudel-infinote/sync-user):
-       (rudel-infinote-group-document-state-joining::rudel-infinote/user-join):
-       
(rudel-infinote-group-document-state-joining::rudel-infinote/user-rejoin):
-       use `rudel-hsv->string' and `rudel-color-background-value'
-
-       New method rudel-document::rudel-clear-users for infinote backend
-       * rudel.el (rudel-document::rudel-clear-users): new method; clear
-       list of subscribed users
-       * infinote/rudel-infinote-group-document.el
-       (rudel-infinote-group-document-state-synchronizing::rudel-enter):
-       use `rudel-clear-users'; users are added by the synchronization
-       process
-
-       Fixed state superclasses in rudel-infinote-group-text-document.el
-       * infinote/rudel-infinote-group-text-document.el
-       (rudel-infinote-group-text-document-state-idle): fixed superclass
-       rudel-infinote-document-state-idle ->
-       rudel-infinote-group-document-state-idle
-       (rudel-infinote-group-text-document-state-synchronizing): fixed
-       superclass rudel-infinote-document-state-synchronizing ->
-       rudel-infinote-group-document-state-synchronizing
-
-       Better updates of user status in rudel-infinote-group-document.el
-       * infinote/rudel-infinote-group-document.el
-       (rudel-infinote-group-document-state-idle::rudel-infinote/user-join):
-       update the status slot of the user
-       (rudel-infinote-group-document-state-joining::rudel-infinote/user-join):
-       warn if the self user cannot be found
-
-       Updated user state handlers in rudel-infinote-group-document.el
-       * infinote/rudel-infinote-group-document.el
-       
(rudel-infinote-group-document-state-idle::rudel-infinote/user-status-change):
-       try to find the user in the list of subscribed user of the
-       document and update its status
-       
(rudel-infinote-group-document-state-idle::rudel-infinote/user-color-change):
-       new method; handle 'user-color-change' message
-
-       Added comments,  docs to infinote/rudel-infinote-group-document.el
-       * infinote/rudel-infinote-group-document.el
-       
(rudel-infinote-group-document-state-synchronizing::rudel-infinote/sync-end):
-       added comments and display a warning when the number of received
-       synchronization items differs from the expected number
-       (rudel-infinote-group-document-state-joining): added documentation
-       string
-
-       Added a 'closed' state to infinote group classes
-       * infinote/rudel-infinote-group-text-document.el
-       (rudel-infinote-group-text-document-states): added closed state
-       * infinote/rudel-infinote-group-document.el
-       (rudel-infinote-group-document-states): added closed state
-       * infinote/rudel-infinote-group-directory.el
-       (rudel-infinote-directory-state-new): added a comment
-       (rudel-infinote-group-directory-states): added closed state
-
-       Added new class rudel-infinote-group-state-closed
-       * infinote/rudel-infinote-group.el
-       (rudel-infinote-group-state-closed): new closed; groups enter this
-       state when a close message is received
-       (this rudel-infinote-group-state-closed::rudel-accept): new
-       method; ignore all messages
-
-2010-06-02  Jan Moringen  <address@hidden>
-
-       Handle user joining in infinote/rudel-infinote-group-document.el
-       * infinote/rudel-infinote-group-document.el (require warnings):
-       new require; required for displaying warnings
-       (rudel-infinote-group-document-state-idle::rudel-infinote/user-join):
-       create a user object and add it to the document
-       (rudel-infinote-group-document-state-idle::rudel-infinote/user-rejoin):
-       find the user in the document and update its slots; warn if the
-       user cannot be found
-       
(rudel-infinote-group-document-state-synchronizing::rudel-infinote/sync-user):
-       create a user object and add it to the document
-       (rudel-infinote-group-document-state-joining::rudel-infinote/user-join):
-       find the self user and update its slots; then add it to the
-       document
-       
(rudel-infinote-group-document-state-joining::rudel-infinote/user-rejoin):
-       find the self user and update its slots; make the self user and
-       the document user agree; warn if one is not found or they do not
-       agree
-
-       Renamed group states in infinote/rudel-infinote-group-document.el
-       * infinote/rudel-infinote-group-document.el
-       (rudel-infinote-group-document-state-idle): renamed
-       rudel-infinote-document-state-idle ->
-       rudel-infinote-group-document-state-idle
-       (rudel-infinote-group-document-state-synchronizing):
-       rudel-infinote-document-state-synchronizing ->
-       rudel-infinote-group-document-state-synchronizing
-       (rudel-infinote-group-document-states): changed names of group
-       states
-
-       Store and use id in infinote/rudel-infinote-group-directory.el
-       * infinote/rudel-infinote-group-directory.el
-       (rudel-infinote-directory-state-subscribing::id): new slot; stores
-       the id ob the target node of the subscription
-       (rudel-infinote-directory-state-subscribing::rudel-enter): store
-       id; added documentation string
-       
(rudel-infinote-directory-state-subscribing::rudel-infinote/subscribe-session):
-       check the received id against the stored id; send message through
-       group
-
-       Subscription ack in infinote/rudel-infinote-group-directory.el
-       * infinote/rudel-infinote-group-directory.el
-       (rudel-infinote-directory-state-subscribing;:rudel-leave): new
-       method; send subscription acknowledgment
-
-       Reversed order of superclasses of rudel-infinote-document
-       * infinote/rudel-infinote-document.el (rudel-infinote-document):
-       reversed order of superclasses; added documentation string
-
-2010-06-01  Jan Moringen  <address@hidden>
-
-       Fixed parens in rudel-infinote-embed-in-request
-       * infinote/rudel-infinote-util.el
-       (rudel-infinote-parse-sequence-number): validate input
-       (rudel-infinote-embed-in-request): fixed parens
-
-       Exploit auto sequence numbers in rudel-infinote-group-directory
-       * infinote/rudel-infinote-group-directory.el
-       (rudel-infinote-directory-state-exploring::rudel-enter): do not
-       add sequence number to message since the super class of the group
-       does that automatically
-       (rudel-infinote-group-directory): changed superclass to
-       `rudel-infinote-sequence-number-group' to get automatic sequence
-       number injection
-
-       New rudel-make-and-add-group in rudel-infinote-group-directory.el
-       * infinote/rudel-infinote-group-directory.el
-       (rudel-infinote-group-directory::rudel-add-node): changed call
-       `rudel-add-new-node' -> `rudel-make-and-add-node'
-       * infinote/rudel-infinote-client.el
-       (rudel-infinote-client-connection::rudel-make-and-add-group): new
-       method; create a new group object and add it to the list of groups
-       (rudel-infinote-client-connection::rudel-make-and-add-node):
-       renamed `rudel-add-new-node' -> `rudel-make-and-add-node'
-
-       Use self user in rudel-local-operation in rudel-infinote-client.el
-       * infinote/rudel-infinote-client.el
-       (rudel-infinote-client-connection::rudel-local-operation): obtain
-       self user from session object
-
-       Added methods rudel-self and rudel-find-user in rudel.el
-       * rudel.el (rudel-client-session::rudel-self): new reader method;
-       returns the self user
-       (rudel-document::rudel-find-user): new method; finds ands returns
-       a specified user
-
-       Removed obsolete method from infinote/rudel-infinote-client.el
-       * infinote/rudel-infinote-client.el
-       (rudel-infinote-client-connection::rudel-register-state): removed
-       obsolete method
-
-       Added slot plugins to class rudel-infinote-client-connection
-       * infinote/rudel-infinote-client.el
-       (rudel-infinote-client-connection::plugins): new slot; list of
-       plugins advertised by the remote side
-       (rudel-infinote-client-connection::initialize-instance): minor
-       cleanup
-
-2010-05-30  Jan Moringen  <address@hidden>
-
-       Store remote side id in infinote/rudel-infinote-group.el
-       * infinote/rudel-infinote-group.el
-       (rudel-infinote-sequence-number-group::remote-id): new slot;
-       stores id assigned by remote side
-
-       Store sequence number and plugins in rudel-infinote/welcome
-       * infinote/rudel-infinote-group-directory.el
-       (rudel-infinote-directory-state-new::sequence-number): new slot;
-       stores the sequence number transmitted by the remote side
-       (rudel-infinote-directory-state-new::plugins): new slot; stores
-       the plugin list transmitted by the remote side
-       (rudel-infinote-directory-state-new::rudel-infinote/welcome):
-       store sequence number and plugin list received form remote side
-
-       Warning severity in infinote/rudel-infinote-group-directory.el
-       * infinote/rudel-infinote-group-directory.el
-       (rudel-infinote-directory-state-exploring::rudel-infinote/explore-end):
-       specify warning severity in call to `display-warning'
-
-       Improved commentary section in infinote/rudel-infinote-group.el
-       * infinote/rudel-infinote-group.el (header): extended commentary
-       section; added 0.2 to version section
-
-       Added documentation strings in infinote/rudel-infinote-group.el
-       * infinote/rudel-infinote-group.el (rudel-infinote-group): made
-       abstract; added documentation string
-       (rudel-infinote-embed-in-group): added documentation string
-
-       More data in warnings in rudel-infinote-group-state::rudel-accept
-       * infinote/rudel-infinote-group.el
-       (rudel-infinote-group-state::rudel-accept): include more data in
-       warning messages for failed requests
-
-       Added class rudel-infinote-sequence-number-group
-       * infinote/rudel-infinote-group.el
-       (rudel-infinote-sequence-number-group): new class; added
-       automatically incrementing sequence numbers to messages sent
-       through the group
-
-       Improved docstring of method rudel-obby/obby_document/sync_init
-       * obby/rudel-obby-client.el
-       
(rudel-obby-client-state-subscribing::rudel-obby/obby_document/sync_init):
-       improved documentation string
-
-       New function rudel-obtain-password, used in XMPP SASL mechanism
-       * rudel-interactive.el (rudel-obtain-password): new function; try
-       to obtain from different sources, falling back to prompting the
-       user
-       * xmpp/rudel-xmpp-sasl.el
-       (rudel-xmpp-state-sasl-mechanism-step::rudel-accept): bind
-       `sasl-read-passphrase' to `rudel-obtain-sasl-password' to make it
-       overridable
-       (rudel-xmpp-state-sasl-mechanism-step::rudel-obtain-sasl-password):
-       call `rudel-obtain-password'
-       * obby/rudel-obby.el (rudel-obby-backend::rudel-ask-connect-info):
-       use `rudel-obtain-password' instead of `read-string'
-
-       Contents of header commentary section in xmpp/rudel-xmpp-sasl.el
-       * xmpp/rudel-xmpp-sasl.el (header): added contents of commentary
-       section
-
-       Match response types with case in xmpp/rudel-xmpp-sasl.el
-       * xmpp/rudel-xmpp-sasl.el
-       (rudel-xmpp-state-sasl-mechanism-step::rudel-accept): use `case'
-       instead of `cond' when matching response types
-
-       Improved customization group definition in rudel.el
-       * rudel.el (defgroup rudel): added group communication and :link s
-       to the library, the Sourceforge project page and the Emacs Wiki
-       page
-
-2010-05-28  Jan Moringen  <address@hidden>
-
-       Make xml->string not pretty-print unless requested
-       * rudel-xml.el (xml->string): use new utility function
-       rudel-xml-print-node when not pretty-printing
-       (rudel-xml-print-node): new utility function; print XML node
-       (rudel-xml-print-attr): new utility function; print XML attribute
-
-       Added documentation and comments in rudel-xml.el
-       * rudel-xml.el (do-tag-children): added documentation string
-       (rudel-xml-toplevel-tag-positions): Improved documentation string;
-       added some comments
-
-       Allow access to text child nodes in with-tag-attrs
-       * rudel-xml.el (with-tag-attrs): allow second position in binding
-       specification to text; look up child text node
-
-2010-05-27  Jan Moringen  <address@hidden>
-
-       Added some branch tags in TODO
-       * TODO (Future): added branch tags; multiple listeners task is
-       started
-       (Milestone 0.4): added branch tags
-
-       Associated rudel-unsubscribed-documents to rudel-client-session
-       * rudel.el (rudel-client-session::rudel-unsubscribed-documents):
-       changed specializer rudel-session -> rudel-client-session
-       (rudel-document::rudel-chunks): write functions with #' syntax
-       (rudel-mode-changed-buffers): reflowed documentation string
-
-2010-05-25  Jan Moringen  <address@hidden>
-
-       Warn if document does not exist when handling obby_document msg
-       * obby/rudel-obby-server.el (require warnings): new require; used
-       to display warning messages
-       (rudel-obby-server-state-idle::rudel-obby/obby_document): check
-       whether the document does exist; display a warning if it does not
-
-       Pass new session to session initiation in rudel-host-session
-       * rudel.el (rudel-host-session): call
-       rudel-session-initiation-advertise when the new session object has
-       been constructed
-
-       Cosmetic changes and doc improvements in obby/rudel-obby-client.el
-       * obby/rudel-obby-client.el
-       (rudel-obby-client-state-session-synching::rudel-obby/net6_client_join):
-       improved comment; cosmetic changes
-       (rudel-obby/obby_document/sync_chunk): improved documentation
-       string; changed let* -> let; use zerop instead of = ... 0; added a
-       comment
-       (rudel-obby-connection::rudel-publish): added a documentation
-       string
-
-2010-05-24  Jan Moringen  <address@hidden>
-
-       Removed &rest from slots arg of init-inst of rudel-obby-connection
-       * obby/rudel-obby-client.el
-       (rudel-obby-connection::initialize-instance): removed &rest from
-       slots argument
-
-       Minor fixes and improvements in obby/rudel-obby-client.el
-       * obby/rudel-obby-client.el
-       (rudel-obby-client-state-idle::rudel-obby/net6_client_join): use
-       test = when locating user; improved comment
-       (rudel-obby-client-state-idle::rudel-obby/obby_document_create):
-       added TODO item regarding not displaying messages from the backend
-       (rudel-obby-client-state-idle::rudel-obby/obby_document/rename):
-       improved documentation string
-       (rudel-obby-client-state-session-synching): reflowed documentation
-       strings of slots
-       
(rudel-obby-client-state-subscribing::rudel-obby/obby_document/sync_init):
-       fixed name of document slot
-
-       Added version to header in rudel.el and update rule to Project.ede
-       * rudel.el (header): added Version field
-       * Project.ede (target rudel): added rudel.el to :versionsource
-
-2010-05-23  Jan Moringen  <address@hidden>
-
-       Small improvements and updates in doc/card.tex
-       * doc/card.tex (macros): removed metabox macro; renamed \ccc ->
-       \prefix
-       (Backends): improved wording; added infinote and IRC backends
-       (Examples): reorganized; added prompts for transport and protocol
-       backends
-       (Debugging): new section; explain dumping backends and loading the
-       debug library
-
-       Added clickable status icon task to milestone Future in TODO
-       * TODO (Future): added status icon should be clickable task;
-       document history is in irc branch
-
-       Improved arg handling rudel-find-{user, document} in rudel.el
-       * rudel.el (rudel-session::rudel-find-user):
-       (rudel-session::rudel-find-document): handle optional arguments
-       more efficiently
-       (rudel-user): added a comment
-
-       Wait for idle state in rudel-infinote-backend::rudel-connect
-       * infinote/rudel-infinote.el
-       (rudel-infinote-backend::rudel-connect): wait for the infinote
-       connection object to enter its idle state
-
-       Improved documentation string of class rudel-infinote-node
-       * infinote/rudel-infinote-node.el (rudel-infinote-node): improved
-       documentation string
-
-       Disabled query on exit for TLS and socket transport processes
-       * tls/rudel-tls.el (rudel-tls-make-process): set query on exit
-       flag of the process to nil
-       * socket/rudel-socket.el
-       (rudel-tcp-backend::rudel-make-connection):
-       (rudel-tcp-backend::rudel-wait-for-connections): set :noquery flag
-       of the new process
-
-       Improved docstring of global-rudel-minor-mode in rudel-mode.el
-       * rudel-mode.el (header): updated copyright
-       (rudel-header-subscriptions--add-user): renamed lexical-let
-       binding for clarity
-       (global-rudel-minor-mode): Added key bindings to documentation
-       string
-
-       Small fixes and improvements in README
-       * README (INTRODUCTION): fixed a typo
-       (GETTING STARTED): added comment about enabling
-       global-rudel-minor-mode in .emacs; added markup to example
-
-       Added branches as tags and other updates in TODO
-       * TODO (Future): added tasks typing notification, document
-       history, session log, activity indicator, tracking of chunk
-       modifications, peer view indication; added branch tags
-       (Milestone 0.4): added branch tags
-
-2010-05-21  Jan Moringen  <address@hidden>
-
-       Fixed header sections in rudel-operators.el
-       * rudel-operators.el (header): updated copyright; minor
-       improvements in commentary section; minor improvements in history
-       section
-
-       Fixed XMPP TLS state name in xmpp/rudel-xmpp-tls.el
-       * xmpp/rudel-xmpp-tls.el (rudel-xmpp-tls-states): fixed class name
-       for start-tls state rudel-xmpp-start-tls-start ->
-       rudel-xmpp-state-tls-start
-
-       Fixed class name in methods in xmpp/rudel-xmpp-tunnel.el
-       * xmpp/rudel-xmpp-tunnel.el
-       (rudel-xmpp-tunnel-transport::rudel-send):
-       (rudel-xmpp-tunnel-transport::rudel-message): fixed class name in
-       method definition rudel-xmpp-transport ->
-       rudel-xmpp-tunnel-transport
-
-2010-05-16  Jan Moringen  <address@hidden>
-
-       Updated IRC, TLS and infinote related issues in TODO
-       * TODO (Future): added task for IRC backend
-       (Milestone 0.3): marked TLS start state problem as fixed; marked
-       document tree-related tasks as started
-
-       Add new nodes to list in infinote/rudel-infinote-client.el
-       * infinote/rudel-infinote-client.el
-       (rudel-infinote-client-connection::rudel-add-new-node): call
-       rudel-add-node to add the new nodes to the node list of the client
-       connection
-
-       Moved rudel-unique-name from infinote-document to infinote-node
-       * infinote/rudel-infinote-node.el
-       (rudel-infinote-node::rudel-unique-name): new method; move to
-       rudel-infinote-note from rudel-infinote-document
-       * infinote/rudel-infinote-document.el
-       (rudel-infinote-document::rudel-unique-name): removed; moved to
-       rudel-infinote-node
-
-       Fixed slot in rudel-infinote-client-connection::rudel-find-node
-       * infinote/rudel-infinote-client.el
-       (rudel-infinote-client-connection::rudel-find-node): fixed name of
-       slot documents -> nodes
-
-       Renamed r-add-document -> r-add-new-node in -infinote-client.el
-       * infinote/rudel-infinote-client.el
-       (rudel-infinote-client-connection::rudel-add-new-node): renamed
-       rudel-add-document -> rudel-add-new-node; added comments
-
-       Renamed -document to -node in rudel-infinote-group-directory.el
-       * infinote/rudel-infinote-group-directory.el
-       (rudel-infinote-directory-state-idle::rudel-infinote/add-node):
-       call rudel-add-node instead of rudel-add-document
-       (rudel-infinote-directory-state-exploring::rudel-infinote/add-node):
-       call rudel-add-node instead of rudel-add-document
-       (rudel-infinote-group-directory::rudel-add-node): renamed
-       rudel-add-document -> rudel-add-node
-       (rudel-infinote-group-directory::rudel-remove-node): renamed
-       rudel-remove-document -> rudel-remove-node
-
-       Improved creation of root node in rudel-infinote-client-connection
-       * infinote/rudel-infinote-client.el
-       (rudel-infinote-client-connection::initialize-instance): add the
-       root directory as a node, not as a document
-
-       Docstrings of groups and nodes of rudel-infinote-client-connection
-       * infinote/rudel-infinote-client.el
-       (rudel-infinote-client-connection::groups): added documentation
-       string
-       (rudel-infinote-client-connection::nodes): added documentation
-       string
-
-       Extended rudel-remove-group infinote/in rudel-infinote-client.el
-       * infinote/rudel-infinote-client.el
-       (rudel-infinote-client-connection::rudel-remove-group): changed
-       argument to allow for group name or group object; added
-       documentation string
-
-       Methods of rudel-infinote-client to find, add, remove nodes
-       * infinote/rudel-infinote-client.el
-       (rudel-infinote-client-connection::rudel-find-node): new method;
-       find node by its id or by other criteria
-       (rudel-infinote-client-connection::rudel-add-node): added
-       documentation string
-       (rudel-infinote-client-connection::rudel-remove-node): new method;
-       remove a node
-
-       Signal proper errors in infinote/rudel-infinote-client.el
-       * infinote/rudel-infinote-client.el (require cl): new require; we
-       use cl functions
-       (require rudel-infinote-errors): new require; for specialized
-       infinote errors
-       (rudel-infinote-client-connection::rudel-add-document): when we
-       cannot find a parent node, signal rudel-infinote-no-such-node;
-       added a comment
-
-       Added error conditions for the infinote backend
-       * infinote/rudel-infinote-errors.el: new file; contains
-       definitions of error conditions for the infinote backend
-       * infinote/Project.ede (target infinote): added
-       rudel-infinote-errors.el
-
-2010-05-15  Jan Moringen  <address@hidden>
-
-       Fixed invalid state switch in xmpp/rudel-xmpp.el
-       * xmpp/rudel-xmpp.el (rudel-xmpp-backend::rudel-make-connection):
-       call `rudel-start' of the TCP transport, not the XMPP transport
-       (rudel-xmpp-state-negotiate-stream::rudel-enter): removed
-       whitespace in stream template string
-
-       Sequence numbers start at 1 in infinote/rudel-infinote-client.el
-       * infinote/rudel-infinote-client.el
-       (rudel-infinote-client-connection::sequence-number): start at 1,
-       not 0
-
-2010-05-02  Jan Moringen  <address@hidden>
-
-       Improved comment in rudel-infinote-group-state::rudel-accept
-       * infinote/rudel-infinote-group.el
-       (rudel-infinote-group-state::rudel-accept): improved a comment
-
-       Removed class rudel-infinote-group-state in rudel-infinote-state.el
-       * infinote/rudel-infinote-state.el (header): added file commentary
-       (rudel-infinote-group-state): removed class; this is now handled
-       in rudel-infinote-group.el
-
-       Silence the byte-compiler in obby/rudel-obby-server.el
-       * obby/rudel-obby-server.el (require rudel-obby): required to
-       silence the byte-compiler
-
-       Fixed state list in rudel-infinote-backend::rudel-connect
-       * infinote/rudel-infinote.el
-       (rudel-infinote-backend::rudel-connect): wait for transport to go
-       to idle state, instead of established; expect disconnected error
-       state
-
-       Fixed parentheses in infinote/rudel-infinote-group.el
-       * infinote/rudel-infinote-group.el
-       (rudel-infinote-embed-in-group): fixed parentheses
-
-       Cleanup in infinote/rudel-infinote-group-text-document.el
-       * infinote/rudel-infinote-group-text-document.el
-       (rudel-infinote-group-text-document-states): fixed comment
-       (rudel-infinote-group-text-document::initialize-instance): leave
-       initialization of state list to state-machine class
-
-       Use `display-warning' in infinote/rudel-infinote-group-directory.el
-       * infinote/rudel-infinote-group-directory.el
-       (rudel-infinote-directory-state-exploring::rudel-infinote/explore-end):
-       use `display-warning' instead of `warn'
-
-2010-04-17  Jan Moringen  <address@hidden>
-
-       Require warnings library where display-warning is used
-       * rudel-backend.el (header): updated copyright
-       (require warnings):
-       * obby/rudel-obby-state.el (require warnings):
-       * obby/rudel-obby-client.el (require warnings):
-       * infinote/rudel-infinote-group.el (require warnings):
-       * infinote/rudel-infinote-group-directory.el (require warnings):
-       * infinote/rudel-infinote-client.el (require warnings): new
-       require; this is needed since display-warning is used
-
-2010-04-10  Jan Moringen  <address@hidden>
-
-       Warn for dispatch errors in infinote/rudel-infinote-group.el
-       * infinote/rudel-infinote-group.el
-       (rudel-infinote-group-state::rudel-accept): handle dispatch errors
-       by displaying a warning
-
-       New state in infinote/rudel-infinote-group-directory.el
-       * infinote/rudel-infinote-group-directory.el (require xml):
-       (require rudel-xml): new require; used for XML processing
-       (rudel-infinote-directory-state-new): new class; initial state of
-       the infinote directory group
-       (rudel-infinote-directory-state-new::rudel-infinote/welcome): new
-       method; handle infinote welcome message
-       (rudel-infinote-directory-state-exploring::rudel-enter): use
-       sequence number of group object instead of local fake binding
-       (rudel-infinote-group-directory-states): added new state to state
-       list; added documentation string
-       (rudel-infinote-group-directory): added documentation string
-       (rudel-infinote-group-directory::sequence-number): new slot;
-       sequence number used when sending requests
-
-       Delegation for group states in infinote/rudel-infinote-group.el
-       * infinote/rudel-infinote-group.el (require rudel-util): new
-       require; for rudel-impersonator and rudel-delegator
-       (rudel-infinote-group-state): added superclasses
-       `rudel-impersonator' and `rudel-delegator'
-       (rudel-infinote-group-state::impersonation-target-slot): new slot
-       specification; specify group as impersonation target
-       (rudel-infinote-group-state::delegation-target-slot): new slot
-       specification; specify group as delegation target
-
-       Check color on entering joining state in obby/rudel-obby-client.el
-       * obby/rudel-obby-client.el
-       (rudel-obby-client-state-joining::rudel-enter): check color before
-       trying to login; switch to failure state if the color is invalid
-
-       Seq. number parsing/generation in infinote/rudel-infinote-util.el
-       * infinote/rudel-infinote-util.el
-       (rudel-infinote-parse-sequence-number): new function; parse
-       infinote sequence number
-       (rudel-infinote-generate-sequence-number): new function; generate
-       infinote sequence number
-
-       Quote in rudel-operation->xml in infinote/rudel-infinote-util.el
-       * infinote/rudel-infinote-util.el
-       (adopted-compound::rudel-operation->xml): fixed missing quote of
-       split element in XML generation
-
-       Added idea enable modes by default? in TODO
-       * TODO (Milestone 0.3): new task; enable modes by default?
-
-       Minor whitespace cleanup in rudel.el
-       * rudel.el (rudel-allocate-buffer-function): whitespace cleanup
-
-       Added docstrings to rudel-obby-server in obby/rudel-obby-server.el
-       * obby/rudel-obby-server.el (rudel-obby-server::clients):
-       (rudel-obby-server::next-client-id):
-       (rudel-obby-server::next-user-id):
-       (rudel-obby-server::contexts): added documentation strings
-
-2010-04-03  Jan Moringen  <address@hidden>
-
-       Updated fragment assembling and looping functions
-       * rudel-util.el (rudel-assemble-line-fragments): removed; replaced
-       by generic `rudel-assemble-fragments'
-       (rudel-assemble-fragments): simplified; call function with two
-       arguments instead of a list
-       (rudel-assemble-lines): take two arguments, data and storage
-       (rudel-loop-lines): removed; replaced by generic
-       `rudel-loop-fragments'
-       * rudel-xml.el (rudel-xml-assemble-tags): take two arguments, data
-       and storage; extended documentation string
-       * xmpp/rudel-xmpp-util.el (rudel-xmpp-assemble-stream): take two
-       arguments, data and storage; handle cases in which the initial
-       chuck contains other elements than stream and features; added some
-       comments
-
-2010-03-31  Jan Moringen  <address@hidden>
-
-       Added idea consolidate operations before sending to TODO
-       * TODO (Future): new task; delay and consolidate operations before
-       sending in order to conserve bandwidth
-
-2010-03-26  Jan Moringen  <address@hidden>
-
-       Added idle state and shelving of data to XMPP transport
-       * xmpp/rudel-xmpp.el (rudel-xmpp-state-established::rudel-enter):
-       removed; handled by method specialized on base class
-       (rudel-xmpp-state-established::rudel-accept): new method; store
-       received data for later processing in successor states
-       (rudel-xmpp-state-idle): new class; idle state; the transport
-       enters this state after establishing the connection
-       (rudel-xmpp-state-idle::rudel-enter): new method; process stored
-       data
-       (rudel-xmpp-state-idle::rudel-accept): new method; pass received
-       data to filter function
-       (rudel-xmpp-states): added idle state
-       (rudel-xmpp-transport::shelve-buffer): new slot; used to store
-       data that cannot be processing in current state for later
-       processing
-       (rudel-xmpp-transport::rudel-start): new method; put the transport
-       into idle state; this can trigger processing of shelved data
-
-       Added &rest args to rudel-xmpp-state::rudel-enter
-       * xmpp/rudel-xmpp-state.el (rudel-xmpp-state::rudel-enter): added
-       &rest args
-
-2010-03-24  Jan Moringen  <address@hidden>
-
-       Fixed typo in a docstring in xmpp/rudel-xmpp.el
-       * xmpp/rudel-xmpp.el (rudel-xmpp-backend::rudel-ask-connect-info):
-       fixed typo in documentation string
-
-       Fixed spelling error in docstring in rudel-util.el
-       * rudel-util.el (rudel-dispatch): fixed spelling error in
-       documentation string
-
-       Escaped parens in a docstring in rudel-util.el
-       * rudel-util.el (header): updated copyright
-       (rudel-assemble-lines): Escaped top-level-looking parenthesis in
-       documentation string
-
-       Removed &rest from initialize-instance in wave/rudel-wave.el
-       * wave/rudel-wave.el (header): updated copyright
-       (rudel-wave-backend::initialize-instance): remove &rest from
-       arguments
-
-       Added rudel-adebug-discover to rudel-debug.el
-       * rudel-debug.el (rudel-adebug-discover): new function; analyze
-       discoverable session in a data debug buffer
-
-2010-03-22  Jan Moringen  <address@hidden>
-
-       Added idea multiple listeners to Future milestone in TODO
-       * TODO (Future): new task; allow multiple transport listeners to
-       be associated with a server session
-
-2010-03-20  Jan Moringen  <address@hidden>
-
-       Escaped parentheses in docstring in rudel-session-initiation.el
-       * rudel-session-initiation.el (rudel-configured-sessions): escaped
-       parentheses in documentation string
-
-       Fixed error in rudel-session-initiation-adjust-info
-       * rudel-session-initiation.el
-       (rudel-session-initiation-adjust-info): push elements onto
-       intermediate result in reverse order, then reverse the whole list
-
-2010-03-19  Jan Moringen  <address@hidden>
-
-       Added ideas (passwords, buffer names) to Future milestone in TODO
-       * TODO (Future): new task; obtain password from auth-source.el or
-       secrets.el; new task; when subscribing to a document set the
-       buffer filename
-
-       Added directory infinote/doc for infinote backend documentation
-       * infinote/doc: new directory; for documentation concerning the
-       infinote backend
-
-2010-03-18  Jan Moringen  <address@hidden>
-
-       Added node base class rudel-infinote-node to infinote backend
-       * infinote/Project.ede (target infinote): added
-       rudel-infinote-node.el; renamed
-       rudel-infinote-directory-document.el to
-       rudel-infinote-node-directory.el
-       * infinote/rudel-infinote-node.el: new file; contains
-       `rudel-infinote-node' class which is the base class for all node
-       classes
-       * infinote/rudel-infinote-node-directory.el: renamed
-       `rudel-infinote-directory-document.el' ->
-       `rudel-infinote-node-directory.el'
-       (header): bumped version to 0.2
-       (rudel-infinote-directory-node): renamed
-       `rudel-infinote-directory-document' ->
-       `rudel-infinote-node'-directory; added documentation string
-       (rudel-infinote-node-directory::child-cache): added documentation
-       string
-       (provide rudel-infinote-node-directory): changed
-       rudel-infinote-directory-document -> rudel-infinote-node-directory
-       * infinote/rudel-infinote-document.el (rudel-infinote-document):
-       now derived from `rudel-document' and `rudel-infinote-node'
-       (rudel-infinote-document::id):
-       (rudel-infinote-document::parent):
-       (rudel-infinote-document::group): moved into `rudel-infinote-node'
-       (rudel-infinote-document::rudel-unique-name): added documentation
-       string
-       * infinote/rudel-infinote-client.el
-       (require rudel-infinote-node-directory): changed
-       rudel-infinote-directory-document -> rudel-infinote-node-directory
-       (rudel-infinote-client-connection::initialize-instance):
-       (rudel-infinote-client-connection::rudel-add-document):
-       instantiate `rudel-infinote-node-directory' instead of
-       `rudel-infinote-directory-document'
-
-       Removed invalid files from infinote/Project.ede
-       * infinote/Project.ede (target infinote): removed invalid files
-       rudel-infinote-server.el and rudel-infinote-document-group.el
-
-2010-03-14  Jan Moringen  <address@hidden>
-
-       Project files for telepathy backend
-       * Project.ede (target autoloads): added telepathy
-       * telepathy/Project.ede: new file; project file for telepathy
-       sub-directory
-       * telepathy/rudel-telepathy.el (header): updated copyright;
-       updated version
-       (rudel-telepathy-backend::initialize-instance): removed &rest from
-       slots argument
-       * rudel-compile.el (top level autoloads):
-       (top level): added telepathy sub-directory
-
-       Removed &rest from initialize-instance in obby/rudel-obby.el
-       * obby/rudel-obby.el (rudel-obby-backend::initialize-instance):
-       removed &rest from slots arguments
-
-2010-03-12  Jan Moringen  <address@hidden>
-
-       Ensure self user is present in after sync in obby backend
-       * obby/rudel-obby-client.el (rudel-obby/obby_sync_final): switch
-       to we-finalized when the self user is missing
-
-       Updated copyright, year and version in reference card
-       * doc/card.tex (header): updated version and copyright
-        (constants): updated version and copyright
-       * doc/card.pdf: regenerated
-
-2010-03-10  Jan Moringen  <address@hidden>
-
-       Improved some error messages in infinote backend
-       * infinote/rudel-infinote-client.el
-       (rudel-infinote-client-connection::rudel-receive):
-       (rudel-infinote-client-connection::rudel-add-document): improved
-       error messages
-
-       Added tasks concerning data queuing and new hooks to TODO
-       * TODO (Future): new task, provide additional hooks; new task,
-       always queue outgoing data first; new task, display queued data
-
-       Added draft of package diagram describing Rudel's architecture
-       * doc/architecture.svg: new draft of a package diagram;
-       architectural overview
-       * doc/architecture.png: generated
-
-       Improved some error messages in obby backend
-       * obby/rudel-obby-state.el (header): updated copyright
-       (rudel-obby-document-handler::rudel-obby/obby_document): improved
-       error message
-       * obby/rudel-obby-client.el (header): updated copyright
-       (rudel-obby-client-state-idle::rudel-obby/net6_client_part):
-       (rudel-obby-client-state-idle::rudel-obby/obby_document_remove):
-       (rudel-obby-client-state-idle::rudel-obby/obby_document/record):
-       improved error messages
-
-       Handle all object types when writing to debug streams
-       * rudel-debug.el (rudel-debug-write-to-stream): handle objects
-       types other than string and object by calling `prin1-to-string'
-
-2010-03-01  Jan Moringen  <address@hidden>
-
-       Require rudel-infinote-state, not rudel-infinote-states
-       * infinote/rudel-infinote-group.el (require rudel-infinote-state):
-       fixed require rudel-infinote-states -> rudel-infinote-state
-
-       Infinote mock user has to be of class rudel-infinote-user
-       * infinote/rudel-infinote-client.el (require rudel-infinote-user):
-       required for mock user creation
-       (rudel-infinote-client-connection::initialize-instance): mock user
-       has to be an object of class rudel-infinote-user
-
-       Extended capability list of infinote backend
-       * infinote/rudel-infinote.el
-       (rudel-infinote-backend::capabilities): added group-undo
-       capability
-       (rudel-infinote-backend::rudel-connect): better object name for
-       the created connection object
-
-       Added "Commentary" comment to infinote/rudel-infinote-group.el
-       * infinote/rudel-infinote-group.el (header): added a "Commentary"
-       comment
-
-       Added task to investigate XEP 0047 for xmpp tunnel to TODO
-       * TODO (Future): added task to investigate XEP 0047 for xmpp
-       tunnel
-
-       Added standard draft for XEP-0047: In-Band Bytestreams to xmpp/doc
-       * xmpp/doc/xep-0047.html: new file; standard draft for XEP-0047:
-       In-Band Bytestreams
-
-       Fixed docstring typo in infinote/rudel-infinote.el
-       * infinote/rudel-infinote.el (rudel-connect): fixed typo in
-       docstring obby -> infinote
-
-       Provide customization to append chat messages at top or bottom
-       * rudel-chat.el (header): updated copyright
-       (rudel-chat-handler-function): split "log into buffer" behavior
-       into "append at bottom" and "appending at top"
-       (rudel-chat-handle-buffer-top): renamed `rudel-chat-handle-buffer
-       -> `rudel-chat-handle-buffer-top
-       (rudel-chat-handle-buffer-bottom): new function; append chat
-       messages at bottom of target buffer
-
-2010-02-06  Jan Moringen  <address@hidden>
-
-       Fixed use of rudel-state-wait in infinote/rudel-infinote-client.el
-       * infinote/rudel-infinote-client.el
-       (rudel-infinote-client-connection::rudel-publish): added a comment
-       (rudel-infinote-client-connection::rudel-subscribe-to): fixed use
-       of `rudel-state-wait'; added more comments
-
-       Fixed some comments in infinote/rudel-infinote-client.el
-       * infinote/rudel-infinote-client.el
-       (rudel-infinote-client-connection::rudel-publish):
-       (rudel-infinote-client-connection::rudel-subscribe-to): fixed
-       comments
-
-2010-02-04  Jan Moringen  <address@hidden>
-
-       Extended rudel-infinote-client-connection::rudel-receive
-       * infinote/rudel-infinote-client.el (header): fixed X-RCS field
-       (rudel-receive): enabled handler code; use `display-warning'
-       instead of `warn'
-
-       Added docstrings in infinote/rudel-infinote-group-directory.el
-       * infinote/rudel-infinote-group-directory.el
-       (rudel-infinote-directory-state-idle): added documentation string
-       (rudel-infinote-directory-state-idle::rudel-infinote/sync-in):
-       return nil to avoid state switch
-       (rudel-infinote-directory-state-exploring): added documentation
-       string
-       (rudel-infinote-directory-state-subscribing): added documentation
-       string
-
-2010-02-02  Jan Moringen  <address@hidden>
-
-       Initial import of infinote backend
-       * Project.ede (target autoloads): added infinote directory
-       * rudel-compile.el (top level autoload):
-       (top level): added infinote directory
-       * infinote/Project.ede: mew file; project file for
-       * infinote/rudel-infinote.el: new file; infinote backend main file
-       * infinote/rudel-infinote-util.el: new file; infinote backend
-       miscellaneous functions
-       * infinote/rudel-infinote-user.el: new file; infinote user class
-       * infinote/rudel-infinote-text-document.el: new file; infinote
-       text document class
-       * infinote/rudel-infinote-state.el: new file; infinote state base
-       classes
-       * infinote/rudel-infinote-group.el: new file; infinote
-       communication group base class
-       * infinote/rudel-infinote-group-text-document.el: new file; text
-       document communication group class
-       * infinote/rudel-infinote-group-document.el: new file; document
-       communication group class
-       * infinote/rudel-infinote-group-directory.el: new file; directory
-       communication group class
-       * infinote/rudel-infinote-document.el: new file; infinote document
-       class
-       * infinote/rudel-infinote-directory-document.el: new file;
-       infinote directory document class
-       * infinote/rudel-infinote-client.el: new file; infinote client
-       functionality
-
-       Added operation classes for point, range, cursor and selection
-       * rudel-operations.el (header): updated copyright; fixed and
-       extended commentary section; bumped version to 0.2
-       (rudel-point-operation): new abstract class; base class for
-       point-type operations
-       (rudel-range-operation): new abstract class; base class for
-       range-type operations
-       (rudel-insert-op): now subclass of rudel-point-operation
-       (rudel-delete-op): now subclass of rudel-range-operation
-       (rudel-delete-op::slot-missing): moved to `rudel-range-op'
-       (rudel-move-cursor-op): new class; objects represent cursor
-       movements
-       (rudel-move-selection-op): new class; objects represent movements
-       of the selection
-
-2010-01-31  Jan Moringen  <address@hidden>
-
-       Initial import of Adopted algorithm
-       * Project.ede (autoloads): added adopted directory
-       * rudel-compile.el (header): updated copyright
-       (top level autoload):
-       (top level): added adopted directory
-       * adopted/Project.ede: new file; project file adopted subdirectory
-       * adopted/adopted.el: new file; Adopted algorithm entry point
-       * adopted/adopted-operation.el: new file; Adopted operation base class
-       * adopted/adopted-nop.el: new file; Adopted no operation class
-       * adopted/adopted-insert.el: new file; Adopted insert operation
-       * adopted/adopted-delete.el: new file; Adopted delete operation
-       * adopted/adopted-compound.el: new file Adapted compound operation
-
-2010-01-27  Jan Moringen  <address@hidden>
-
-       Integrated new debugging framework
-       * rudel-debug.el (header): updated copyright; fixed keywords;
-       extended commentary section; added 0.2 to history section
-       (require rudel-transport-util):
-       (require rudel-socket): now required, since we install methods
-       (rudel-debug-tag-faces): changed from constant to variable
-       (rudel-state-change :before):
-       (rudel-debug-stream-name):
-       (rudel-debug-stream-insert): removed; replaced by
-       `rudel-debug-write-to-stream' and `rudel-debug-write'
-       (rudel-debug-target): new generic function; determine debug stream
-       for an object
-       (rudel-debug-write-to-stream): new function; write information to
-       debug stream
-       (rudel-debug-write): new function; write information to debug
-       stream for a specific object
-       (rudel-debug-old-state):
-       (rudel-state-machine::rudel-switch :before):
-       (rudel-state-machine::rudel-switch :after): new variable/methods;
-       state machine debugging
-       (rudel-assembling-transport-filter::rudel-set-assembly-function 
:before):
-       (rudel-assembling-transport-filter::rudel-set-filter):
-       (rudel-assembling-transport-filter::rudel-send :before): new
-       methods; debugging for `rudel-assembling-transport-filter'
-       (rudel-parsing-transport-filter::rudel-set-parse-function :before):
-       (rudel-parsing-transport-filter::rudel-set-generate-function :before):
-       (rudel-parsing-transport-filter::rudel-set-filter):
-       (rudel-parsing-transport-filter::rudel-send :before): new methods;
-       debugging for `rudel-parsing-transport-filter'
-       (rudel-socket-transport::rudel-set-filter):
-       (rudel-socket-transport::rudel-send :before): new methods;
-       debugging for `rudel-socket-transport'
-       * xmpp/rudel-xmpp-debug.el (header): fixed keywords; added 0.2 to
-       history section
-       (require rudel-xmpp-state): now required, since we install methods
-       (rudel-xmpp-debug-old-state):
-       (rudel-xmpp-transport::rudel-send :before):
-       (rudel-xmpp-transport::rudel-accept :before):
-       (rudel-xmpp-transport::rudel-switch :before):
-       (rudel-xmpp-transport::rudel-switch :after): removed; handled by
-       generic stuff in rudel-debug.el now
-       (rudel-xmpp-state::rudel-debug-target): new method; debug target
-       for XMPP states
-       (rudel-xmpp-state-sasl-mechanism-step::rudel-send):
-       (rudel-xmpp-state-sasl-mechanism-step::rudel-send :after):
-       (rudel-xmpp-state-sasl-mechanism-step::rudel-accept :before):
-       rewritten for new debugging framework
-       * obby/rudel-obby-debug.el (header): updated copyright; added 0.2
-       to history section
-       (require eieio):
-       (require rudel-obby-util): removed; no longer needed
-       (require rudel-obby-server): now required, since we install
-       methods on server classes
-       (rudel-obby-debug-old-state):
-       (rudel-obby-connection::rudel-send :before):
-       (rudel-obby-connection::rudel-accept :before):
-       (rudel-obby-connection::rudel-switch :before):
-       (rudel-obby-connection::rudel-switch :after): removed; handled by
-       generic stuff in rudel-debug.el now
-       (rudel-obby-connection::rudel-debug-target): new method; debug
-       target for `rudel-obby-connection'
-       (rudel-obby-client::rudel-debug-target): new method; debug target
-       for `rudel-obby-client'
-       * TODO (Milestone 0.3): integrate new debugging framework is DONE
-
-       Updated TODO
-       * TODO (Future):
-       (Milestone 0.4): minor adjustments
-       (Milestone 0.3): new task, integrate new debugging framework; new
-       task, add XMPP transport backend; minor adjustments
-
-       Better error and response data handling in xmpp/rudel-xmpp-sasl.el
-       * xmpp/rudel-xmpp-sasl.el
-       (rudel-xmpp-state-sasl-mechanism-start::rudel-enter): send
-       "initial response" in auth element, if the mechanism wants that
-       (rudel-xmpp-state-sasl-mechanism-step::rudel-accept): handle
-       invalid-authzid; use `xml-node-name' instead of `xml-tag-name'
-
-       Fix use of XML library in rudel-xmpp-state::rudel-accept
-       * xmpp/rudel-xmpp-state.el (rudel-xmpp-state::rudel-accept): use
-       `xml-node-name' instead of `xml-tag-name'; tag name is
-       'stream:error, not "stream:error"
-
-2010-01-26  Jan Moringen <address@hidden>
-
-       Switch stream to string mode in rudel-xmpp-state-we-finalize
-       * xmpp/rudel-xmpp.el
-       (rudel-xmpp-state-negotiate-stream::rudel-accept): fixed a comment
-       (rudel-xmpp-state-we-finalize::rudel-enter): set generate function
-       to identity before trying to send a string
-
-       Repair filter in rudel-start-tls-transport::initialize-instance
-       * tls/rudel-tls.el
-       (rudel-start-tls-transport::initialize-instance): reinstall
-       `rudel-tls-wait-init' which get overwritten by the superclass
-
-       Prevent byte-compilation of xmpp/rudel-xmpp-debug.el
-       * xmpp/rudel-xmpp-debug.el (local variables): prevent byte-compilation
-
-2010-01-24  Jan Moringen  <address@hidden>
-
-       Fixed require for rudel-socket in xmpp/rudel-xmpp.el
-       * xmpp/rudel-xmpp.el (require rudel-socket): changed rudel-tcp ->
-       rudel-socket
-
-       Removed require base64 from xmpp/rudel-xmpp-tunnel.el
-       * xmpp/rudel-xmpp-tunnel.el (require base64): removed; fantasy
-       library does not exist
-
-2010-01-23  Jan Moringen <address@hidden>
-
-       Add SASL XMPP states when rudel-xmpp gets loaded
-       * xmpp/rudel-xmpp-sasl.el (state registration): add SASL states to
-       state list after loading of rudel-xmpp
-
-       Minor improvement in xmpp/rudel-xmpp.el
-       * xmpp/rudel-xmpp.el (rudel-xmpp-backend::rudel-make-connection):
-       better object name for transport object
-       (rudel-xmpp-state-established): added documentation string
-       (rudel-xmpp-state-established::rudel-accept): use filter slot of
-       the transport object
-
-       Removed require base64 from xmpp/rudel-xmpp-debug.el
-       * xmpp/rudel-xmpp-debug.el (require base64): removed; fantasy
-       library does not exist
-
-       Updated header of xmpp/rudel-xmpp-debug.el
-       * xmpp/rudel-xmpp-debug.el (header): added xmpp keyword; fixed
-       commentary
-
-       Added connect capability to XMPP backend
-       * xmpp/rudel-xmpp.el (rudel-xmpp-backend::capabilities): added
-       capability connect
-
-2010-01-22  Jan Moringen <address@hidden>
-
-       Analyze XMPP failures in rudel-xmpp-state-sasl-mechanism-step
-       * xmpp/rudel-xmpp-sasl.el (require base64):removed; nonsense
-       (rudel-xmpp-state-sasl-mechanism-step::rudel-accept): analyze
-       failure responses more thoroughly
-
-       Improved rudel-xmpp-backend::rudel-make-connection
-       * xmpp/rudel-xmpp.el (rudel-xmpp-backend::rudel-make-connection):
-       call info-callback when info elements are missing; improved
-       documentation string; added comments
-
-       XMPP backend improvements
-       * xmpp/rudel-xmpp.el (header): added commentary section
-        (require rudel-state-machine): required for the state classes
-        (require rudel-tcp): required since the TCP transport underlies
-       the XMPP transport
-        (rudel-xmpp-transport-version): bumped to 0.2
-        (rudel-xmpp-backend): added documentation string
-        (rudel-xmpp-backend::initialize-instance): removed &rest from
-       slots; added documentation string
-        (rudel-xmpp-backend::rudel-make-connection): improved
-       documentation string; cosmetic changes
-        (rudel-xmpp-state-new::rudel-enter): pass jid and server name to
-       successor state; added documentation string
-        (rudel-xmpp-state-negotiate-stream::success-state): changed type
-       to include list
-        (rudel-xmpp-state-negotiate-stream::rudel-enter): some cleanup
-        (rudel-xmpp-state-negotiate-stream::rudel-leave): added
-       documentation string; improved comment
-        (rudel-xmpp-state-negotiate-stream::rudel-accept): handle symbol
-       and list successor state specification
-        (rudel-xmpp-state-authenticated::rudel-enter): pass server- and
-       username to successor state; hack
-        (rudel-xmpp-state-authentication-failed::rudel-enter): new method;
-       switch to we-finalize
-        (rudel-xmpp-states): added documentation string
-        (rudel-xmpp-transport::initialize-instance): some cleanup
-        (rudel-xmpp-transport::rudel-register-state): call next method in
-       a safe manner
-        (rudel-xmpp-transport::rudel-close): switch to closing state;
-       added documentation string
-        (rudel-xmpp-transport::rudel-disconnect): removed; obsolete
-
-       Removed function rudel-xmpp-state::rudel-set-assembly-function
-       * xmpp/rudel-xmpp-state.el
-       (rudel-xmpp-state::rudel-set-assembly-function): obsolete; removed
-
-       Improved XMPP SASL implementation
-       * xmpp/rudel-xmpp-sasl.el
-        (rudel-xmpp-state-sasl-start::rudel-enter): accept additional
-       arguments and pass them to sasl-try-one successor
-        (rudel-xmpp-state-sasl-try-one::rudel-enter): accept additional
-       arguments name and server and pass them to sasl-try-one when
-       self-transitioning
-        (rudel-xmpp-state-sasl-mechanism-start::rudel-enter): accept
-       additional arguments name and server and use them when calling
-       `sasl-make-client'; also pass them to sasl-mechanism-step
-        (rudel-xmpp-state-sasl-mechanism-step::name): new slot; stores
-       username
-        (rudel-xmpp-state-sasl-mechanism-step::server): new slot; stores
-       server name
-        (rudel-xmpp-state-sasl-mechanism-step::schema): added
-       documentation string
-        (rudel-xmpp-state-sasl-mechanism-step::client): added
-       documentation string
-        (rudel-xmpp-state-sasl-mechanism-step::step): added documentation
-       string
-        (rudel-xmpp-state-sasl-mechanism-step::rest): added documentation
-       string
-        (this rudel-xmpp-state-sasl-mechanism-step::rudel-enter): accept
-       arguments name and server and store them
-        (rudel-xmpp-state-sasl-mechanism-step::rudel-accept): pass name
-       and server to sasl-try-one and to sasl-mechanism-step when
-       self-transitioning
-
-2010-01-21  Jan Moringen <address@hidden>
-
-       Support specifying a host and JID in the XMPP transport
-       * xmpp/rudel-xmpp.el (rudel-xmpp-backend::rudel-ask-connect-info):
-       ask for JID and return it
-       (rudel-xmpp-backend::rudel-make-connection): extract jid property;
-       pass host, jid and start state to transport constructor
-       (rudel-xmpp-state-new::rudel-enter): accept arguments to and jid;
-       pass to negotiate-stream state
-       (rudel-xmpp-state-negotiate-stream::rudel-enter): accept to and
-       jid arguments; use to and jid when constructing opening stream
-       tag; added documentation string; cleanup
-       (rudel-xmpp-state-negotiate-stream::rudel-accept): added comment
-       (rudel-xmpp-state-authenticated::rudel-enter): added comment
-       (rudel-xmpp-transport::initialize-instance): removed &rest from
-       slots argument
-
-       Fixed license of xmpp/rudel-xmpp.el
-       * xmpp/rudel-xmpp.el (header): fixed license
-
-       Added notes file to xmpp documentation
-       * xmpp/doc/notes.org: new file; notes concerning the XMPP backend
-
-       Minor cleanup in xmpp/rudel-xmpp-sasl.el
-       * xmpp/rudel-xmpp-sasl.el
-       (rudel-xmpp-state-sasl-mechanism-step::rudel-accept): minor
-       cleanup
-
-       Added RFC 3921 to xmpp documentation
-       * xmpp/doc/rfc3921: new file; XMPP messaging and presence RFC
-
-       Fixed error in rudel-xmpp-state-sasl-start::rudel-enter
-       * xmpp/rudel-xmpp-sasl.el
-       (rudel-xmpp-state-sasl-start::rudel-enter): use `let*' instead of
-       `let'
-        (rudel-xmpp-sasl-states): added documentation string
-
-       New class rudel-xmpp-state-tls-start
-       * xmpp/rudel-xmpp-tls.el (header): added commentary
-       (require rudel-tls): removed; require it when needed
-       (rudel-xmpp-state-tls-start): new class; state used to enable TLS
-       encryption for a connection
-       (rudel-xmpp-state-tls-start::rudel-enter): new method; enable TLS
-       encryption for the associated connection and switch to
-       authenticated state
-       (add-to-list rudel-xmpp-states): fixed typo
-
-2010-01-20  Jan Moringen <address@hidden>
-
-       Handle invalid color on the obby protocol level
-       * obby/rudel-obby.el (rudel-connect): check for
-       `rudel-obby-invalid-color' and reset the color value in that case
-       * obby/rudel-obby-server.el (header): updated copyright
-       (rudel-check-username-and-color): send value of
-       `rudel-obby-error-color' when the color is invalid
-       * obby/rudel-obby-errors.el (header): updated copyright
-       (rudel-obby-invalid-color): new condition symbol; used to
-       indicated an invalid color
-       (rudel-obby-error-color-invalid): new constant; proposed obby
-       protocol error code for invalid color
-       * obby/rudel-obby-client.el (rudel-obby/net6_login_failed): check
-       for reason rudel-obby-error-color-invalid and return appropriate
-       error
-
-       Fixed error symbol rudel-obby-username-invalid in obby client
-       * obby/rudel-obby.el (header): updated copyright
-       (rudel-obby-backend::rudel-connect): fixed error symbol
-       rudel-obby-username-invalid -> rudel-obby-invalid-username
-       * obby/rudel-obby-client.el (header): updated copyright
-       (rudel-obby-client-state-joining::rudel-obby/net6_login_failed):
-       fixed error symbol rudel-obby-username-invalid ->
-       rudel-obby-invalid-username
-
-2010-01-17  Jan Moringen  <address@hidden>
-
-       Fixed a typo in documentation string of rudel-make-connection
-       * rudel-transport.el
-       (rudel-transport-backend::rudel-make-connection): fixed a typo in
-       the documentation string
-
-       Fixed problems in rudel-after-major-mode-change
-       * rudel.el (rudel-after-major-mode-change): when repairing
-       document <-> buffer relations, ignore deleted buffers; reset
-       `rudel-mode-changed-buffers' after all buffers have been processed
-
-       Fixed typo in rudel-collecting-transport-filter::delay
-       * rudel-transport-util.el
-       (rudel-collecting-transport-filter::delay): fixed typo in
-       :initform
-
-2010-01-16  Jan Moringen  <address@hidden>
-
-       New collecting transport filter
-       * rudel-transport-util.el (header): mention collecting transport
-       filter in commentary and history section
-       (rudel-collecting-transport-filter): new class; queue data until a
-       certain amount is available for transmission
-
-2010-01-14  Jan Moringen  <address@hidden>
-
-       Fixed call to object-run-hook... in rudel-detach-from-buffer
-       * rudel.el (rudel-document::rudel-detach-from-buffer): pass the
-       saved buffer to `object-run-hook-with-args' properly
-
-       Let transport ask for connect info in rudel-join-session
-       * rudel.el (rudel-join-session): use `rudel-ask-connect-info' as
-       info-callback when calling `rudel-make-connection'
-
-       Improved robustness of rudel-session-initiation-discover
-       * rudel-session-initiation.el (rudel-session-initiation-discover):
-       try to find specified backend in primary and fallback backend
-       lists
-
-       Let transport ask for connect info in rudel-ask-protocol-backend
-       * rudel-session-initiation.el
-       (rudel-ask-protocol-backend::rudel-discover): call
-       `rudel-ask-connect-info' of the transport backend in addition to
-       the protocol backend
-
-       Added rudel-ask-connect-info for transport backends
-       * rudel-transport.el (rudel-ask-connect-info): new generic
-       function; obtain required information for making a connection
-       * socket/rudel-socket.el
-       (rudel-tcp-backend::rudel-ask-connect-info):
-       * tls/rudel-tls.el (rudel-start-tls-backend::rudel-ask-connect-info):
-       * xmpp/rudel-xmpp.el (rudel-xmpp-backend::rudel-ask-connect-info):
-       new method; ask for hostname and port
-
-2010-01-10  Jan Moringen  <address@hidden>
-
-       Added writer for rudel-set-dispatcher in socket/rudel-socket.el
-       * socket/rudel-socket.el (header): updated copyright
-       (rudel-socket-listener::dispatch): added writer
-       `rudel-set-dispatcher'
-       (rudel-socket-listener::rudel-set-dispatcher): removed; replaced
-       by automatic writer
-
-       Fix rudel-progress-reporting-transport-filter
-       * rudel-transport-util.el (header): updated copyright; updated
-       commentary section
-       (rudel-progress-reporting-transport-filter::initialize-instance):
-       install a handler in the underlying transport
-
-       Added autoload cookie to rudel-xmpp-backend
-       * xmpp/rudel-xmpp.el (rudel-xmpp-backend): added autoload cookie
-
-       Minor fixes in rudel-session-initiation.el
-       * rudel-session-initiation.el (header): updated copyright
-       (rudel-session-initiation-discover): fixed documentation string
-       (rudel-ask-protocol-backend::initialize-instance):
-       (rudel-configured-sessions-backend::initialize-instance): removed
-       &rest from slots argument
-
-       Added sanity check to rudel-{join, host}-session
-       * rudel-errors.el (rudel-incomplete-info): new error symbol
-       * rudel.el (rudel-join-session): added sanity checks for info
-       argument
-       (rudel-host-session): added sanity checks for info argument
-
-2010-01-06  Jan Moringen  <address@hidden>
-
-       Added state list to xmpp/rudel-xmpp-tls.el
-       * xmpp/rudel-xmpp-tls.el (rudel-xmpp-tls-states): new variable;
-       list of TLS-related states
-       (rudel-xmpp-states): use `add-to-list' to add the states
-
-       Renamed rudel-connect -> rudel-make-connection in xmpp/rudel-xmpp.el
-       * xmpp/rudel-xmpp.el (rudel-xmpp-backend::rudel-make-connection):
-       renamed `rudel-connect' -> `rudel-make-connection'
-       (rudel-xmpp-state-new): added documentation string
-       (rudel-xmpp-state-negotiate-stream): added documentation string
-       (rudel-xmpp-state-negotiate-stream::success-state): added
-       documentation string
-       (rudel-xmpp-state-negotiate-stream::rudel-enter): fixed stream
-
-       Cosmetic changes in xmpp/rudel-xmpp-sasl.el
-       * xmpp/rudel-xmpp-sasl.el
-        (rudel-xmpp-state-sasl-start::rudel-enter): added documentation
-       string; cosmetic changes
-        (rudel-xmpp-state-sasl-try-one::rudel-enter): added documentation
-       string
-        (rudel-xmpp-state-sasl-mechanism-step::rudel-enter): added
-       documentation string
-        (rudel-xmpp-state-sasl-mechanism-step::rudel-accept): added
-       documentation string; added some comments
-        (rudel-xmpp-sasl-states): new variable; list of states used by the
-       SASL implementation; states are added to `rudel-xmpp-states'
-
-       Added line breaks in long comment in rudel-xmpp-util.el
-       * xmpp/rudel-xmpp-util.el (rudel-xmpp-assemble-stream): added line
-       breaks in long comment
-
-2010-01-05  Jan Moringen  <address@hidden>
-
-       Added task for comment functionality
-       * TODO (Future): added task for comment functionality
-
-       Removed last traces of progress reporters
-       * rudel-state-machine.el (header): updated copyright
-       (require rudel-compat): removed; no longer required
-       (rudel-state-wait): mention callback instead of progress reporter
-       in comment
-
-       Do not detach documents that have no buffer
-       * rudel.el (header): updated copyright
-       (rudel-session::rudel-remove-document): use
-       `rudel-maybe-detach-from-buffer' instead of an explicit check
-       (rudel-client-session::rudel-end): use
-       `rudel-maybe-detach-from-buffer' instead of blindly detaching all
-       documents
-       (rudel-document::rudel-detach-from-buffer): do not check whether
-       buffer is non-nil; it is now an error to call this method when
-       buffer is nil
-       (rudel-document::rudel-maybe-detach-from-buffer): new method; call
-       `rudel-detach-from-buffer' is the document is attached
-
-2010-01-04  Jan Moringen  <address@hidden>
-
-       Added XMPP backend
-       * Project.ede (target autoloads): added directory xmpp
-       * xmpp/Project.ede: new file; project file for xmpp subproject
-       * xmpp/rudel-xmpp-debug.el: new file; XMPP debugging functions
-       * xmpp/rudel-xmpp-sasl.el: new file; SALS authentication
-       mechanisms
-       * xmpp/rudel-xmpp-state.el: new file; base class for XMPP state
-       machine states
-       * xmpp/rudel-xmpp-tls.el: new file; TLS encryption for XMPP
-       transport
-       * xmpp/rudel-xmpp-tunnel.el: new file; XMPP tunnel transport
-       backend
-       * xmpp/rudel-xmpp-util.el: new file; XMPP utility functions
-       * xmpp/rudel-xmpp.el: new file; XMPP transport backend
-       * xmpp/doc/rfc3920: new file; XMPP RFC
-       * xmpp/doc/xmpp-states.cogre: new file; state transition diagram
-       * xmpp/doc/xmpp-states.png: new file; state transition diagram;
-       image
-
-       Added `rudel-xml-assemble-tags'
-       * rudel-xml.el (rudel-xml-assemble-tags): assemble complete XML
-       tags from strings
-
-       Added pretty-print argument to `xml->string'
-       * rudel-xml.el (xml->string): added optional argument pretty-print
-
-2010-01-01  Jan Moringen  <address@hidden>
-
-       Include XMPP backend in compilation and autoload generation
-       * rudel-compile.el (top level autoload):
-       (top level): added xmpp directory
-
-       Some cleanup in rudel-xml.el
-       * rudel-xml.el (header): started commentary section
-       (do-tag-children): use `nth' instead of `car' and `cadr'
-       (rudel-xml-toplevel-tag-positions):
-       (rudel-xml-toplevel-tags): added documentation string
-
-       Added rudel-xml.el
-       * Project.ede (target compile): added rudel-xml.el
-       * rudel-xml.el: new file; XML functions for Rudel
-
-2009-12-31  Jan Moringen  <address@hidden>
-
-       Load file name determination
-       * rudel-compile.el (top level autoload):
-       (top level): changed load file name determination
-
-       * TODO (Milestone 0.3): connection reset problem fixed
-
-       Autoload load path manipulation
-       * rudel-compile.el (top level): added autoloaded form that adds
-       Rudel directories to `load-path'
-
-2009-12-30  Jan Moringen  <address@hidden>
-
-       Removed unused functions
-       * rudel-util.el (rudel-process-object):
-       (rudel-set-process-object): removed; this is handled by
-       `process-get' and `process-put'
-
-       Use `process-put' and `process-get' instead
-       `rudel-set-process-object' and `rudel-process-object'
-       * tls/rudel-tls.el (rudel-tls-make-process):
-       (rudel-tls-start-tls):
-       (rudel-tls-wait-init):
-       (rudel-tls-wait-handshake):
-       (rudel-tls-established): use `process-put' and `process-get'
-       instead `rudel-set-process-object' and `rudel-process-object'
-
-       Better handling of session termination and connection aborts
-       * obby/rudel-obby.el (rudel-obby-backend::rudel-connect): new
-       error states we-finalized and disconnect; signal proper errors for
-       error states they-finalized and we-finalized
-       * obby/rudel-obby-server.el
-       (rudel-obby-client::initialize-instance): install a sentinel that
-       closes the connection
-       * obby/rudel-obby-client.el
-       (rudel-obby-client-state-we-finalized): used to indicate that we
-       closed the connection
-       (rudel-obby-client-state-they-finalized::reason): new slot; stores
-       for finalization
-       (rudel-obby-client-state-they-finalized::rudel-enter): new method;
-       store reason and cleanup connection
-       (rudel-obby-client-state-disconnected): new class; used to
-       indicated that the connection is closed
-       (rudel-obby-client-connection-states): added `we-finalized' and
-       `disconnected'
-       (rudel-obby-connection::initialize-instance): install a sentinel
-       that closes the connection
-       (rudel-obby-connection::rudel-disconnect): switch to `we-finalize'
-       and wait for `disconnected'; added documentation string
-       (rudel-obby-connection::rudel-close): added documentation string
-       (rudel-obby-connection::rudel-subscribe-to): handle new error
-       states
-
-       * rudel-debug.el (require rudel-state-machine): required since
-       state machine methods are instrumented
-
-       * socket/rudel-socket.el
-       (rudel-socket-transport::initialize-instance): in sentinel,
-       include finished in the list of "close indicators"
-
-2009-12-29  Jan Moringen  <address@hidden>
-
-       * rudel-transport-util.el
-       (rudel-assembling-transport-filter::initialize-instance):
-       (rudel-parsing-transport-filter::initialize-instance):
-       (rudel-buffering-transport-filter::initialize-instance): forward
-       sentinel events to user-provided handler
-
-       * TODO (Future): added backend factory hooks
-       (Milestone 0.3): added read-only buffer problem and srecode field
-       edit problem
-
-       * rudel-compile.el (local variables): prevent byte-compilation
-
-       * socket/rudel-socket.el (rudel-socket-transport::filter): new
-       slot; store original filter function
-       (rudel-socket-transport::sentinel): new slot; store original
-       sentinel function
-       (rudel-socket-transport::initialize-instance): new method; install
-       dispatch functions for filter and sentinel
-       (rudel-socket-transport::rudel-filter):
-       (rudel-socket-transport::rudel-set-filter):
-       (rudel-socket-transport::rudel-sentinel):
-       (rudel-socket-transport::rudel-set-sentinel): removed; we can use
-       automatic readers and writers now
-
-       * tls/rudel-tls.el (rudel-start-tls-backend): added capability
-       encrypt
-
-       * tls/rudel-tls.el (rudel-tls-make-process): stop the process
-       object after creation
-
-2009-12-28  Jan Moringen  <address@hidden>
-
-       * rudel-icons.el (rudel-icons-directory): compute icons directory
-       name based on load file name of rudel-icons.el
-
-2009-12-26  Jan Moringen  <address@hidden>
-
-       * TODO (Milestone 0.4): new task integrate unit tests
-
-2009-12-24  Jan Moringen  <address@hidden>
-
-       * rudel.el (rudel-document::rudel-insert):
-       (rudel-document::rudel-delete): use `with-current-buffer' and
-       `save-excursion' instead of `save-excursion' and `set-buffer'
-       * rudel-backend.el (rudel-backend-dump): removed pointless use of
-       `save-excursion'
-
-2009-12-21  Jan Moringen  <address@hidden>
-
-       * rudel-speedbar.el (header): fixed history
-       (rudel-speedbar-key-map): updated documentation string
-       (rudel-speedbar-menu): renamed Compile -> Subscribed; dummy entry
-       for now
-       (rudel-find-nearest-file-line):
-       (rudel-session::eieio-speedbar-derive-line-path):
-       (rudel-session::eieio-speedbar-description):
-       (rudel-project::eieio-speedbar-object-buttonname):
-       (rudel-project::eieio-speedbar-object-children):
-       (rudel-file-find):
-       (rudel-create-tag-buttons):
-       (rudel-tag-expand):
-       (rudel-tag-find): removed; obsolete
-
-       * rudel-session-initiation.el
-       (rudel-ask-protocol-backend::rudel-discover): pass partial info
-       list to `rudel-ask-connect-info' instead of append the lists
-       manually
-
-       * obby/rudel-obby.el (rudel-obby-user::rudel-display-string):
-       removed; now in obby/rudel-obby-display.el
-
-       * rudel-mode.el (require rudel-display): required for
-       `rudel-display-string'
-       * rudel-display.el (require rudel): required to ensure
-       `rudel-user' and `rudel-document' are defined
-       * obby/rudel-obby.el (require rudel-obby-display): make sure
-       `rudel-display-string' is defined for obby classes
-       * obby/rudel-obby-display.el (require rudel-obby): required to
-       ensure `rudel-obby-user' is defined
-
-2009-12-20  Jan Moringen  <address@hidden>
-
-       * obby/rudel-obby-state.el (header): fixed history
-       (rudel-obby-document-handler::rudel-obby/obby_document): go
-       through the connection object for now
-       * obby/rudel-obby-client.el
-       (rudel-obby-client-state-idle::document-container-slot):
-       (rudel-obby-client-state-subscribing::document-container-slot):
-       (rudel-obby-client-state-document-synching::document-container-slot):
-       set initial value to 'session
-
-       * rudel.el (rudel-user::rudel-display-string): moved to
-       rudel-display.el
-       * rudel-display.el: new file; functions that create text
-       representations of Rudel objects
-       * obby/rudel-obby-display.el: new file; functions that create text
-       representations of obby objects
-       * obby/Project.ede (target obby): added rudel-display.el
-       * Project.ede (target rudel): added rudel-display.el
-
-       * TODO (Future): removed duplicate task SubEthaEdit client
-       functionality
-       (Milestone 0.3): use transports is done
-
-       * obby/rudel-obby-server.el
-       (rudel-obby-server-state-idle::rudel-obby/obby_document):
-       (rudel-obby-server-state-idle::rudel-obby/obby_document/record):
-       use `rudel-dispatch' instead of `rudel-obby-dispatch'
-
-       * INSTALL (INSTALLING): link to REQUIREMENTS
-       (COMPILING): link to rudel-compile.el
-
-       * doc/notes-for-developers.org: new file; some notes which may be
-       relevant for Rudel developers
-
-       * rudel-debug.el (local variables): prevent byte-compilation
-       * obby/rudel-obby-debug.el (header): downcased keywords
-       (local variables): prevent byte-compilation
-
-       * rudel.el (rudel-user::rudel-change-notify): new method; run
-       change hook
-       * obby/rudel-obby-server.el
-       (rudel-obby-server-state-idle::rudel-obby/obby_user_colour): call
-       `rudel-change-notify' instead of `object-run-hook-with-args' after
-       modifying the user object
-       * obby/rudel-obby-client.el
-       (rudel-obby-client-state-idle::rudel-rudel-obby/net6_client_join):
-       call `rudel-change-notify' after modifying the user object
-
-2009-12-19  Jan Moringen  <address@hidden>
-
-       * obby/rudel-obby.el (rudel-ask-connect-info): when extracting
-       properties from info list, there is no need to ensure info being
-       non-nil
-
-       * rudel.el (rudel-host-session): pass partial info list to
-       `rudel-ask-host-info'; cleanup; extended documentation string
-       * obby/rudel-obby.el (rudel-obby-backend::rudel-ask-host-info):
-       try extract address and port from info list before prompting
-
-       * TODO (Future): added display of error message property,
-       synchronization of objects; moved BEEP transport to 0.4
-       (Milestone 0.3): added TLS does not start in stopped state,
-       zeroconf delay, connection reset problem, use transports
-
-       * rudel-util.el (rudel-impersonator::slot-missing): fixed slot
-       name `impersonating-target-slot' -> `impersonation-target-slot'
-
-       * rudel-compile.el (require bytecomp): make sure we can redefine
-       `byte-compile-cl-warn'
-       (top level): redefine `byte-compile-cl-warn' to silence
-       byte-compiler
-
-       * rudel-backend.el (rudel-backend-choose): mention which kind of
-       backend we are asking for
-
-2009-12-17  Jan Moringen  <address@hidden>
-
-       * rudel.el (rudel-host-session): use cdrs of backend cells
-
-       * rudel.el (rudel-host-session): added mandatory argument info;
-       interactive specification uses `rudel-backend-choose' and
-       `rudel-ask-host-info' to assemble a suitable value for info
-
-2009-12-06  Jan Moringen  <address@hidden>
-
-       * obby/rudel-obby-errors.el (require rudel-errors): not really
-       required, but logical
-       (rudel-obby-invalid-username):
-       (rudel-obby-username-in-use):
-       (rudel-obby-color-in-use): new error symbols
-
-       * obby/rudel-obby-util.el (header): updated keywords; extended
-       commentary section; cosmetic changes to history section
-       (rudel-obby-dispatch): removed; obsolete
-       * obby/rudel-obby-state.el (header): updated keywords
-       (rudel-obby-document-handler): make abstract
-       (rudel-obby-document-handler::document-container-slot): new slot;
-       name of slot which holds the object with the document list
-       (rudel-obby-document-handler::rudel-obby/obby_document): find
-       document list in the named slot
-
-       * socket/rudel-socket.el (require cl): added `eval-when-compile'
-       to the require
-
-       * rudel-util.el (rudel-delegator): removed base class
-       `rudel-state'; should not have been there
-
-       * rudel-util.el (header): expanded commentary section; bumped
-       version to 0.2
-       (rudel-impersonator): new class; allows derived classes to
-       transparently access slots of a target object
-       (rudel-delegator): new class; allows derived classes to let
-       methods of a target object appear as their own
-
-2009-12-05  Jan Moringen  <address@hidden>
-
-       * obby/rudel-obby-server.el
-       (rudel-obby-client::initialize-instance): removed &rest from slots
-       argument; updated documentation string
-       (rudel-obby-client::rudel-broadcast): renamed argument arguments
-       -> args; updated documentation string
-       (rudel-obby-server::initialize-instance): removed &rest from slots
-       argument; added documentation string
-
-2009-12-04  Jan Moringen  <address@hidden>
-
-       * socket/rudel-socket.el (rudel-socket-listener): new class;
-       implements `rudel-listener'
-       (rudel-tcp-backend::rudel-wait-for-connections): removed argument
-       dispatch-callback; added argument info-callback; ensure info
-       contains required properties; create a listener socket and pass it
-       to a new listener object
-       * rudel.el (rudel-host-session): added argument info; generate
-       empty info list in interactive form; create a listener object and
-       pass it to the protocol backend
-       * rudel-transport.el (rudel-listener): new abstract class; generic
-       functionality for accepting incoming connections
-       (rudel-transport-backend::rudel-wait-for-connections): removed
-       argument dispatch-callback; added argument info-callback; updated
-       documentation string
-       * rudel-protocol.el
-       (rudel-protocol-backend::rudel-ask-connect-info): added optional
-       argument info; updated documentation string
-       (rudel-protocol-backend::rudel-ask-host-info): added optional
-       argument info; updated documentation string
-       * obby/rudel-obby.el (rudel-obby-backend::rudel-ask-host-info):
-       added optional argument info
-       (rudel-obby-backend::rudel-host): renamed argument
-       `transport-backend' -> `listener'; do not install dispatch
-       function; the server does this itself
-       * obby/rudel-obby-server.el (require rudel-obby): required to
-       silence the byte-compiler
-       (rudel-obby-server::listener): new slot; stores listener object of
-       the server
-       (rudel-obby-server::initialize-instance): install
-       `rudel-add-client' into the listener as dispatch function
-
-2009-12-03  Jan Moringen  <address@hidden>
-
-       * rudel.el (rudel-host-session): determine a transport and a
-       protocol backend; ask the protocol backend to create the session
-       * rudel-util.el (rudel-socket-owner):
-       (rudel-filter-dispatch):
-       (rudel-sentinel-dispatch): removed; made obsolete by transports
-       * rudel-protocol.el (rudel-protocol-backend::rudel-host): added
-       backend argument, which is the transport backend; updated
-       documentation string
-       * rudel-debug.el (rudel-state-machine::rudel-state-change):
-       attached method to `rudel-state-machine' instead of
-       `rudel-socket-owner'
-       (rudel-debug-stream-name): determine the name from a transport
-       object instead of a socket
-       * obby/rudel-obby.el (require rudel-transport): required for
-       transports
-       (rudel-obby-backend::rudel-connect): use a transport object
-       instead of a socket
-       (rudel-obby-backend::rudel-ask-host-info): added :address property
-       (rudel-obby-backend::rudel-host): added transport-backend
-       argument; do not create a socket but call the
-       `rudel-wait-for-connections' method of the transport backend
-       (rudel-obby-send): removed; made obsolete by transports
-       (rudel-obby-generate-message): new function; used in parsing
-       transport filters to serialize obby messages
-       * obby/rudel-obby-util.el (require rudel-transport-util): new; for
-       `rudel-transport-make-filter-stack'
-       (rudel-obby-socket-owner): removed; made obsolete by transports
-       * obby/rudel-obby-server.el (header): bumped version to 0.3
-       (rudel-obby-client): removed base class `rudel-obby-socket-owner'
-       (rudel-obby-client::transport): new slot; stores transport object
-       (rudel-obby-client::initialize-instance): build a transport filter
-       stack and install `rudel-accept' as filter
-       (rudel-obby-client::rudel-message): removed; `rudel-accept' is
-       called by the transport
-       (rudel-obby-client::rudel-send): new; send data through transport
-       (rudel-obby-server): removed base class `rudel-socket-owner'
-       (rudel-obby-server::rudel-add-client): expect a transport object
-       instead of a socket
-       * obby/rudel-obby-debug.el (header): cosmetic changes
-       (require rudel-obby-client): new; required since all methods are
-       now attached to the `rudel-obby-connection' class
-       (rudel-obby-connection::rudel-send): now attached to the
-       `rudel-obby-connection' class
-       (rudel-obby-connection::rudel-accept): renamed `rudel-receive' ->
-       `rudel-accept'; now attached to the `rudel-obby-connection' class
-       (rudel-obby-socket-owner::rudel-message): removed; obsolete
-       (rudel-obby-connection::rudel-switch): now attached to the
-       `rudel-obby-connection' class
-       * obby/rudel-obby-client.el (header): bumped version to 0.3
-       
(rudel-obby-client-state-encryption-start::rudel-obby/net6_encryption_begin):
-       call transport method to enable encryption
-       (rudel-obby-connection): removed base class `rudel-socket-owner'
-       (rudel-obby-connection::transport): new slot; stores transport
-       object
-       (rudel-obby-connection::initialize-instance): build a transport
-       filter stack and install `rudel-accept' as filter
-       (rudel-obby-connection::rudel-send): new; send data through the
-       transport
-       (rudel-obby-connection::rudel-message): removed; obsolete
-
-       * socket/rudel-socket.el
-       (rudel-tcp-backend::rudel-wait-for-connections): when creating the
-       network process, set filter and sentinel to `ignore'
-
-       * tls/rudel-tls.el
-       (rudel-start-tls-backend::rudel-make-connection): create transport
-       object of class `rudel-start-tls-transport' not
-       `rudel-socket-transport'
-
-2009-12-02  Jan Moringen  <address@hidden>
-
-       * obby/rudel-obby.el (rudel-obby-default-port): new constant; used
-       as default when reading the port number
-       (rudel-obby-backend::rudel-ask-connect-info): use specialized read
-       functions; handle transport and protocol backend better
-
-       * rudel-session-initiation.el (header): bumped version to 0.2 in
-       history section
-       (rudel-configured-sessions): added :transport-backend and
-       :protocol-backend in type specification and documentation string
-       (rudel-ask-protocol-version): bumped version to 0.2
-       (rudel-ask-protocol-backend::rudel-discover): handle transport and
-       protocol backend
-       (rudel-configured-sessions-version): bumped version to 0.2
-       (rudel-session-initiation-adjust-info): handle :transport-backend
-       and :protocol-backend keywords
-
-       * rudel.el (rudel-join-session): use
-       `rudel-make-state-progress-callback' to construct callbacks for
-       connecting and joining operations
-       * rudel-interactive.el (rudel-make-state-progress-callback): new
-       function; return a callback suitable for `rudel-state-wait'
-
-       * rudel.el (rudel-join-session): do not call
-       `rudel-ask-connect-info' as this is done by the protocol backend
-       when needed
-       * rudel-protocol.el (generic rudel-connect): added arguments
-       info-callback and progress-callback; updated documentation string
-       * obby/rudel-obby.el (rudel-obby-backend::rudel-connect): added
-       arguments info-callback and progress-callback; removed progress
-       reporter, since callback is used instead; in case of recoverable
-       errors, do not signal but try again
-       * obby/rudel-obby-client.el
-       
(rudel-obby-client-state-encryption-start::rudel-obby/net6_encryption_begin):
-       
(rudel-obby-client-state-encryption-start::rudel-obby/net6_encryption_failed):
-       new successor state is waiting-for-join-info
-       (rudel-obby-client-state-waiting-for-join-info): new class; state
-       entered when waiting for join info
-       (rudel-obby-client-state-joining::rudel-enter): new argument info;
-       do not retrieve info from connection object
-       (rudel-obby-client-connection-states): added waiting-for-join-info
-
-2009-12-01  Jan Moringen  <address@hidden>
-
-       added initial support for the transport abstraction to affected
-       components
-       * obby/rudel-obby-client (require rudel-tls): required for
-       STARTTLS encryption
-       * obby/rudel-obby.el (header): added version 0.3 to history
-       section
-       (rudel-obby-backend::rudel-ask-connect-info): return info list
-       containing entries for transport and protocol backend
-       (rudel-obby-backend::rudel-connect): added transport argument; use
-       transport object instead of creating a socket
-       (zeroconf service registration): register transport and protocol
-       backend
-       * rudel-protocol.el (header): history section fix
-       (rudel-protocol-backend::rudel-ask-connect-info): renamed
-       `rudel-ask-join-info' -> `rudel-ask-connect-info'
-       (rudel-protocol-backend::rudel-connect): renamed `rudel-join ->
-       `rudel-connect; added argument transport; updated documentation
-       string
-       * rudel.el (header): added version 0.2 to history section
-       (rudel-join-session): obtain transport and protocol backends from
-       info; create a transport object; return created session object
-       * zeroconf/rudel-zeroconf.el (header): downcased keywords; updated
-       commentary section; added version 0.2 to history
-       (rudel-zeroconf-version): bumped to 0.2
-       (rudel-zeroconf-service-types): updated documentation string
-       (rudel-zeroconf-service-backend): removed
-       (rudel-zeroconf-transport-backend): new; accessor for transport
-       backend
-       (rudel-zeroconf-protocol-backend): new; accessor for protocol
-       backend
-       (rudel-zeroconf-register-service): accept a transport and a
-       protocol backend argument; update documentation string
-       (initialize-instance): remove &rest from argument slots
-       (rudel-advertise): handle transport and protocol backend
-       (rudel-zeroconf-services): updated to work with new service
-       representation
-       (rudel-zeroconf-services-present-p): updated to work with new
-       service representation
-       (rudel-zeroconf-publish): accept a transport and a protocol
-       backend argument
-       (rudel-zeroconf-service->plist): handle transport and protocol
-       backends
-
-2009-11-30  Jan Moringen  <address@hidden>
-
-       * rudel-compile.el (top-level): added tls directory to list of
-       directories with autoloads
-       * tls/rudel-tls.el (header): added 0.2 to version section
-        (require rudel-socket): required since base class of
-       `rudel-start-tls-transport'
-        (rudel-start-tls-transport): new class; socket transport with
-       START TLS ability
-        (rudel-start-tls-transport::rudel-enable-encryption): new method;
-       enable TLS encryption
-        (rudel-start-tls-backend): new class; START TLS transport backend
-        (rudel-start-tls-backend::initialize-instance): new method
-        (rudel-start-tls-backend::rudel-make-connection): new method;
-       create new START TLS transport object
-        (autoloading): added autoloaded registration of the backend
-
-       * rudel-util.el: (rudel-assemble-lines): new function assemble
-       complete lines from string fragments
-
-       * socket/rudel-socket.el (footer): changed provided feature
-       rudel-tcp -> rudel-socket; changed comment
-
-       * tls/rudel-tls.el (rudel-tls-wait-init): use
-       `rudel-assemble-fragments' instead of
-       `rudel-assemble-line-fragments'; use `rudel-loop-fragments'
-       instead of `rudel-loop-lines'
-        (rudel-tls-wait-handshake): use `rudel-assemble-fragments' instead
-       of `rudel-assemble-line-fragments'; use `rudel-loop-fragments'
-       instead of `rudel-loop-lines'
-        (rudel-tls-established): use `rudel-assemble-fragments' instead of
-       `rudel-assemble-line-fragments'; use `rudel-loop-fragments'
-       instead of `rudel-loop-lines'
-
-       * rudel-util.el (rudel-loop-fragments): new macro; call a form for
-       each fragment
-
-       * tls/rudel-tls.el: moved to tls directory
-       * tls/Project.ede (target tls): added rudel-tls.el
-       * Project.ede (target autoloads): added tls directory
-       (target compile): removed rudel-tls.el
-
-       * rudel-compat.el (progress-spinner-values):
-       (progress-reporter-spinner-p):
-       (progress-reporter-force-update):
-       (progress-reporter-update):
-       (progress-reporter-spin):
-       (make-progress-reporter): always define these functions since the
-       spinning progress reporter patch has not been accepted anyway
-
-       * rudel-state-machine.el (rudel-state-machine::initialize-instance):
-       use `rudel-state-machine-strip-initargs' to get rid of virtual
-       initargs
-       (rudel-state-machine-strip-initargs): new function; remove certain
-       initargs from a property list of initargs
-
-       * rudel-state-machine.el (rudel-state-machine::initialize-instance):
-       value of :start can now be a rudel-state-child, a symbol, or a list
-       starting with a symbol; improved documentation string documentation
-       string
-       (rudel-state-machine::object-print): pass strings argument to next
-       method
-
-       * rudel-state-machine.el (rudel-state-machine::initialize-instance):
-       new method; remove :start initarg
-       (rudel-state-machine::initialize-instance :after): allow :start
-       initarg to specify arguments to start state
-
-2009-11-29  Jan Moringen  <address@hidden>
-
-       * socket/rudel-socket.el
-       (rudel-tcp-backend::rudel-wait-for-connections): new method; wait
-       for incoming connections and dispatch to callback
-       (rudel-tcp-handle-connect): new function; helper function to wrap
-       incoming connection sockets in transport objects
-
-       * socket/rudel-socket.el (header): added version 0.2 to history
-       (rudel-tcp-version): renamed `rudel-socket-transport-version' ->
-       `rudel-tcp-version'; bumped to 0.2
-       (rudel-socket-transport::filter): removed; stored in process
-       object
-       (rudel-socket-transport::sentinel): removed; stored in process
-       object
-       (rudel-socket-transport::rudel-filter): new method; retrieve
-       filter from process
-       (rudel-socket-transport::rudel-set-filter): set filter of process
-       (rudel-socket-transport::rudel-sentinel): new method; retrieve
-       sentinel from process
-       (rudel-tcp-transport::rudel-set-sentinel): set sentinel of process
-       (rudel-tcp-transport::rudel-receive): removed; now handled
-       directly
-       (rudel-tcp-backend::initialize-instance): use `rudel-tcp-version'
-       (rudel-tcp-backend::rudel-make-connection): pass constructed
-       socket to a `rudel-socket-transport'; do not install filter or
-       sentinel
-
-       * socket/rudel-socket.el (rudel-tcp-backend::initialize-instance):
-       added documentation string
-
-       * socket/rudel-socket.el (rudel-make-connection): made object name
-       of transport object more unique
-
-       * socket/rudel-socket.el (require cl): required for `every'
-       (rudel-tcp-backend::rudel-make-connection): added arguments
-       info-callback and progress-callback; call info-callback when info
-       elements are missing
-
-       * socket/rudel-socket.el: new file; socket transport backend for
-       Rudel; currently provides TCP-based transport
-       * socket/Project.ede: new file; project file for socket transport
-       backend
-       * rudel-compile.el (top-level): add socket directory to
-       `load-path' when compiling
-       * Project.ede (target autoloads): added directory socket
-
-       * rudel-debug.el (require eieio): silence byte-compiler
-       (rudel-debug-received-processed-data-face): removed; will be
-       distinguished by other means
-       (rudel-debug-tag-faces): removed entry for received-processed face
-       (rudel-debug-stream-insert): whitespace cleanup
-       * obby/rudel-obby-debug.el
-       (rudel-obby-socket-owner::rudel-message :before): use tag
-       :received instead of :received-processed
-
-       * rudel-loaddefs.el: removed; this file is now generated by 
rudel-compile.el
-       * rudel-compile.el (header): extended commentary section; added
-       0.2 to history section
-       (top-level): added generation of autoloads in rudel-loaddefs.el
-
-       * obby/rudel-obby.el (rudel-display-string): fixed invalid format
-       specifier
-
-       * jupiter/jupiter-insert.el (header): history section
-       (require jupiter-nop): added; cross-operation dependency
-       * jupiter/jupiter-delete.el (header): history section
-       (require jupiter-nop):
-       (require jupiter-insert): added; cross-operation dependency
-
-       * rudel.el (rudel-document::rudel-remove-user): fixed invalid this
-       reference
-
-       * rudel-util.el (rudel-assemble-fragments): new macro; assemble
-       complete fragments from data and store partial fragments; used by
-       assembling transport filter
-
-       * rudel-transport-util.el (rudel-long-message-threshold):
-       (rudel-long-message-chunk-size): new constants; used by
-       `rudel-progress-reporting-transport-filter'
-       (rudel-progress-reporting-transport-filter::rudel-send): call
-       `rudel-send' correctly
-
-       * rudel-interactive.el (header): history-section
-       (require rudel-backend): required for `rudel-backend-cons-p' to
-       silence the byte-compiler
-
-       * rudel-compat.el: reordered top-level forms and added some
-       section headers
-       (header): history section
-
-       * rudel-backend.el (rudel-backend-factory): added autoload cookie
-
-2009-11-28  Jan Moringen  <address@hidden>
-
-       * rudel-transport-util.el (rudel-transport-filter::slot-missing):
-       added virtual slot :root-transport that recursively finds the
-       underlying transport
-
-       * rudel-transport.el (header): updated history section
-       (require rudel-errors): added a commit
-
-       * rudel-transport-util.el (require rudel-errors): required for
-       `rudel-error' condition
-       (rudel-invalid-state): new condition
-       (rudel-buffering-transport-filter): new class; a transport filter
-       that can queue incoming and outgoing data
-       (rudel-buffering-transport-filter::initialize-instance): new method;
-       initialize slots and install filter
-       (rudel-buffering-transport-filter::rudel-send): new method send or
-       queue data
-       (rudel-buffering-transport-filter::rudel-stop): new method; stop the
-       filter
-       (rudel-buffering-transport-filter::rudel-start): new method; start
-       the filter
-       (rudel-buffering-transport-filter::rudel-handle): new method; handle
-       incoming data
-
-       * rudel-transport-util.el
-       (rudel-assembling-transport-filter::fragment-function): new slot;
-       optional fragmentation function
-       (rudel-assembling-transport-filter::rudel-send): if there is a
-       fragmentation function, use it
-       (rudel-injecting-transport-filter): new class; inject data using
-       method calls instead of receiving it from an underlying transport
-       (rudel-injecting-transport-filter::rudel-inject): new method; inject
-       data into transport filter
-
-       * rudel-transport.el (rudel-wait-for-connections): renamed argument
-       dispatch -> dispatch-callback
-
-       * rudel-transport-util.el (header): cosmetic changes
-       (rudel-parsing-transport-filter::parse-function): added reader and
-       writer
-       (rudel-parsing-transport-filter::generate-function): added reader
-       and writer
-
-       * rudel-transport.el (rudel-transport-backend::rudel-make-connection):
-       added argument info-callback; renamed argument callback ->
-       progress-callback; improved and extended documentation string
-       (rudel-transport-backend::rudel-wait-for-connections): documentation
-       string wording
-
-       * rudel-transport.el (require rudel-errors): new require; for
-       condition names
-       (rudel-malformed-message): new error condition
-
-       * rudel-transport-util.el (rudel-transport-filter::filter): use reader
-       and writer instead of accessor; removed `rudel-set-filter' method
-       (rudel-transport-filter::sentinel): use reader and writer instead of
-       accessor; removed `rudel-set-sentinel method
-       (rudel-transport-filter::no-applicable-method): delegate method
-       calls to underlying transport
-       (rudel-assembling-transport-filter::buffer): changed type to list
-
-       * rudel-transport.el (rudel-transport-backend::rudel-make-connection):
-       added optional argument callback; improved documentation string
-       (rudel-transport-backend::rudel-wait-for-connections): added
-       argument dispatch; fixed and improved documentation string
-
-       * rudel-transport-util.el (rudel-transport-filter::slot-missing): new
-       method; makes slots of the underlying transport available as virtual
-       slots of the filter
-       (rudel-progress-reporting-transport-filter::reporter): fixed initarg
-
-       * rudel-transport.el: socket-like interface for transports
-       (header): downcased keywords; expanded "Commentary" section
-       (rudel-transport::rudel-set-filter): renamed
-       `rudel-transport-set-handler' -> rudel-set-filter
-       (rudel-transport::rudel-set-sentinel): new method; like
-       `set-process-sentinel'
-       (rudel-send): renamed `rudel-transport-send' -> `rudel-send'
-       (rudel-transport::rudel-start): new method start stopped transport
-       (rudel-transport-backend::rudel-make-connection): expanded
-       documentation string
-
-       * rudel-transport-util.el (initialize-instance): in generated handler,
-       do not loop over fragments
-
-       * rudel-transport-util.el
-       (rudel-assembling-transport-filter::assembly-function): removed
-       initform and accessor
-       (rudel-transport-make-filter-stack): new function; construct a stack
-       of transport filters according to a specification
-
-       * rudel-transport-util.el (rudel-progress-reporting-transport-filter):
-       new class; progress reporting transport filter
-
-       * rudel-transport-util.el (header): fixed license text; extended
-       commentary
-       (require rudel-transport): require for class `rudel-transport'
-       (rudel-transport-filter): new class; base class for transport
-       filters
-       (rudel-assembling-transport-filter): new class; assembles received
-       data fragments into messages
-       (rudel-parsing-transport-filter): new class; applies parse/generate
-       function to received/sent data
-
-       * rudel-transport-util.el: new file; utility functions for
-       implementing transport functionality
-       * Project.ede (target rudel): added rudel-transport-util.el
-
-2009-11-25  Jan Moringen  <address@hidden>
-
-       * obby/rudel-obby.el (rudel-obby-backend::capabilities): added
-       encrypt capability
-
-2009-10-29  Jan Moringen  <address@hidden>
-
-       * TODO: added closed-status to closed issues
-       (Future): multi-frame BEEP messages; notification mechanism
-       (Milestone rudel-0.3): multiple username/password attempts
-
-2009-10-22  Jan Moringen  <address@hidden>
-
-       * TODO (Future): added BEEP and SubEthaEdit tasks
-
-2009-10-15  Jan Moringen  <address@hidden>
-
-       * rudel.el (rudel-version): bumped to 0.3
-       * Project.ede (project rudel): bumped version to 0.3
-
-       * TODO: whitespace fixes
-        (Milestone rudel-0.4): new; focus on telepathy transport
-        (Milestone rudel-0.3): added infinote, document trees
-
-2009-10-13  Jan Moringen  <address@hidden>
-
-       * TODO: new file; TODO items for future development and releases
-
-2009-10-12  Phil Hagelberg  <address@hidden>
-
-        * rudel-mode.el
-       (rudel-mode-line-publish-state--add-indicator-to-mode-line):
-       Replace reference to mode-line indicator that was not present in
-       Emacs 22.
-
-        * rudel-compat.el: add rudel-get-coding-system wrapper function.
-        * rudel-obby-util.el (with-parsed-args): Replace call to
-       Emacs23-specific coding-system-from-name function with
-       rudel-get-coding-system.
-
-        rudel-compat.el: Add string-match-p if not present. (< Emacs 23)
-
-        * rudel-mode.el, rudel-overlay.el: Move use of :safe flag from
-       defcustom to a separate put. Required for Emacs 22 compatibility.
-
-        * rudel-loaddefs.el: Only require rudel-zeroconf if zeroconf is
-       available.
-
-2009-10-12  Jan Moringen  <address@hidden>
-
-       * jupiter/jupiter-delete.el (jupiter-delete::jupiter-transform):
-       fixed error message
-
-2009-10-08  Jan Moringen  <address@hidden>
-
-       * jupiter/jupiter.el (header): downcased keywords
-       (object-print): new method; add revisions and log length to string
-       * jupiter/jupiter-nop.el (header): downcased keywords; cosmetic
-       representation changes to "commentary" section
-       * jupiter/jupiter-insert.el (header): downcased keywords; cosmetic
-       changes to "commentary" section
-       (object-print): new method; add start, end, length and data to
-       string representation
-       * jupiter/jupiter-delete.el (header): downcased keywords; cosmetic
-       changes to "commentary" section
-       (jupiter-transform): cosmetic changes
-       (object-print): new method; add position and length to string
-       representation
-       * jupiter/jupiter-compound.el (header): downcased keywords;
-       cosmetic changes to "commentary" section
-       (object-print): new method; add number of children to string
-       representation
-
-2009-10-07  Jan Moringen  <address@hidden>
-
-       * doc/card.tex (Session Initiation): mention configured sessions;
-       explain Zeroconf-advertised session in more detail
-
-       * rudel-transport-util.el: new file; utility functions for
-       implementing transport functionality
-       * Project.ede (target rudel): added rudel-transport-util.el
-
-       * obby/doc/rudel-obby-transport-layers.cogre: new file; layers
-       used when constructing transport filter chain for obby connections
-       * obby/doc/rudel-obby-transport-layers.png: new file; generated
-
-2009-10-06  Jan Moringen  <address@hidden>
-
-       * doc/card.tex (Joining a Session ...): added global and user
-       passwords
-
-       * rudel.el (rudel-version): use list representation instead of
-       float
-        (rudel-allocate-buffer-function): added documentation string
-
-       * INSTALL (COMPILING): fixed typo
-
-2009-10-06  Phil Hagelberg  <address@hidden>
-
-        * README (JOINING): Mention `rudel-configured-sessions'
-       customization.
-
-       * README (INTRODUCTION): emphasize obby backend being the only
-       supported one so far
-       (JOINING): update example session with passwords.
-
-       * rudel-loaddefs.el: Add autoloads for rudel-host-session and
-       rudel-speedbar
-
-2009-10-05  Phil Hagelberg  <address@hidden>
-
-       * README: Mention Eshell issue and license.
-
-2009-10-03  Jan Moringen  <address@hidden>
-
-       * rudel-compat.el (make-pulsing-progress-reporter): removed;
-       `make-progress-reporter' is sufficient
-       (progress-reporter-pulse): store index in the car of the reporter;
-       set last update time of the reporter
-       * obby/rudel-obby.el (rudel-connect): use `make-progress-reporter'
-       instead of `make-pulsing-progress-reporter'
-       * obby/rudel-obby-client.el
-       (rudel-obby-connection::rudel-subscribe-to): cosmetic changes in
-       status messages
-
-       * ChangeLog: updated
-
-2009-10-02  Phil Hagelberg  <address@hidden>
-
-       * INSTALL: Mention CEDET's inclusion in Emacs
-
-       * rudel-state-machine.el (rudel-state-wait): update progress
-       reporter usage to match rudel-compat.el
-
-       * rudel-compat.el: Use updated progress reporters
-       (progress-reporter-update): may be used by pulsing reporters too
-       (make-progress-reporter): nil max value returns pulsing reporter
-       (progress-reporter-force-update): may be used by pulsing reporters
-       too
-       (progress-reporter-pulsing-p): added
-       (progress-reporter-pulse): removed message change option
-
-2009-10-02  Jan Moringen  <address@hidden>
-
-       * rudel-state-machine.el (rudel-state-wait): accept callback
-       function instead of message; adjusted documentation string
-        * obby/rudel-obby.el (rudel-obby-backend::rudel-connect): when
-       calling `rudel-state-wait', provide a callback; the callback
-       controls a progress reporter
-        * obby/rudel-obby-client.el
-        (rudel-obby-connection::rudel-subscribe-to): when calling
-       `rudel-state-wait', provide a callback; the callback controls a
-       progress reporter
-
-        * rudel-compat.el (progress-reporter-pulse): store index as float
-
-       * obby/rudel-obby-client.el
-       (rudel-obby-client-state-idle::rudel-obby/obby_document_create):
-       cosmetic changes of printed messages
-       (rudel-obby-client-state-idle::rudel-obby/obby_document_remove):
-       cosmetic changes of printed messages
-
-       * rudel.el (rudel-session::rudel-remove-document): when necessary,
-       detach document first; added documentation string
-       (rudel-document::rudel-attached-p): new method; return non-nil
-       when document is attached to a buffer
-
-       * obby/rudel-obby-client.el
-       (rudel-obby-client-state-idle::rudel-obby/net6_client_part):
-       promoted warning severity to :warning
-       (rudel-obby-client-state-idle::rudel-obby/obby_document_remove):
-       fixed lookup of document; added warning message in case it is not
-       found
-       (rudel-obby-client-state-idle::rudel-obby/obby_document/rename):
-       promoted warning severity to :warning
-       (rudel-obby-connection::rudel-unpublish): new method; ask server
-       to remove a document
-
-2009-10-01  Jan Moringen  <address@hidden>
-
-       * rudel-state-machine.el (rudel-state-wait): fixed progress range
-       [0, 100] -> [0, 1]; fixed reference to reporter object
-       * obby/rudel-obby.el (rudel-obby-send): removed remnants of calls
-       to `working-*' functions; call `progress-reporter-pulse' just
-       before `progress-reporter-done'
-
-2009-09-30  Jan Moringen  <address@hidden>
-
-       * rudel-compat.el: only define pulsing progress reporter when
-       Emacs does not have one itself
-       (header): downcased keywords
-       (make-pulsing-progress-reporter): renamed
-       `make-progress-reporter-pulse' ->
-       `make-pulsing-progress-reporter'; cosmetic changes; explanatory
-       comment
-       (progress-reporter-pulse): added documentation string
-       Suggested by Phil Hagelberg
-
-       * rudel-compat.el (progress-pulse-values): new variable; indicator
-       strings used by pulsing progress reporter
-       (make-progress-reporter-pulse): new function; creates pulsing
-       progress reporter
-       (progress-reporter-pulse): new function; updates pulsing progress
-       reporter
-       Suggested by Phil Hagelberg
-
-2009-09-29  Jan Moringen  <address@hidden>
-
-       * obby/rudel-obby-server.el
-       (rudel-obby-server-state-before-join::rudel-obby/net6_client_login):
-       accept two additional arguments: global-password and user-password
-
-       * rudel-session-initiation.el (rudel-configured-sessions):
-       improved documentation string
-
-       * INSTALL (REQUIREMENTS): wording
-       (INSTALLING): mention other things that cause rudel to be
-       autoloaded; minor cosmetic changes
-       (COMPILING): fixed filename compile.el -> rudel-compile.el
-
-       * rudel-compile.el (header): added copyright and meta data
-       (code): let-bind rudel-dir; call `byte-recompile-directory' just
-       once since it operates recursively
-
-2009-09-28  Jan Moringen  <address@hidden>
-
-       * obby/rudel-obby-server.el (header): better documentation
-       (require rudel-state-machine): now required for state machine
-       style handling of client connections
-       (require rudel-obby-state): now required; provides base class for
-       states
-       (rudel-obby-server-state-new): new class; client connection state
-       new
-       (rudel-obby-server-state-encryption-negotiate): new class; client 
connection state
-       for negotiating encryption
-       (rudel-obby-server-state-before-join): new class; client connection 
state
-       for waiting for login request
-       (rudel-obby-server-state-new): new class; client connection state
-       entered after session setup and joining is complete
-       (rudel-obby-server-connection-states): new variable; list of
-       states and their symbolic names
-       (rudel-obby-client): now derived from rudel-state-machine
-
-       * obby/rudel-obby.el (rudel-obby-backend::rudel-ask-connect-info):
-       check for :global-password and :user-password correctly; do not
-       put them into the list when they are ""
-       (rudel-obby-backend::rudel-connect): comment
-
-       * rudel-session-initiation.el
-       (rudel-configured-sessions-backend::rudel-discover): let
-       `rudel-session-initiation-adjust-info' do the heavy lifting
-       (rudel-session-initiation-adjust-info): new function; adjust
-       arguments that need adjusting in a session information property
-       list
-
-       * rudel-session-initiation.el (rudel-configured-sessions): more
-       precise specification of the customization type
-
-2009-09-27  Phil Hagelberg <address@hidden>
-
-       * compile.el: renamed compile.el -> rudel-compile.el
-
-       * INSTALL: Mention new install process using compile.el and
-       rudel-loaddefs.el.
-
-       * rudel-loaddefs.el: Autoload rudel as one unit instead of
-       piece-by-piece. Remove eieio dependency from autoloads.
-
-       * compile.el: Perform compilation from Elisp
-
-       * Makefile: Remove error-prone CEDET-autogenerated build scripts.
-
-2009-09-27  Jan Moringen  <address@hidden>
-
-       * rudel-session-initiation.el
-       (rudel-configured-sessions-backend::rudel-discover): fixed a bug
-       that dropped the last option in each configured session
-
-       * rudel-session-initiation.el (rudel-configured-sessions): new
-       customization option; contains a list of session information lists
-       (rudel-ask-protocol-backend::initialize-instance): maybe call next
-       method
-       (rudel-configured-sessions-version): new constant; version of the
-       configured-sessions backend
-       (rudel-configured-sessions-backend): new class;
-       configured-sessions backend
-       (rudel-configured-sessions-backend::initialize-instance): new
-       method; set version slot
-       (rudel-configured-sessions-backend::rudel-discover): new method;
-       "discover" configured sessions
-       (autoload rudel-add-backend): register
-       rudel-configured-sessions-backend as a protocol backend
-
-       * rudel-chat.el (rudel-chat-buffer-name): new constant; name chat
-       log buffer
-       (rudel-chat-handle-buffer): raise buffer when logging a chat
-       message
-
-       * rudel-debug.el (header): fixed meta-data and license
-       (rudel-debug-sent-data-face): added documentation string
-       (rudel-debug-received-data-face): added documentation string
-       (rudel-debug-received-processed-data-face): added documentation
-       string
-       (rudel-debug-state-face): added documentation string
-       (rudel-debug-special-face): added documentation string
-       (rudel-suspend-session-socket): added documentation string
-       (rudel-resume-session-socket): added documentation string
-
-       * obby/rudel-obby-util.el (rudel-obby-dispatch): use
-       `display-warning' instead of `warn'
-       * obby/rudel-obby-state.el (rudel-obby-state::rudel-accept): use
-       `display-warning' instead of `warn'
-       (rudel-obby-document-handler::rudel-obby/obby_document): use
-       `display-warning' instead of `warn'
-       * obby/rudel-obby-client.el
-       (rudel-obby-client-state-idle::rudel-obby/net6_client_part): use
-       `display-warning' instead of `warn'
-       (rudel-obby-client-state-idle::rudel-obby/obby_document/record):
-       use `display-warning' instead of `warn'
-       * rudel-backend.el (rudel-backend-factory::rudel-load-backends):
-       use `display-warning' instead of `warn'
-
-       * obby/rudel-obby-client.el (require rudel-chat): used when
-       handling chat messages
-       (rudel-obby-client-state-idle::rudel-obby/obby_message): new
-       method; handles obby 'message' messages by dispatching to
-       `rudel-chat-dispatch-message'
-       * rudel-chat.el (whole file): new file; handling of incoming chat
-       messages
-       * Project.ede (target rudel): added rudel-chat.el
-       * Makefile (target rudel_LISP): added rudel-chat.el
-
-2009-09-26  Jan Moringen  <address@hidden>
-
-       * obby/rudel-obby-state.el (rudel-obby-server-connection-state):
-       new class; base class for server connection states
-       (rudel-obby-server-connection-state::rudel-broadcast): new method;
-       broadcast message to a set of receivers
-
-2009-09-25  Jan Moringen  <address@hidden>
-
-       * obby/rudel-obby.el (rudel-obby-backend::rudel-connect): new
-       error state they-finalized; handle join-failed error specially
-       * obby/rudel-obby-client.el (rudel-obby-client-state-join-failed):
-       improved comments
-       (rudel-obby-client-state-they-finalized): new state class; used to
-       indicate that the connection was closed by the peer
-       (rudel-obby-client-connection-states): added they-finalized
-       (rudel-obby-connection::rudel-close): switch state machine to
-       they-finalized
-       (rudel-obby-connection::rudel-subscribe-to): new error state
-       they-finalized
-
-       * rudel.el (rudel-client-session::connection): allow nil value
-       (rudel-client-session::rudel-end): only try to disconnect the
-       connection if it is non-nil; ignore errors during disconnect
-
-       * obby/rudel-obby-client.el
-       
(rudel-obby-client-state-encryption-start::rudel-obby/net6_encryption_begin):
-       do not require rudel-tls; do not try to start TLS encryption if
-       the connection does not support it
-       * rudel-tls.el (rudel-tls-make-process): mark process as
-       supporting TLS encryption
-
-       * obby/rudel-obby-state.el (rudel-obby/net6_ping): return nil to
-       prevent erratic behavior of the state machine
-
-       * rudel-interactive.el (rudel-allocate-buffer-clear-existing):
-       added missing whitespace in prompt string
-
-2009-09-24  Jan Moringen  <address@hidden>
-
-       * rudel-tls.el (rudel-tls-start-tls): changed displayed message
-       (rudel-tls-wait-init): ignore all lines until "- Simple Client
-       Mode.*" is received; then switch back old filter
-       (rudel-tls-wait-handshake): ignore all lines until "-
-       Compression.*" is received; then switch to established filter
-       (rudel-tls-established): do not ignore any lines other than
-       "- Peer has closed the GNUTLS connection"
-
-       * obby/rudel-obby.el (rudel-ask-connect-info): ask for global and
-       user passwords
-       * obby/rudel-obby-client.el
-       (rudel-obby-client-state-joining::rudel-enter): transmit global
-       and user passwords when available
-
-       * obby/rudel-obby-errors.el
-       (rudel-obby-error-wrong-global-password): fixed error code
-       (rudel-obby-error-wrong-user-password): fixed error code
-       (rudel-obby-error-protocol-version-mismatch): fixed error code
-       (rudel-obby-error-not-encrypted): fixed error code
-       * obby/rudel-obby-client.el
-       (rudel-obby-client-state-joining::rudel-obby/net6_login_failed):
-       recognize wrong global/user password error codes
-
-       * obby/rudel-obby-debug.el (whole file): new file; debugging
-       functions for the obby backend
-       * rudel-debug.el (whole file): new file; debugging functions
-
-       * obby/rudel-obby-errors.el
-       (rudel-obby-error-wrong-global-password): new constant; error code
-       for wrong global password
-       (rudel-obby-error-wrong-user-password): new constant; error code
-       for wrong user password
-       (rudel-obby-error-protocol-version-mismatch): new constant; error
-       code for protocol version mismatch
-       (rudel-obby-error-not-encrypted): new constant; error code for not
-       encrypted
-
-       * Project.ede (target rudel): added rudel-transport.el
-       * Makefile (target rudel_LISP): added rudel-transport.el
-       * rudel-transport.el (whole file): new file; interface for
-       transport backends
-
-2009-09-20  Jan Moringen  <address@hidden>
-
-       * obby/rudel-obby-server.el
-       (rudel-obby-client::rudel-remote-operation): added byte -> char
-       conversion before the operation is applied to the server-side
-       document; updated comments
-
-       * obby/rudel-obby-server.el (rudel-obby-client::rudel-broadcast):
-       cosmetic changes
-       (rudel-obby-client::rudel-obby/net6_client_login): cosmetic
-       changes; improved comments
-       (rudel-obby-client::rudel-obby/obby_document): changed
-       documentation string; cosmetic changes
-       (rudel-obby-client::rudel-obby/obby_document/record): added a
-       comment
-       (rudel-obby-client::rudel-remote-operation): improved comments
-
-       * obby/rudel-obby-server.el (header): added header comment
-       (rudel-obby-client::rudel-obby/obby_document_create): changed
-       documentation comment
-       (rudel-obby-client::rudel-obby/obby_document/subscribe): changed
-       documentation comment; cosmetic changes
-       (rudel-obby-client::rudel-obby/obby_document/unsubscribe):
-       cosmetic changes
-       (rudel-obby-server::initialize-instance): do not run :after; call
-       next method
-       (rudel-obby-server::rudel-broadcast): signal wrong-type-argument
-       instead of just error; cosmetic changes
-       (rudel-obby-server::rudel-check-username-and-color): changed
-       comments
-       (rudel-obby-server::object-print): new method; generate string
-       representation with number of clients
-
-2009-09-19  Jan Moringen  <address@hidden>
-
-       * obby/rudel-obby-server.el
-       (rudel-obby-client::rudel-obby/obby_document/record/ins):
-       construct the operation and use `rudel-remote-operation'
-       (rudel-obby-client::rudel-obby/obby_document/record/del):
-       construct the operation and use `rudel-remote-operation'
-       (rudel-obby-client::rudel-remote-operation): new method; transform
-       and apply an operation object to the server-side document; send
-       operation to all other clients
-       (rudel-obby-server::rudel-broadcast): cosmetic changes
-
-       * obby/rudel-obby-server.el
-       (rudel-obby-client::rudel-obby/obby_document/record/del): swapped
-       local and remote revisions in the operation name to be consistent
-       with record/ins; does not affect behavior
-
-2009-09-12  Jan Moringen  <address@hidden>
-
-       * rudel-mode.el (rudel-header-subscriptions--update-from-document):
-       force mode line update
-       (rudel-header-subscriptions--update-from-buffer): force mode line
-       update
-       (rudel-header-subscriptions-minor-mode): force mode line update
-
-       * rudel-mode.el
-       (rudel-mode-line-publish-state-unpublished-string): new
-       customization option; string used to indicate that a buffer is not
-       published
-       (rudel-mode-line-publish-state-published-string): new
-       customization option; string used to indicate that a buffer is
-       published
-       (rudel-mode-line-publish-state--update-string): use
-       `rudel-mode-line-publish-state-unpublished-string' and
-       `rudel-mode-line-publish-state-unpublished-string'
-
-       * rudel.el (rudel-session::end-hook): new slot; stores handlers of
-       the end hook
-       (rudel-session::rudel-end): run end hook
-       (rudel-session::rudel-join-session): install handler on session
-       end hook to set `rudel-current-session' to nil
-       (rudel-session::rudel-end-session): no need to run
-       rudel-session-end-hook or reset `rudel-current-session'
-       * rudel-hooks.el (rudel-hooks--session-start): add handler for the
-       end hook of the session
-       (rudel-hooks--session-end): remove the handler from end hook of
-       the session; run the rudel-session-end hook
-       (rudel-hooks--install-handlers): do install handler for
-       rudel-session-end hook; this is now done by installing the in the
-       session object
-       (rudel-hooks--uninstall-handlers): no need to remove
-       rudel-session-end hook
-
-       * rudel-util.el (rudel-socket-owner::rudel-state-change): cover
-       more states
-
-       * obby/rudel-obby-client.el
-       (rudel-obby-client-state-idle::rudel-obby/obby_document_remove):
-       implemented, was stub; untested though
-
-2009-09-10  Jan Moringen  <address@hidden>
-
-       * obby/rudel-obby-client.el
-       (rudel-obby-client-state-idle::rudel-obby/net6_client_join): check
-       whether we have a user object for the specified user id; modify
-       the existing object if there is one
-
-2009-09-09  Jan Moringen  <address@hidden>
-
-       * zeroconf/Makefile (whole file): regenerated
-       * wave/Makefile (whole file): regenerated
-       * Makefile (target all): build target doc
-       (target doc): new target; build documentation
-       (target tags): build target tags in doc directory
-       (target dist): build target dist in doc directory
-
-2009-09-06  Jan Moringen  <address@hidden>
-
-       * telepathy/rudel-telepathy.el (header): fixes
-       (require rudel-backend): required, since we define a backend
-       (require rudel-transport): it is a transport backend
-       (class rudel-telepathy-backend): derived from
-       rudel-transport-backend
-       (rudel-telepathy-backend::initialize-instance): new method; set
-       version slot
-       (autoloading): upgraded to new backend registration style
-
-       * INSTALL (REQUIREMENTS): mention Avahi
-
-2009-09-05  Jan Moringen  <address@hidden>
-
-       * rudel.el (require rudel-util): required for `rudel-hook-object'
-
-       * rudel-util.el (property svn:executable): removed property
-       * rudel-overlay.el (property svn:executable): removed property
-
-       * doc/Project.ede (whole file): new file; project file for the
-       documentation directory
-       * doc/Makefile (whole file): new file; generated Makefile for the
-       documentation directory
-       * doc/card.tex (whole file): new file; reference card for Rudel;
-       source
-       * doc/card.pdf (whole file): new file; reference card for Rudel;
-       PDF
-
-2009-09-04  Jan Moringen  <address@hidden>
-
-       * rudel-interactive.el (rudel-read-document): added comment
-       (rudel-allocate-buffer-clear-existing): handle the case in which
-       case a buffer with the desired name exists and is attached to a
-       different document; added some comments
-
-       * rudel-mode.el (header): list all provided modes; bump version
-       (require rudel-hooks): required for global hooks
-       (rudel-mode-line-publish-state-string): new variable; buffer
-       local, holds publish state string for buffer
-       (rudel-mode-line-publish-state--add-indicator-to-mode-line): new
-       function; add publish state indicator to mode line
-       (rudel-mode-line-publish-state--remove-indicator-from-mode-line):
-       new function; remove publish state indicator from mode line
-       (rudel-mode-line-publish-state--update-string): new function;
-       update publish state indicator according to buffer state
-       (rudel-mode-line-publish-state--document-attach): new function;
-       handle document attaching to buffer
-       (rudel-mode-line-publish-state--document-detach): new function;
-       handle document detaching from buffer
-       (rudel-mode-line-publish-state-minor-mode): new minor mode;
-       displays publish state of buffer in mode line
-       (global-rudel-mode-line-publish-state-mode): new minor mode;
-       globalization of `rudel-mode-line-publish-state-minor-mode'
-       (rudel-minor-keymap): menu entries for buffer local and global
-       mode line publish state mode
-
-       * rudel.el (require rudel-hooks): required or hook variables
-       (rudel-session-start-hook): moved to rudel-hooks.el
-       (rudel-session-end-hook): moved to rudel-hooks.el
-       * rudel-hooks.el (whole file): new file; contains hook variables
-       and mapping from object hooks to global hooks
-       * Project.ede (target rudel): added file rudel-hooks.el
-       * Makefile (target rudel_LISP): added file rudel-hooks.el
-
-2009-09-03  Jan Moringen  <address@hidden>
-
-       * rudel-mode.el (rudel-header-subscriptions-minor-mode): improved
-       documentation string
-
-2009-08-30  Jan Moringen  <address@hidden>
-
-       * zeroconf/Makefile (whole file): new file; generated Makefile for
-       the zeroconf subproject
-
-       * wave/rudel-wave.el (whole file): new file; main class of the
-       wave backend
-       * wave/Project.ede (whole file): new file; project file for the
-       wave subproject
-       * wave/Makefile (whole file): new file; generated Makefile for the
-       wave subproject
-       * Project.ede (target autoloads): added wave directory
-       * Makefile (LOADDIRS): added wave and zeroconf directories
-       (VERSION): bumped to 0.2
-       (target all): added wave and zeroconf
-       (tags): descend into zeroconf and wave directories
-       (dist): descend into zeroconf and wave directories
-
-2009-08-28  Jan Moringen  <address@hidden>
-
-       * rudel.el (rudel-change-color): run the change hook of the self
-       user
-
-       * rudel-overlay.el (rudel-overlay-set-face-attributes): check the
-       face actually exists
-
-2009-08-27  Jan Moringen  <address@hidden>
-
-       * rudel-mode.el (rudel-header-subscriptions-use-images): new
-       variable; controls whether images are used when formatting user
-       names
-       (rudel-header-subscriptions-separator): new variable; separator
-       used when formatting user names
-       (rudel-header-subscriptions--make-format): new function; make a
-       format object for header line
-       (rudel-header-subscriptions--update-from-document): new function;
-       update header line from document
-       (rudel-header-subscriptions--update-from-buffer): new function;
-       update header line from buffer
-       (rudel-header-subscriptions--options-changed): new function;
-       update header line in all buffers that have
-       rudel-header-subscriptions-minor-mode enabled after customization
-       option change
-       (rudel-header-subscriptions--user-change): new function; update
-       header line after a user object change
-       (rudel-header-subscriptions--add-user): new function; watch newly
-       subscribed user and update header line
-       (rudel-header-subscriptions--remove-user): new function; stop
-       watching user and update header line
-       (minor mode rudel-header-subscriptions-minor-mode): new minor
-       mode; display subscribed users in buffer's header line
-       (rudel-header-subscriptions--attach): new function; enable header
-       subscription minor mode when attaching
-       (rudel-header-subscriptions--detach): new function; disable header
-       subscription minor mode when detaching
-       (rudel-header-subscriptions--add-document): new function; monitor
-       attaching/detaching of new document
-       (rudel-header-subscriptions--remove-document): new function; stop
-       monitoring attaching/detaching of new document
-       (rudel-header-subscriptions--session-start): new function; watch
-       documents being added/removed to/from the session
-       (rudel-header-subscriptions--session-end): new function; stop
-       watching documents being added/removed to/from the session
-       (minor mode global-rudel-header-subscriptions-mode): global minor
-       mode that controls `rudel-header-subscriptions-minor-mode' in
-       buffers
-       (advice global-rudel-header-subscriptions-mode): controls
-       adding/removing watches for added/removed documents when the
-       global mode is enabled/disabled
-       (rudel-minor-keymap): Added entries for
-       `rudel-header-subscriptions-minor-mode' and
-       `global-rudel-header-subscriptions-mode'
-
-2009-08-26  Jan Moringen  <address@hidden>
-
-       * . (property svn:ignore): added patterns
-       * jupiter (property svn:ignore): added patterns
-       * obby (property svn:ignore): added patterns
-
-       * rudel.el (rudel-session::add-user-hook): new slot; add user hook
-       function list
-       (rudel-session::remove-user-hook): new slot; remove user hook
-       function list
-       (rudel-session::add-document-hook): updated documentation string
-       (rudel-session::remove-document-hook): updated documentation
-       string
-       (rudel-session::rudel-add-user): run add user hook
-       (rudel-session::rudel-remove-user): run remove user hook
-
-       * rudel.el (rudel-session-start-hook): new variable; session start
-       hook function list
-       (rudel-session-end-hook): new variable; session end hook function
-       list
-       (rudel-join-session): run session start hook
-       (rudel-end-session): run session end hook
-
-       * obby/rudel-obby-server.el
-       (rudel-obby-client::rudel-obby/obby_document_create): call
-       `generate-new-buffer-name' on complete buffer name; not just name
-       part
-
-       * obby/rudel-obby-server.el
-       (rudel-obby-client::rudel-obby/obby_document/subscribe): send
-       number of bytes instead of number of characters
-
-       * obby/rudel-obby-client.el
-       (rudel-obby-client-state-document-synching::remaining-bytes):
-       fixed initarg num-bytes -> remaining-bytes
-
-       * rudel.el (rudel-session::add-document-hook): new slot; run when
-       a document gets added to the session
-       (rudel-session::remove-document-hook): new slot; run when a
-       document gets removed from the session
-       (rudel-session::rudel-add-document): run add document hook
-       (rudel-session::rudel-remove-document): run remove document hook
-       (rudel-document::unsubscribe-hook): fixed initarg subscribe-hook
-       -> unsubscribe-hook
-
-2009-08-25  Jan Moringen  <address@hidden>
-
-       * www/index.html (Download): link to http://bazaar-vcs.org;
-       improved wording
-
-       * www/index.html (Download): changed link to source; add browse
-       source link for bzr
-
-       * INSTALL (REQUIREMENTS): precise CEDET release version
-
-       * obby/rudel-obby-server.el
-       (rudel-obby-client::rudel-obby/obby_user_colour): run change hook
-       after setting slot
-       (rudel-obby-server::rudel-remove-client): run change hook after
-       setting slot
-       * obby/rudel-obby-client.el
-       (rudel-obby-client-state-idle::rudel-obby/net6_client_part): run
-       change hook after setting slots
-       (rudel-obby-client-state-idle::rudel-obby/obby_user_colour): run
-       change hook after setting slot
-       * rudel.el (class rudel-user): derive from `rudel-hook-object'
-       (rudel-user::change-hook): new slot; stores change hook functions
-
-       * obby/rudel-obby-server.el
-       (rudel-obby-client::rudel-obby/obby_user_colour): cosmetic changes
-       (rudel-obby-client::rudel-obby/obby_document/subscribe): use
-       `rudel-add-user'
-       (rudel-obby-client::rudel-obby/obby_document/unsubscribe): use
-       `rudel-remove-user'
-       (rudel-obby-server::rudel-check-username-and-color): whitespace
-       fixes
-
-2009-08-23  Jan Moringen  <address@hidden>
-
-       * rudel.el (rudel-document::attach-hook): new slot; attach hook
-       function list
-       (rudel-document::detach-hook): new slot; detach hook function list
-       (rudel-document::rudel-attach-to-buffer): run hook `attach-hook'
-       (rudel-document::rudel-detach-from-buffer): run hook `detach-hook'
-       (rudel-document::rudel-add-user): improved documentation string
-       (rudel-document::rudel-remove-user): improved documentation string
-
-       * obby/rudel-obby.el
-       (rudel-obby-user::eieio-speedbar-object-buttonname): fixed typo
-
-2009-08-21  Jan Moringen  <address@hidden>
-
-       * obby/rudel-obby-client.el
-       (rudel-obby-client-state-idle::rudel-obby/obby_document/subscribe):
-       call `rudel-add-user'
-       (rudel-obby-client-state-idle::rudel-obby/obby_document/unsubscribe):
-       call `rudel-remove-user'
-       * rudel.el (class rudel-document): mixin rudel-hook-object
-       (rudel-document::subscribe-hook): new slot; subscribe-hook
-       function list
-       (rudel-document::unsubscribe-hook): new slot; unsubscribe-hook
-       function list
-       (rudel-document::rudel-add-user): new method; add user to list of
-       subscribed users and run subscribe-hook
-       (rudel-document::rudel-remove-user): new method; remove user from
-       list of subscribed users and run unsubscribe-hook
-
-       * obby/rudel-obby.el (header): cosmetic changes
-       (include rudel-icons): `rudel-display-string' uses icons
-       (rudel-obby-user::eieio-speedbar-object-buttonname): use
-       `rudel-display-string'
-       (rudel-obby-user::rudel-display-string): new method; textual
-       representation of user object
-       (rudel-obby-parse-message): cosmetic changes
-       * rudel.el (include rudel-icons): `rudel-display-string' uses
-       icons
-       (rudel-user::rudel-display-string): new method; textual
-       representation of user object
-
-       * rudel-util.el (rudel-hook-object): new class; abstract mixin for
-       classes that offer hooks
-       (rudel-hook-object::object-add-hook): new method; add function to
-       hook list
-       (rudel-hook-object::object-remove-hook): new method; remove
-       function from hook list
-       (rudel-hook-object::object-run-hook-with-args): new method; run
-       hook functions
-
-2009-08-20  Jan Moringen  <address@hidden>
-
-       * icons/plaintext.svg (new file): plaintext icon
-       * icons/person.svg (new file): person icon
-       * icons/encrypted.svg (new file): encrypted icon
-       * icons/document.svg (new file): document icon
-       * icons/disconnected.svg (new file): disconnected icon
-       * icons/connected.svg (new file): connected icon
-       * rudel-icons.el (new file): loading icons
-       * Project.ede (target rudel): added rudel-icons.el
-
-2009-08-19  Jan Moringen  <address@hidden>
-
-       * rudel.el (rudel-join-session): renamed local variable backend to
-       session-initiation-backend
-
-2009-08-17  Jan Moringen  <address@hidden>
-
-       * obby/rudel-obby-state.el (rudel-obby-state::rudel-accept): fixed
-       format of warning message
-
-       * rudel-state-machine.el (require working): needed by
-       `rudel-state-wait'
-
-       * obby/rudel-obby-client.el
-       (rudel-obby-client-state-idle::rudel-obby/obby_user_colour): set
-       face attributes
-       * rudel.el (rudel-change-color): set face attributes
-       * rudel-overlay.el (rudel-overlay-make-face): use
-       `rudel-overlay-set-face-attributes'
-       (rudel-overlay-set-face-attributes): new function; set face
-       attributes
-
-       * rudel-overlay.el (rudel-overlay-author-set-properties): call
-       `rudel-overlay-make-face-symbol'
-       (rudel-overlay-make-face-symbol): new function; return face symbol
-
-2009-08-16  Jan Moringen  <address@hidden>
-
-       * rudel-overlay.el (rudel-overlay-author-display): option that
-       controls display of author overlays
-       (rudel-make-author-overlay): call
-       `rudel-overlay-author-set-properties' to set the overlay
-       properties
-       (rudel-overlay-author-set-properties): new function; set overlay
-       properties; respects rudel-overlay-author-display
-       (rudel-overlay-author-update): new function; update overlay
-       properties based on associated user object
-       (rudel-overlay-options-changed): new function; call
-       `rudel-overlay-author-update' on all Rudel overlays in all buffers
-       * rudel-mode.el (header): cosmetic changes
-       (rudel-minor-menu): added menu entry to toggle display of author
-       overlays
-
-       * rudel-overlay.el (rudel-make-author-overlay): use `intern'
-       instead of `make-symbol' when allocating the face name; this way,
-       faces can actually be created lazily
-       (rudel-overlay-make-face): call `make-face' for the new face
-
-       * obby/rudel-obby-client.el
-       (rudel-obby-client-state-document-synching::object-print): fixed
-       slot name remaining-bytes
-
-       * rudel.el (rudel-host-session): the backend object is the cdr of
-       the result of `rudel-backend-choose'
-
-2009-08-15  Jan Moringen  <address@hidden>
-
-       * telepathy/rudel-telepathy.el (header): added file comment
-       * obby/rudel-obby-state.el (header): fixed email address
-       (whole file): whitespace fixes
-       * jupiter/jupiter.el (header): cosmetic changes
-       (whole file): whitespace fixes
-       * rudel-util.el (header): cosmetic changes
-       * rudel-mode.el (header): cosmetic changes
-       * rudel-errors.el (header): fixed type
-       (whole file): whitespace fixes
-
-       * obby/rudel-obby.el (rudel-ask-connect-info): added optional
-       argument info; do not ask for things that are already specified in
-       info
-       (autoload): register obby service with the Zeroconf backend
-       * zeroconf/rudel-zeroconf.el (new file): Zeroconf session
-       initiation for Rudel
-       * zeroconf/Project.ede (new file): subproject zeroconf
-       * rudel.el (rudel-join-session): call `rudel-ask-info' to augment
-       connect info
-       * Project.ede (target autoloads): added directory zeroconf
-       * INSTALL (INSTALLING): mention zeroconf subdirectory
-       (COMPILING): mention zeroconf target
-
-       * rudel-backend.el (rudel-backend-factory::rudel-get-backend):
-       return backend as a cons
-       (rudel-backend-get): new function; convenience function for
-       getting backends
-
-       * obby/rudel-obby.el (header): extended commentary and history
-       (rudel-obby-version): bumped to 0.2
-       (rudel-obby-backend::initialize-instance): set :version slot in
-       constructor instead of using obsolete lambda expression in
-       initform
-
-2009-08-14  Jan Moringen  <address@hidden>
-
-       * Project.ede (project rudel): bumped version to 0.2; added
-       mailing list and path to web files
-
-       * rudel-backend.el (rudel-backend-factory): do not initialize
-       backends with lambda expression
-       (rudel-backend-factory::initialize-instance): new method;
-       initialize backends
-       (rudel-backend-cons-p): use `object-p' instead of `eieio-object-p'
-       (rudel-backend-dump): changed format slightly
-
-2009-08-13  Jan Moringen  <address@hidden>
-
-       * rudel.el (include rudel-session-initiation): required for
-       `rudel-join-session'
-       (rudel-join-session): mostly rewritten; moved user interaction to
-       `interactive' form
-       * rudel-session-initiation.el (new file): session initiation
-       backend interface and high-level programming interface
-       * Project.ede (target rudel): added rudel-session-initiation.el
-       * Makefile (rudel_LISP): added rudel-session-initiation.el
-
-       * rudel-interactive.el (rudel-read-session): discriminate sessions
-       vs. session generating objects using `rudel-backend-cons-p'
-
-       * rudel-backend.el (rudel-backend-cons-p): new function; checks
-       whether a cons consists of a backend name and object
-
-2009-08-12  Jan Moringen  <address@hidden>
-
-       * rudel-interactive.el (rudel-read-session): new function; read
-       session by name and return it
-
-       * rudel-interactive.el (rudel-read-backend): argument backends is
-       no longer optional; always return a cons of backend name and
-       object; updated documentation string
-       (whole file): whitespace fixes
-       * rudel-backend.el (rudel-backend-choose): always return a cons of
-       backend name and object; updated documentation string
-
-2009-08-11  Jan Moringen  <address@hidden>
-
-       * rudel.el (file header): added project URL
-       (whole file): improved some comments
-
-2009-08-10  Jan Moringen  <address@hidden>
-
-       * rudel.el (include eieio-base): needed for eieio-named
-
-2009-08-04  Jan Moringen  <address@hidden>
-
-       * rudel-state-machine.el (header section commentary): updated
-       (rudel-state-machine::initialize-instance): use
-       `rudel--switch-to-return-value' to allow immediate switch to
-       another state
-       (rudel-state-machine::rudel-switch): use
-       `rudel--switch-to-return-value' to switch to successor state
-       (rudel-state-machine::rudel--switch-to-return-value): new function
-       switch to successor state for different kinds of specifications of
-       the successor state
-
-2009-08-03  Jan Moringen  <address@hidden>
-
-       * obby/rudel-obby.el (require rudel-backend): now necessary
-       (require rudel-protocol): now necessary
-       (class rudel-obby-backend): now derived from `rudel-backend';
-       autoloaded
-       (autoloading): use `rudel-add-backend'
-       * rudel.el (require rudel-backend): backends have their own file
-       (class rudel-backend): moved to rudel-backend.el
-       (rudel-load-backends): moved to rudel-backend.el
-       (rudel-suitable-backends): moved to rudel-backend.el
-       (rudel-choose-backend): moved to rudel-backend.el
-       (rudel-join-session): use `rudel-backend-choose'
-       (rudel-host-session): use `rudel-backend-choose'
-
-       * rudel-protocol.el (new file): interface for Rudel protocol
-       backends
-       * Project.ede (target rudel): added rudel-protocol.el
-       * Makefile (rudel_LISP): added rudel-protocol.el
-
-       * rudel-backend.el (rudel-backend-factory::rudel-get-backend):
-       improved documentation string
-       (rudel-backend-factory::rudel-suitable-backends): improved
-       documentation string
-       (rudel-backend-suitable-backends): improved documentation string
-       (rudel-backend-choose): When only one backend matches, do not
-       check interactivity using `interactive-p', that does not work;
-       call `sit-for' correctly
-
-2009-08-02  Jan Moringen  <address@hidden>
-
-       * jupiter/Makefile (whole file): regenerated; reflects CEDET
-       changes
-       * rudel-backend.el (new file): generic backend management, query
-       and loading functions
-       * Project.ede (target rudel): added rudel-backend.el to sources
-       * Makefile (rudel_LISP): added rudel-backend.el
-
-       * obby/rudel-obby-server.el
-       (rudel-obby-client::rudel-obby/net6_client_login): use slot
-       :object-name instead of calling object-name-string
-       (rudel-obby-server::rudel-add-context): use slot :object-name
-       instead of calling object-name-string
-       * obby/rudel-obby-client.el
-       (rudel-obby-client-state-idle::rudel-obby/obby_document/rename):
-       use slot :object-name instead of calling object-name-string
-       (rudel-obby-connection::rudel-add-context): use slot :object-name
-       instead of calling object-name-string
-       (rudel-obby-connection::rudel-publish): use slot :object-name
-       instead of calling object-name-string
-       * rudel.el (class rudel-user): added base class eieio-named for
-       virtual slot :object-name; made abstract
-       (class rudel-document): added base class eieio-named for virtual
-       slot :object-name
-       * rudel-overlay.el (rudel-make-author-overlay): use slot
-       :object-name instead of calling object-name-string
-
-       * rudel-state-machine.el
-       (rudel-state-machine::initialize-instance): use &rest slots
-       instead of just slots
-
-2009-07-15  Jan Moringen  <address@hidden>
-
-       * rudel.el (rudel-document::rudel-detach-from-buffer): call
-       `rudel-overlays-remove-all'; remove `rudel-unpublish-buffer' hook
-       early
-       * rudel-overlay.el (rudel-overlays-remove-all): new function;
-       remove all overlays from the current buffer
-       (whole file): cosmetic changes; typo fixes; whitespace fixes
-
-       * obby/rudel-obby.el (rudel-obby-document::rudel-unique-name):
-       Check `next-method-p' before calling the next method
-       * obby/rudel-obby-client.el
-       (rudel-obby-connection::initialize-instance): Check
-       `next-method-p' before calling the next method
-       (rudel-obby-connection::rudel-register-state): Check
-       `next-method-p' before calling the next method
-       (rudel-obby-connection::rudel-disconnect): Check
-       `next-method-p' before calling the next method
-       * rudel.el (rudel-client-session::rudel-end): Check
-       `next-method-p' before calling the next method
-
-2009-07-13  Jan Moringen  <address@hidden>
-
-       * obby/rudel-obby.el (rudel-obby-backend::rudel-connect): only
-       start the network process after everything is ready; wait for the
-       connection state machine to reach a success or error state
-       (rudel-obby-backend::rudel-host): cosmetic changes
-       (class rudel-obby-user): cosmetic changes
-       * rudel.el (rudel-join-session): reversed order of creation for
-       session and connection; do not catch errors to give error messages
-       a chance
-
-       * jupiter/jupiter-insert.el (jupiter-insert::jupiter-transform):
-       cosmetic changes
-       (whole file): whitespace fixes
-
-       * rudel.el (rudel-session::rudel-find-user): added documentation
-       string; cosmetic changes
-       (rudel-session::rudel-find-document): added documentation string;
-       cosmetic changes
-       (whole file): whitespace fixes
-
-2009-07-12  Jan Moringen  <address@hidden>
-
-       * rudel-speedbar.el (eieio-speedbar-object-buttonname): use
-       `rudel-unique-name' instead of `object-name-string'
-
-       * obby/rudel-obby-state.el (rudel-enter): return nil
-
-       * obby/rudel-obby-client.el
-       (rudel-obby-client-state-joining::rudel-enter): return nil
-       (rudel-obby-client-state-join-failed::rudel-enter): return nil
-       (rudel-obby-client-state-session-synching::rudel-enter): return
-       nil
-       (rudel-obby-client-state-session-synching::object-print): new
-       method; add number of remaining items to string representation
-       (rudel-obby-client-state-subscribing::rudel-enter): nil
-       (rudel-obby-client-state-document-synching::rudel-enter): nil
-       (rudel-obby-client-state-document-synching::object-print): new
-       method; add number of remaining bytes to string representation
-
-2009-07-11  Jan Moringen  <address@hidden>
-
-       * obby/rudel-obby-util.el (with-parsed-arguments): added debug
-       declaration
-       (whole file): whitespace fixes
-       * rudel-util.el (rudel-assemble-line-fragments): added debug
-       declaration
-       (rudel-loop-lines): added debug declaration
-       (rudel-loop-chunks): fixed documentation string; added debug
-       declaration
-
-       * rudel-state-machine.el (rudel-no-start-state): new error symbol
-       (rudel-state-machine::initialize-instance): try hard to find a
-       suitable start sate; call `rudel-switch' instead of just
-       `rudel-enter'
-       (rudel-state-machine::rudel-switch): always return the new current
-       state; accept successor state from `rudel-enter'
-       (rudel-state-machine::object-print): new method; add current state
-       of state machine to string representation
-       (rudel-state-machine::rudel-state-wait): whitespace fixes
-
-2009-07-07  Jan Moringen  <address@hidden>
-
-       * obby/rudel-obby.el (class rudel-obby-backend): better
-       documentation string
-       (rudel-obby-backend::rudel-ask-connect-info): added documentation
-       string
-       (rudel-obby-backend::rudel-connect): added documentation string
-       (rudel-obby-backend::rudel-ask-host-info): added documentation
-       string
-       (rudel-obby-backend::rudel-host): added documentation string
-       (rudel-obby-backend::rudel-make-document): added documentation
-       string
-       (rudel-obby-send): cosmetic changes
-       (whole file): whitespace fixes
-
-2009-07-05  Jan Moringen  <address@hidden>
-
-       * INSTALL (REQUIREMENTS): added Emacs itself and GNUTls
-
-       * rudel-tls.el (rudel-tls-start-tls): added a message
-       (rudel-tls-wait-handshake): switch to filter
-       `rudel-tls-established' instead of restoring the original filter
-       (rudel-tls-established): new function; filters GNUTls messages in
-       encrypted connections
-       (whole file): whitespace fixes
-
-2009-07-04  Jan Moringen  <address@hidden>
-
-       * README (INTRODUCTION): extended a bit
-       (JOINING A SESSION): added prompt/input example and an explanation
-       of encryption issues in the obby backend
-       (KNOWN BUGS): new section; no known bugs yet, though
-
-2009-06-17  Jan Moringen  <address@hidden>
-
-       * obby/rudel-obby-client.el (require rudel-state-machine): the
-       connection now is a state machine
-       (require rudel-obby-errors): used when analyzing login failures
-       (require rudel-obby-state): useful base classes for states
-       (rudel-obby-client-state-new): new class; initial state of new
-       connections
-       (rudel-obby-client-state-encryption-negotiate): new class;
-       first encryption state
-       (rudel-obby-client-state-encryption-start): new class; second
-       encryption state
-       (rudel-obby-client-state-joining): new class
-       (rudel-obby-client-state-join-failed): new class; entered after
-       failed login attempt
-       (rudel-obby-client-state idle): new class; default state of
-       established connections
-       (rudel-obby-client-state-session-synching): new class;
-       synchronizing session state to client
-       (rudel-obby-client-state-subscribing): new class; first state of
-       document subscription
-       (rudel-obby-client-state-document-synching): new class;
-       synchronizing document state to client
-       (rudel-obby-client-connection-states): new variable; alist of
-       name symbols and associated state classes
-       (rudel-obby-connection::initialize-instance): register states
-       (rudel-obby-connection::rudel-register-state): new method; set
-       connection slot of state to its connection
-       (rudel-obby-connection::rudel-add-context): cleanup
-       (rudel-obby-connection::rudel-message): dispatch message using
-       `rudel-accept'
-       (rudel-obby-connection::rudel-subscribe-to): initiate subscription
-       by switching to state 'subscribing'
-
-       * obby/rudel-obby-state.el (rudel-obby-document-handler): new
-       class; mixin class that provides handling of obby 'document'
-       messages
-
-       * rudel-state-machine.el
-       (rudel-state-machine::initialize-instance): find start state in
-       slots and switch into it
-       (while-file): whitespace fixes
-
-2009-06-15  Jan Moringen  <address@hidden>
-
-       * www/index.html (section download): fixed link to download area
-       (whole file): whitespace cleanup
-
-       * obby/rudel-obby-state.el (new file): finite state machine states
-       for the rudel backend
-       * obby/Project.ede (target rudel/obby): added rudel-obby-state.el
-       * obby/Makefile (target obby_LISP): added rudel-obby-state.el
-
-       * rudel-util.el (require rudel-errors): required for dispatch
-       errors
-       (symbol rudel-dispatch-error): new condition symbol for dispatch
-       errors
-       (rudel-dispatch): new function; dispatch to method based on method
-       name
-       (whole file): whitespace fixes
-
-2009-06-14  Jan Moringen  <address@hidden>
-
-       * rudel-mode.el (global-rudel-minor-mode): removed; the variable
-       is created by `define-minor-mode'
-       (minor-mode-alist): managed by `define-minor-mode'
-
-       * rudel-mode.el (require easy-mmode): used to define global rudel
-       minor mode
-       (rudel-minor-keymap): cosmetic changes
-       (global-rudel-minor-mode): use `define-minor-mode' to define the
-       mode
-       (whole file): whitespace cleanup
-
-       * rudel-telepathy.el (whole file): moved to
-       telepathy/rudel-telepathy.el
-       * telepathy/rudel-telepathy.el (whole file): moved from
-       rudel-telepathy.el
-
-       * obby/rudel-obby-server.el (whole file): whitespace cleanup
-       * obby/rudel-obby-client.el (require rudel-obby): removed;
-       unnecessary
-       (rudel-obby-connection::initialize-instance): use &rest for `slots'
-       argument; cosmetic changes
-       (rudel-obby-connection::rudel-change-color-): use own `rudel-send'
-       method instead of the socket's
-       (rudel-obby-connection::rudel-subscribe-to): cosmetic changes
-       (rudel-obby-connection::rudel-unsubscribe-from): cosmetic changes
-       (rudel-obby-connection::rudel-local-operation): cosmetic changes
-       (whole file): whitespace cleanup
-
-2009-06-13  Jan Moringen  <address@hidden>
-
-       * rudel-errors.el (new file): error data
-       * rudel-state-machine.el (new file): a simple finite state machine
-       implementation
-       * Project.ede (target rudel): added rudel-errors.el and
-       rudel-state-machine.el
-       * Makefile (target rudel_LISP): added rudel-errors.el and
-       rudel-state-machine.el
-
-2009-06-12  Jan Moringen  <address@hidden>
-
-       * obby/rudel-obby-server.el (require rudel-obby-errors): now
-       required
-       (rudel-obby-client::rudel-obby/net6_client_login): check username
-       and color before adding the client
-       (rudel-obby-server::rudel-check-username-and-color): new method;
-       make sure username and color are valid and there are no duplicates
-       * obby/rudel-obby-errors.el (new file): error data for the obby
-       backend
-       * obby/Project.ede (rudel/obby): added rudel-obby-errors.el
-       * obby/Makefile (obby_LISP): added rudel-obby-errors.el
-
-       * rudel.el (rudel-user::rudel-color): added accessor `rudel-color'
-
-       * obby/rudel-obby-server.el (require cl): required
-
-       * obby/rudel-obby-server.el
-       (rudel-obby-client::rudel-obby/net6_client_login): send suffices
-       of synchronized documents
-
-2009-06-11  Jan Moringen  <address@hidden>
-
-       * obby/rudel-obby-server.el
-       (rudel-obby-client::rudel-obby/obby_document_create): send
-       document/rename message to client when the document suffix changes
-
-       * obby/rudel-obby-server.el
-       (rudel-obby-client::rudel-obby/net6_client_login): use
-       `with-parsed-arguments'
-       (rudel-obby-client::rudel-obby/obby_user_colour): use
-       `with-parsed-arguments'
-       (rudel-obby-client::rudel-obby/obby_document_create): use
-       `with-parsed-arguments'
-       (rudel-obby-client::rudel-obby/obby_document): use
-       `with-parsed-arguments'
-       (rudel-obby-client::rudel-obby/obby_document/subscribe): use
-       `with-parsed-arguments'
-       (rudel-obby-client::rudel-obby/obby_document/unsubscribe): use
-       `with-parsed-arguments'
-       (rudel-obby-client::rudel-obby/obby_document/record): use
-       `with-parsed-arguments'
-       (rudel-obby-client::rudel-obby/obby_document/record/ins): use
-       `with-parsed-arguments'
-       (rudel-obby-client::rudel-obby/obby_document/record/del): use
-       `with-parsed-arguments'
-
-       * obby/rudel-obby-server.el (header): fixed version
-
-2009-06-10  Jan Moringen  <address@hidden>
-
-       * obby/rudel-obby-client.el
-       (rudel-obby-connection::rudel-local-operation): fixed wording in
-       comment
-
-       * www/images/development.png (whole file): changed size 48x48 ->
-       64x64
-       * www/images/development.svg (whole file): changed size 48x48 ->
-       64x64
-       * www/images/download.png (whole file): changed size 48x48 ->
-       64x64
-       * www/images/download.svg (whole file): changed size 48x48 ->
-       64x64
-       * www/images/info.png (whole file): changed size 48x48 -> 64x64
-       * www/images/info.svg (whole file): changed size 48x48 -> 64x64
-
-       * index.html (section introduction): wording fixes; link to Gobby
-       (whole file): removed external link class for sourceforge links
-       (section download): added link to INSTALL file in svn code browser
-       (section footer): fixed copyright
-
-       * compatibility.html (section footer): fixed copyright
-
-2009-06-09  Jan Moringen  <address@hidden>
-
-       * INSTALL (section REQUIREMENTS): removed ERT which is not
-       currently used
-       (section INSTALL): some wording and file name fixes
-       (section COMPILING): precise make command
-
-       * www/index.html (section development): fixed mailing list and
-       issue tracker links; removed email address
-
-       * www/compatibility.html (head): fixed charset
-       (section semantic): added missing <p> tag
-
-       * www/compatibility.html (new file): compatibility information
-       * www/index.html (new file): start page
-       * www/style.css (new file): stylesheet
-       * www/images/development.png (new file): development icon
-       * www/images/development.svg (new file): development icon
-       * www/images/download.png (new file): download icon
-       * www/images/download.svg (new file): download icon
-       * www/images/email-link.png (new file): icon for email links
-       * www/images/external-link.png (new file): icon for external links
-       * www/images/info.png (new file): info icon
-       * www/images/info.svg (new file): info icon
-       * www/images/screenshot.png (new file): screenshot for the start
-       page
-
-       * obby/rudel-obby-serverl.el
-       (rudel-obby-client::rudel-obby/obby_document_create): find unique
-       suffix for the new document; send suffix to clients
-
-       * obby/rudel-obby.el (header): fixed license text
-       * obby/rudel-obby-util.el (header): fixed license text
-       * obby/rudel-obby-server.el (header): fixed license text
-       * obby/rudel-obby-client.el (header): fixed license text
-       * jupiter/jupiter.el (header): fixed license text
-       * jupiter/jupiter-operation.el (header): fixed license text
-       * jupiter/jupiter-nop.el (header): fixed license text
-       * jupiter/jupiter-insert.el (header): fixed license text
-       * jupiter/jupiter-delete.el (header): fixed license text
-       * jupiter/jupiter-compound.el (header): fixed license text
-       * rudel.el (header): fixed license text
-       * rudel-util.el (header): fixed license text
-       * rudel-tls.el (header): fixed license text
-       * rudel-telepathy.e (header): fixed license text
-       * rudel-speedbar.el (header): fixed license text
-       * rudel-overlay.el (header): fixed license text
-       * rudel-operators.el (header): fixed license text
-       * rudel-operations.el (header): fixed license text
-       * rudel-mode.el (header): fixed license text
-       * rudel-interactive.el (header): fixed license text
-       * rudel-compat.el (header): fixed license text
-
-       * obby/rudel-obby-util.el (require cl): now required
-       (generic rudel-obby-char->byte): new generic; char positions ->
-       byte positions
-       (jupiter-insert::rudel-obby-char->byte): new method; char
-       positions -> byte positions
-       (jupiter-delete::rudel-obby-char->byte): new method; char
-       positions -> byte positions
-       (jupiter-compound::rudel-obby-char->byte): new method; char
-       positions -> byte positions
-       (jupiter-nop::rudel-obby-char->byte): new method; char positions
-       -> byte positions
-       (generic rudel-obby-byte->char): new generic; byte positions ->
-       char positions
-       (jupiter-insert::rudel-obby-byte->char): new method; byte
-       positions -> char positions
-       (jupiter-delete::rudel-obby-byte->char): new method; byte
-       positions -> char positions
-       (jupiter-compound::rudel-obby-byte->char): new method; byte
-       positions -> char positions
-       (jupiter-nop::rudel-obby-byte->char): new method; byte positions
-       -> char positions
-       * obby/rudel-obby-client.el
-       (rudel-obby-connection::rudel-local-operation): call
-       `rudel-obby-char->byte' before processing
-       (rudel-obby-connection::rudel-remote-operation): call
-       `rudel-obby-byte->char' before processing
-       * rudel.el (rudel-buffer-change-workaround-data): new variable;
-       holds change data for later use
-       (rudel-document::rudel-attach-to-buffer): add
-       `rudel-buffer-change-workaround' to 'before-change-functions'
-       (rudel-document::rudel-detach-from-buffer): remove
-       `rudel-buffer-change-workaround' from 'before-change-functions'
-       (rudel-buffer-change-workaround): new function; stores change data
-       for later use
-
-2009-06-07  Jan Moringen  <address@hidden>
-
-       * obby/rudel-obby-client.el
-       (rudel-obby-connection::rudel-obby/net6_client_join): use
-       `with-parsed-arguments'
-       (rudel-obby-connection::rudel-obby/net6_client_part): use
-       `with-parsed-arguments'
-       (rudel-obby-connection::rudel-obby/obby_welcome): use
-       `with-parsed-arguments'
-       (rudel-obby-connection::rudel-obby/obby_sync_init): use
-       `with-parsed-arguments'
-       (rudel-obby-connection::rudel-obby/obby_sync_usertable_user): use
-       `with-parsed-arguments'
-       (rudel-obby-connection::rudel-obby/obby_user_colour): use
-       `with-parsed-arguments'
-       (rudel-obby-connection::rudel-obby/obby_sync_doclist_document):
-       use `with-parsed-arguments'
-       (rudel-obby-connection::rudel-obby/obby_document_create): use
-       `with-parsed-arguments'
-       (rudel-obby-connection::rudel-obby/obby_document_remove): use
-       `with-parsed-arguments'
-       (rudel-obby-connection::rudel-obby/obby_document): use
-       `with-parsed-arguments'; cleanup
-       (rudel-obby-connection::rudel-obby/obby_document/rename): use
-       `with-parsed-arguments'
-       (rudel-obby-connection::rudel-obby/obby_document/subscribe): use
-       `with-parsed-arguments'
-       (rudel-obby-connection::rudel-obby/obby_document/unsubscribe): use
-       `with-parsed-arguments'
-       (rudel-obby-connection::rudel-obby/obby_document/sync_chunk): use
-       `with-parsed-arguments'
-       (rudel-obby-connection::rudel-obby/obby_document/record): use
-       `with-parsed-arguments'
-       (rudel-obby-connection::rudel-obby/obby_document/record/ins): use
-       `with-parsed-arguments'
-       (rudel-obby-connection::rudel-obby/obby_document/record/del): use
-       `with-parsed-arguments'
-
-2009-06-06  Jan Moringen  <address@hidden>
-
-       * obby/rudel-obby-client.el
-       (rudel-obby-connection::rudel-obby/net6_client_part): use `eql',
-       not `=' when calling `rudel-find-user' since the client id can be
-       nil
-
-       * obby/rudel-obby-util.el (require jupiter): silence byte compiler
-
-       * obby/rudel-obby-util.el (rudel-obby-dispatch): moved inside file
-       (with-parsed-arguments): new macro; executed forms with variables
-       bound to parsed arguments
-
-2009-06-04  Jan Moringen  <address@hidden>
-
-       * rudel.el (require rudel-interactive): interactive functions use
-       `rudel-read-backend' and `rudel-read-document'
-
-       * rudel.el (rudel-buffer-document): mark as permanent local
-       variable to prevent deletion in the event of a major-mode change
-       (rudel-document::rudel-attach-to-buffer): add (buffer-locally)
-       `rudel-handle-major-mode-change' to 'change-major-mode-hook' such
-       that it can repair damage caused by major-mode changes
-       (rudel-document::rudel-detach-from-buffer): remove
-       `rudel-handle-major-mode-change' from 'change-major-mode-hook'
-       (rudel-mode-changed-buffers) new variable; temporarily stores
-       buffers that underwent major-mode changes
-       (rudel-handle-major-mode-change): new function; schedules buffers
-       for repair after major-mode changes
-       (rudel-after-major-mode-change): new function; repairs buffer
-       objects after major-mode changes
-
-2009-06-03  Jan Moringen  <address@hidden>
-
-       * rudel.el (rudel-buffer-has-document-p): use `buffer-local-value'
-       (rudel-buffer-document): use `buffer-local-value'
-       (rudel-set-buffer-document): added documentation string
-
-2009-06-02  Jan Moringen  <address@hidden>
-
-       * rudel.el (rudel-handle-buffer-change): There are three cases
-       now: insert, delete and arbitrary changes; arbitrary changes
-       generate a delete and insert operation
-
-       * rudel-mode.el (rudel-minor-keymap): added some comments
-       (global-rudel-minor-mode): extended documentation string; cleaned
-       up code; added comments
-
-       * obby/rudel-obby-client.el
-       (rudel-obby-connection::rudel-obby/net6_client_part): fixed typo
-       in variable name client-id-numeric
-
-2009-05-28  Jan Moringen  <address@hidden>
-
-       * obby/rudel-obby-util.el (header): Fixed version (1.0 -> 0.1)
-
-       * obby/rudel-obby-client.el (header): Fixed version (1.0 -> 0.1)
-       (rudel-obby-connection::rudel-obby/obby_document/record/split):
-       introduced temporary variable
-
-2009-??-??  Jan Moringen  <address@hidden>
-
-       * rudel.el (rudel-buffer-document): removed; replaced by
-       rudel-buffer-documents hash-table
-       (rudel-buffer-documents): new variable; a hash-table, which
-       associates documents to buffers
-       (rudel-buffer-has-document-p):
-       (rudel-buffer-document):
-       (rudel-set-buffer-document):
-
-2009-03-16  Jan Moringen  <address@hidden>
-
-       * obby/rudel-obby-client.el
-       (rudel-obby-connection::rudel-obby/net6_client_part): do not crash
-       if the client id cannot be found
-
-       * obby/rudel-obby.el (rudel-obby-backend::rudel-make-document):
-       specify value 1 for slot suffix
-       (rudel-obby-document::suffix): new slot; contains the suffix
-       number of the document
-       (rudel-obby-document::rudel-unique-name): new method; return
-       unique name based on document name and suffix
-       * obby/rudel-obby-client.el
-       (rudel-obby-connection::rudel-obby/obby_sync_doclist_document): do
-       not ignore the suffix when creating the document object
-       (rudel-obby-connection::rudel-obby/obby_document_create): do not
-       ignore the suffix when creating the document object
-       (rudel-obby-connection::rudel-obby/obby_document/rename): change
-       document name and suffix as requested
-       * rudel.el (rudel-document::rudel-unique-name): new method;
-       returns a unique name for the document
-       (rudel-document::rudel-suggested-buffer-name): new method; returns
-       a suggested name for the buffer attached to the document
-       (rudel-subscribe): use `rudel-suggested-buffer-name' instead of
-       the object name
-       * rudel-interactive.el (rudel-read-document): use the unique names
-       of the documents instead of the object names
-
-2009-02-27  Jan Moringen  <address@hidden>
-
-       * rudel.el (rudel-document::rudel-attach-to-buffer): add hook to
-       detach document from the buffer when the buffer is killed
-       (rudel-document::rudel-detach-from-buffer): remove unpublish
-       function kill buffer hook
-
-2009-02-23  Jan Moringen  <address@hidden>
-
-       * rudel.el (rudel-document): minor cleanup
-       (rudel-document::rudel-attach-to-buffer): stylistic changes
-       (rudel-document::rudel-detach-from-buffer): fixed argument order in
-       call to `rudel-set-buffer-document'
-
-       * obby/rudel-obby-server.el
-       (rudel-obby-server::rudel-remove-client): Make sure there is a
-       user object before setting the status to offline
-
-       * obby/rudel-obby-client.el (rudel-obby/net6_encryption_failed):
-       only fail if encryption has been requested in the first
-       place. otherwise, just carry on
-
-       * rudel.el (rudel-document::rudel-attach-to-buffer): use
-       `rudel-set-buffer-document'
-       (rudel-document::rudel-detach-from-buffer): use
-       `rudel-set-buffer-document'
-       (rudel-buffer-has-document-p): new function; test whether a buffer
-       has an associated document object
-       (rudel-buffer-document): new function; returns associated document
-       object of a buffer
-       (rudel-set-buffer-document): new functions; sets associated
-       document object of a buffer
-       (rudel-handle-buffer-change): use `rudel-buffer-has-document-p'
-       (rudel-publish-buffer): use `rudel-buffer-has-document-p'
-       (rudel-unpublish-buffer): use `rudel-buffer-has-document-p' and
-       `rudel-buffer-document'
-       * rudel-mode.el (rudel-minor-keymap): use
-       `rudel-buffer-has-document-p'
-
-       * obby/rudel-obby-client.el (rudel-obby/obby_document/rename):
-       new method; dummy implementation
-
-       * obby/rudel-obby-client.el (rudel-obby/net6_client_join):
-       stylistic change
-
-2009-02-21  Jan Moringen  <address@hidden>
-
-       * obby/rudel-obby-util.el (generic rudel-operation->message): new
-       generic function; serializes an operation
-       (jupiter-insert::rudel-operation->message): new method
-       (jupiter-delete::rudel-operation->message): new method
-       (jupiter-compound::rudel-operation->message): new method
-       (jupiter-nop::rudel-operation->message): new method
-       (rudel-message->operation): new function; deserializes an
-       operation from a received message
-       * obby/rudel-obby-client.el
-       (rudel-obby-connection::rudel-local-insert): do not construct
-       message string; use `rudel-operation->message'
-       (rudel-obby-connection::rudel-local-delete): do not construct
-       message string; use `rudel-operation->message'
-       (rudel-obby-connection::rudel-local-operation): new method;
-       handles operation objects that represent local operations
-       (rudel-obby-connection::rudel-remote-operation): new method;
-       handles operation objects that represent remote operations
-       (rudel-obby-connection::rudel-obby/obby_document/record/ins):
-       construct operation name correctly; do not call jupiter context to
-       transform operation
-       (rudel-obby-connection::rudel-obby/obby_document/record/del):
-       construct operation name correctly; do not call jupiter context to
-       transform operation
-       (rudel-obby-connection::rudel-obby/obby_document/record/split):
-       new method; handles split operation messages
-       (rudel-obby-connection::rudel-obby/obby_document/record/noop): new
-       method; handles nop messages
-
-2009-02-12  Jan Moringen  <address@hidden>
-
-       * obby/rudel-obby.el (rudel-obby-backend::rudel-ask-connect-info):
-       ask whether to encrypt the connection
-       (rudel-obby-backend::rudel-connect): create connection object
-       capable of StartTLS encryption when encryption was requested
-       * obby/rudel-obby-client.el
-       (rudel-obby-connection::rudel-obby/net6_encryption): do not fail
-       when the server requests encryption
-       (rudel-obby-connection::rudel-obby/net6_encryption_begin): start
-       TLS encryption for the connection
-       (rudel-obby-connection::rudel-obby/net6_encryption_failed): new
-       method; stub
-       * rudel-tls.el (new file): StartTLS encryption for Rudel
-       * Project.ede ("rudel"): added rudel-tls.el
-       * Makefile (rudel_LISP): added rudel-tls.el
-
-2009-02-06  Jan Moringen  <address@hidden>
-
-       * rudel-compat.el (header): fixed email address, keywords, legal
-       notice and file commentary
-
-2009-02-05  Jan Moringen  <address@hidden>
-
-       * obby/rudel-obby.el (rudel-compat): require rudel-compat for
-       `read-color'
-       * rudel.el (rudel-compat): require rudel-compat for `read-color'
-       * rudel-interactive.el (rudel-compat): require rudel-compat for
-       `read-color'
-       * rudel-compat.el (new file): compatibility code
-       * Project.ede (rudel): added rudel-compat.el
-       * Makefile (rudel_LISP): regenerated: added rudel-compat.el
-
-2009-02-04  Jan Moringen  <address@hidden>
-
-       * obby/rudel-obby.el (require rudel)
-       * obby/rudel-obby-util.el (require rudel)
-       * obby/rudel-obby-client.el (require rudel-obby): make compilation
-       succeed
-
-       * rudel.el (include eieio-speedbar): I need it for now; I should
-       get rid of it later
-
-       * INSTALL (REQUIREMENTS): added note that CVS version of cedet is
-       required
-       (INSTALLING): added subdirectories jupiter and obby in load path
-       listing; fixed name of autoload file
-
-2009-02-02  Jan Moringen  <address@hidden>
-
-       * obby/rudel-obby.el (rudel-obby-backend::rudel-ask-connect-info)
-       (rudel-obby-backend::rudel-host, rudel-obby-replace-in-string)
-       * obby/rudel-obby-util.el (rudel-obby-dispatch)
-       * obby/rudel-obby-server.el 
(rudel-obby-client::rudel-obby/obby_document)
-       (rudel-obby-server::rudel-broadcast, rudel-obby-server::rudel-make-user)
-       * obby/rudel-obby-client.el 
(rudel-obby-connection::rudel-obby/net6_client_join)
-       (rudel-obby-connection::rudel-obby/obby_document)
-       * jupiter/jupiter-operation.el (jupiter-operation)
-       * rudel.el (rudel-backend, rudel-session, rudel-server-session)
-       (rudel-connection, rudel-document)
-       (rudel-document::rudel-attach-to-buffer)
-       (rudel-document::rudel-detach-from-buffer)
-       (rudel-document::rudel-insert, rudel-document::rudel-delete)
-       (rudel-change-color)
-       * rudel-util.el (rudel-assemble-line-fragments, rudel-loop-lines)
-       * rudel-overlay.el (rudel-make-author-overlay)
-       * rudel-interactive.el (rudel-read-backend, rudel-read-user-color)
-       (rudel-read-user, rudel-read-document): replaced 't by t
-
-       * rudel-operators.el (rudel-overlay-operators::rudel-insert):
-       Fixed computation of insertion offset when appending to the end of
-       the buffer string
-
-       * rudel.el (rudel-document::rudel-chunks): fixed invalid access to
-       last chunk for empty buffer
-
-       * rudel.el (rudel-document::rudel-attach-to-buffer): fixed
-       incorrect slot reference
-
-       * obby/rudel-obby-server.el
-       (rudel-obby-client::rudel-obby/obby_document/subscribe): minor
-       rearrangement of expressions
-       (rudel-obby-client::rudel-obby/obby_document/unsubscribe): minor
-       rearrangement of expressions
-
-       * obby/rudel-obby-server.el
-       (rudel-obby-client::rudel-obby/obby_document/record/ins): added
-       documentation string
-       (rudel-obby-client::rudel-obby/obby_document/record/del): added
-       documentation string
-       (rudel-obby-server): cosmetic change
-
-       * jupiter/jupiter.el (jupiter-context::jupiter-remote-operation):
-       improved documentation string; cosmetic changes
-
-       * jupiter/jupiter-insert.el (jupiter-insert::jupiter-transform):
-       improved some comments
-
-       * rudel.el (rudel-document::rudel-attach-to-buffer): renamed
-       some variables; added documentation string
-       (rudel-document::rudel-insert): improved documentation string
-       (rudel-document::rudel-chunks): do not create chunks when buffer
-       string is empty; improved comments
-       (rudel-choose-backend): compare number using `=' not `eq'
-
-       * obby/rudel-obby-server.el
-       (rudel-obby-client::rudel-obby/obby_document/record/ins): use
-       `rudel-remote-operation' instead of `rudel-remote-insert'
-       (rudel-obby-client::rudel-obby/obby_document/record/del): use
-       `rudel-remote-operation' instead of `rudel-remote-delete'
-       * obby/rudel-obby-client.el (include rudel-operations): for
-       rudel-insert-op and rudel-delete-op
-       (rudel-obby-connection::rudel-obby/obby_document/sync_chunk): use
-       `rudel-remote-operation' with rudel-insert-op to insert chunks
-       (rudel-obby-connection::rudel-obby/obby_document/record/ins): use
-       `rudel-remote-operation' instead of `rudel-remote-insert'
-       (rudel-obby-connection::rudel-obby/obby_document/record/del): use
-       `rudel-remote-operation' instead of `rudel-remote-delete'
-       * jupiter/jupiter-operation.el (include rudel-operations): for
-       rudel-operation
-       (jupiter-operation): derived from rudel-operation
-       (jupiter-operation::jupiter-apply): removed; replaced by generic
-       `rudel-apply'
-       * jupiter/jupiter-nop.el (jupiter-nop::jupiter-apply): removed;
-       replaced by `rudel-apply'
-       (jupiter-nop::rudel-apply): new method; implements generic
-       `rudel-apply'
-       * jupiter/jupiter-insert.el (include rudel-operations): for
-       jupiter-insert-op
-       (jupiter-insert): derived from jupiter-insert-op
-       (jupiter-insert::jupiter-apply): removed; inherited from
-       jupiter-insert-op
-       (jupiter-insert::slot-missing): removed; inherited from
-       jupiter-insert-op
-       * jupiter/jupiter-delete.el (include rudel-operations): for
-       jupiter-delete-op
-       (jupiter-delete): derived from jupiter-delete-op
-       (jupiter-delete::jupiter-apply): removed; inherited from
-       jupiter-delete-op
-       (jupiter-delete::slot-missing): removed; inherited from
-       jupiter-delete-op
-       * jupiter/jupiter-compound.el (jupiter-compound::jupiter-apply):
-       removed; replaced by `rudel-apply'
-       (jupiter-compound::rudel-apply): new method; implements generic
-       `rudel-apply'
-       * rudel.el (include rudel-operations): everything is represented
-       in terms of operations
-       (include rudel-operators): operations apply changes to objects
-       through operators
-       (rudel-document::rudel-insert): new method; performs insert
-       operation
-       (rudel-document::rudel-delete): new method; performs delete
-       operation
-       (rudel-document::rudel-local-insert): removed; document does not
-       deal with aspects other than the actual insert and delete
-       (rudel-document::rudel-local-delete): removed; document does not
-       deal with aspects other than the actual insert and delete
-       (rudel-document::rudel-remote-insert): removed; document does not
-       deal with aspects other than the actual insert and delete
-       (rudel-document::rudel-remote-delete): removed; document does not
-       deal with aspects other than the actual insert and delete
-       (rudel-document::rudel-local-operation): new method; apply
-       operation using overlay and connection operators
-       (rudel-document::rudel-remote-operation): new method; apply
-       operation using document and overlay operators
-       (rudel-handle-buffer-change): realize buffer changes using
-       operations
-       * rudel-operators.el (new file): collections of operations on
-       Rudel data types
-       * rudel-operations.el (new file): operation classes
-
-2009-02-01  Jan Moringen  <address@hidden>
-
-       * jupiter/jupiter-insert.el (jupiter-insert::jupiter-transform):
-       handle jupiter-nop
-
-       * jupiter/jupiter-delete.el (jupiter-delete::jupiter-transform):
-       in inner cond, use matching pattern but empty body for
-       no-operation cases; in outer cond, handle jupiter-nop
-
-       * jupiter/jupiter-compound.el (jupiter-compound): now derived from
-       jupiter-operation; should have been right from the start
-
-2009-01-31  Jan Moringen  <address@hidden>
-
-       * rudel.el (rudel-default-username): Default name used when
-       prompting for user name; required by rudel-interactive
-
-       * rudel-interactive.el (rudel-read-backend): fixed typo
-
-2009-01-30  Jan Moringen  <address@hidden>
-
-       * jupiter/jupiter-insert.el (jupiter-insert::jupiter-transform):
-       fixed two offset calculations
-       * jupiter/jupiter-delete.el (jupiter-delete::jupiter-transform):
-       fixed offset calculation
-
-       * rudel.el (rudel-backend::rudel-ask-connect-info): changed from
-       method to generic
-       (rudel-backend::rudel-connect): changed from method to generic
-       (rudel-backend::rudel-ask-host-info): changed from method to
-       generic
-       (rudel-backend::rudel-host): changed from method to generic
-       (rudel-backend::rudel-make-document): changed from method to
-       generic
-       (rudel-session::rudel-disconnect): changed from method to generic
-       (rudel-session::rudel-change-color-): changed from method to
-       generic
-       (rudel-session::rudel-publish): changed from method to generic
-       (rudel-session::rudel-subscribe-to): changed from method to
-       generic
-       (rudel-session::rudel-unsubscribe-from): changed from method to
-       generic
-       (rudel-session::rudel-local-insert): changed from method to
-       generic
-       (rudel-session::rudel-local-delete): changed from method to
-       generic
-       (rudel-session::rudel-remote-insert): changed from method to
-       generic
-       (rudel-session::rudel-remote-delete): changed from method to
-       generic
-
-2009-01-28  Jan Moringen  <address@hidden>
-
-       * rudel-overlay.el (header): fixed version
-       (whole file): cosmetic changes
-       (rudel-author-overlay-p): added documentation string
-       (rudel-author-overlays): added documentation string
-
-       * rudel-mode.el (rudel-minor-keymap): cosmetic changes
-
-       * rudel-mode.el (rudel-minor-keymap): Separated session
-       participation and hosting items
-
-       * obby/rudel-obby.el (rudel-obby-long-message-threshold): Added
-       documentation string
-       (rudel-obby-long-message-chunk-size): Added documentation string
-       (rudel-obby-backend::rudel-connect): Do not set process object;
-       this is done in the `initialize-instance' method of the base class
-       (rudel-obby-format-color): retrieve color components with
-       `color-values'
-
-       * obby/rudel-obby-client.el
-       (rudel-obby-connection::rudel-remove-context): improved
-       documentation string
-       (rudel-obby-connection::rudel-publish): added a comment
-       (rudel-obby-connection::rudel-subscribe-to): added some comments;
-       cleaned up code
-       (rudel-obby-connection::rudel-unsubscribe-from): added a comment
-       (rudel-obby-connection::rudel-obby/net6_ping): added documentation
-       string
-       (rudel-obby-connection::rudel-obby/net6_encryption): added
-       documentation string
-       (rudel-obby-connection::rudel-obby/net6_login_failed): added
-       documentation string
-       (rudel-obby-connection::rudel-obby/net6_client_part): use `='
-       instead of `eq' to compare client ids; fixed documentation string;
-       improved comments
-       (rudel-obby-connection::rudel-obby/obby_user_colour): use `='
-       instead of `eq' to compare user ids
-       (rudel-obby-connection::rudel-obby/obby_document/sync_chunk): use
-       `=' instead of `eq' to compare user ids; use accessor
-       `user-id-numeric'
-
-       * obby/rudel-obby-util.el (rudel-obby-dispatch): new functions;
-       dispatches to class methods based on message name; handles errors
-       properly
-       * obby/rudel-obby-server.el (rudel-obby-client::rudel-message):
-       use `rudel-obby-dispatch' to dispatch message
-       (rudel-obby-client::rudel-obby/obby_document): use
-       `rudel-obby-dispatch' to dispatch message
-       (rudel-obby-client::rudel-obby/obby_document/record): use
-       `rudel-obby-dispatch' to dispatch message
-       * obby/rudel-obby-client.el
-       (rudel-obby-connection::rudel-message): use `rudel-obby-dispatch'
-       to dispatch message; moved to a different location
-       (rudel-obby-connection::rudel-obby/obby_document): use
-       `rudel-obby-dispatch' to dispatch message
-       (rudel-obby-connection::rudel-obby/obby_document/record): use
-       `rudel-obby-dispatch' to dispatch message
-
-       * obby/rudel-obby-util.el (generic rudel-message): made the method
-       a generic function and updated the documentation string
-
-2009-01-26  Jan Moringen  <address@hidden>
-
-       * obby/rudel-obby.el (rudel-obby-document::revision): removed; The
-       slot is no longer needed
-       * obby/rudel-obby-server.el (require jupiter): uses jupiter
-       algorithm
-       (rudel-obby-client::rudel-obby/obby_document_create): add a
-       jupiter context for the document
-       (rudel-obby-client::rudel-obby/obby_document/subscribe): add a
-       jupiter context for the document
-       (rudel-obby-client::rudel-obby/obby_document/unsubscribe): remove
-       the jupiter context associated to the document
-       (rudel-obby-client::rudel-obby/obby_document/record/ins):
-       transformed the operation before applying it to the buffer; use
-       the respective jupiter contexts of the receivers when sending the
-       operation
-       (rudel-obby-client::rudel-obby/obby_document/record/del):
-       transformed the operation before applying it to the buffer; use
-       the respective jupiter contexts of the receivers when sending the
-       operation
-       (rudel-obby-server::contexts): new slot; stores jupiter contexts
-       for pairs of clients and documents
-       (rudel-obby-server::initialize-instance): new method; store an
-       empty hash-table in the `contexts' slot
-       (rudel-obby-server::rudel-find-context): find the jupiter context
-       for a pair of a client and a document
-       (rudel-obby-server::rudel-add-context): add a jupiter context for
-       a pair of a client and a document
-       (rudel-obby-server::rudel-remove-context): remove the jupiter
-       context for a pair of a client and a document
-       (rudel-obby-context-key): return a list of client id and document
-       id
-       * obby/rudel-obby-client.el (require jupiter): uses jupiter
-       algorithm
-       (rudel-obby-connection::contexts): new slot; stores jupiter
-       contexts for documents
-       (rudel-obby-connection::initialize-instance): new method; store an
-       empty hash-table in the `contexts' slot
-       (rudel-obby-connection::rudel-find-context): new method; return
-       the jupiter context for a document
-       (rudel-obby-connection::rudel-add-context): new method; add a
-       jupiter context for a document
-       (rudel-obby-connection::rudel-remove-context): new method; remove
-       the jupiter context for a document
-       (rudel-obby-connection::rudel-publish): add a jupiter context for
-       the new document
-       (rudel-obby-connection::rudel-subscribe-to): add a jupiter context
-       for the new document
-       (rudel-obby-connection::rudel-unsubscribe-from): remove the
-       jupiter context associated to the document
-       (rudel-obby-connection::rudel-local-insert): use revision
-       information from the jupiter context instead of the document;
-       supply the operation to the jupiter context
-       (rudel-obby-connection::rudel-local-delete): use revision
-       information from the jupiter context instead of the document;
-       supply the operation to the jupiter context
-       (rudel-obby-connection::rudel-obby/obby_document/record/ins):
-       transform the operation using the jupiter context instead of using
-       it unmodified
-       (rudel-obby-connection::rudel-obby/obby_document/record/del):
-       transform the operation using the jupiter context instead of using
-       it unmodified
-
-2009-01-22  Jan Moringen  <address@hidden>
-
-       * obby/rudel-obby-client.el (rudel-obby-connection): removed
-       redundant slot `socket' (inherited from base class)
-
-2009-01-21  Jan Moringen  <address@hidden>
-
-       * rudel-interactive.el (rudel-read-user): added comments
-       (rudel-allocate-buffer-clear-existing): added documentation string
-       (rudel-allocate-buffer-make-unique): added documentation string
-
-2009-01-19  Jan Moringen  <address@hidden>
-
-       * rudel.el, rudel-util.el, rudel-telepathy.el, rudel-speedbar.el,
-       rudel-overlay.el, rudel-mode.el, jupiter/jupiter.el,
-       jupiter/jupiter-operation.el, jupiter/jupiter-nop.el,
-       jupiter/jupiter-insert.el, jupiter/jupiter-delete.el,
-       jupiter/jupiter-compound.el, obby/rudel-obby.el,
-       obby/rudel-obby-util.el, obby/rudel-obby-server.el,
-       obby/rudel-obby-client.el (header): changed email address
-       <address@hidden> ->
-       <address@hidden>
-
-       * rudel-interactive.el (header): added keywords to file header
-       comment
-
-       * jupiter/jupiter.el (new file): core Jupiter algorithm
-       * jupiter/jupiter-operation.el (new file): base class for Jupiter
-       operations
-       * jupiter/jupiter-insert.el (new file): insert operation for
-       Jupiter algorithm
-       * jupiter/jupiter-delete.el (new file): delete operation for
-       Jupiter algorithm
-       * jupiter/jupiter-nop.el (new file): no-operation for Jupiter
-       algorithm
-       * jupiter/jupiter-compound.el (new file): compound operation for
-       Jupiter algorithm
-
-2009-01-11  Jan Moringen  <address@hidden>
-
-       * obby/rudel-obby.el (rudel-obby-user::client-id): added rationale
-       for type (or null integer)
-       * obby/rudel-obby-client.el
-       (rudel-obby-connection::rudel-obby/net6_client_join): added
-       documentation string; cosmetic changes
-       (rudel-obby-connection::rudel-obby/net6_client_part): use accessor
-       `rudel-client-id' when searching for the user object; set
-       client-id to nil in the user object; added documentation string
-       (rudel-obby-connection::rudel-obby/obby_sync_usertable_user):
-       store parsed user-id and color in temporaries
-       (rudel-obby-connection::rudel-obby/obby_user_colour):store parsed
-       color in a temporary; use accessor `rudel-id' when finding the
-       user object
-
-       * obby/rudel-obby-client.el
-       (rudel-obby-connection::rudel-change-color-): new function;
-       implements changing the color
-
-       * obby/rudel-obby-util.el
-       (rudel-obby-socket-owner::rudel-receive): improved documentation
-       string
-
-2009-01-05  Jan Moringen  <address@hidden>
-
-       * INSTALL (REQUIREMENTS): proper list of requirements and sources
-       from which they can be obtained
-       (INSTALLING): initial version of installation instructions
-       (COMPLETING): some notes about compiling
-       * README (INTRODUCTION): short introduction
-       (GETTING STARTED): some notes about enabling Rudel, joining and
-       hosting sessions
-
-2009-01-04  Jan Moringen  <address@hidden>
-
-       * obby/rudel-obby.el (rudel-obby-long-message-threshold): new
-       variable; threshold for message size, above which messages are
-       sent in multiple chunks
-       (rudel-obby-long-message-chunk-size): Chunk size used, when
-       chunking long messages.
-       (rudel-obby-user::client-id): allow value nil; added accessor;
-       added documentation string
-       (rudel-obby-send): new function; handles low-level aspects of
-       sending obby protocol messages
-       * obby/rudel-obby-util.el: new file; contains helper
-       functionality, mainly the class `rudel-obby-socket-owner', which
-       handles sending and receiving message
-       * obby/rudel-obby-server.el (includes): replaced rudel-obby with
-       rudel-obby-util, since it contains `rudel-obby-socket-owner'
-       (class rudel-obby-client): added base class
-       `rudel-obby-socket-owner'
-       (rudel-obby-client::rudel-receive): deleted, the functionality is
-       provided by the base class `rudel-obby-socket-owner'
-       (rudel-obby-client::rudel-send): deleted, the functionality is
-       provided by the base class `rudel-obby-socket-owner'
-       (rudel-obby-client::rudel-message): new method; called by base
-       class when a message is received; dispatches to appropriate
-       handler method
-       (rudel-obby-client::rudel-obby/obby_user_colour): minor change in
-       documentation string
-       * obby/rudel-obby-client.el (includes): replaced rudel-obby with
-       rudel-obby-util, since it contains `rudel-obby-socket-owner'
-       (class rudel-obby-connection): added base class
-       `rudel-obby-socket-owner'
-       (rudel-obby-connection::rudel-disconnect): just call next method;
-       it does what this method formerly did
-       (rudel-obby-connection::rudel-close): new method; end the session,
-       when the connection is closed
-       (rudel-obby-connection::rudel-receive): deleted, the functionality
-       is provided by the base class `rudel-obby-socket-owner'
-       (rudel-obby-connection::rudel-send): deleted, the functionality is
-       provided by the base class `rudel-obby-socket-owner'
-       (rudel-obby-connection::rudel-message): new method; called by
-       base class when a message is received; dispatches to appropriate
-       handler method
-
-       * rudel.el (rudel-document::rudel-detach-from-buffer): do nothing,
-       if the document is not attached to any buffer
-
-       * obby/rudel-obby.el (rudel-obby-user): added missing accessor
-       `rudel-connected'
-
-       * obby/rudel-obby-server.el
-       (rudel-obby-client::rudel-obby/net6_client_login): transmit number
-       of synchronization items; transmit list of disconnected users
-
-       * obby/rudel-obby-server.el
-       (rudel-obby-client::rudel-obby/obby_document/record/ins):
-       broadcast only to clients, which are subscribed to the document;
-       send user id of author instead of client id
-       (rudel-obby-client::rudel-obby/obby_document/record/del):
-       broadcast only to clients, which are subscribed to the document;
-       send user id of author instead of client id
-       (rudel-obby-client::rudel-subscribed-clients-not-self): new
-       method; return a list of clients subscribed to a document
-       excluding the client itself.
-
-       * obby/rudel-obby-server.el (rudel-obby-server::next-client-id):
-       first id should be 1, not 0; fixed initform accordingly
-       (rudel-obby-server::next-user-id):
-       first id should be 1, not 0; fixed initform accordingly
-
-       * rudel.el (rudel-document::rudel-chunks): fixed void variable
-       `chunks-' -> `augmented-chunks'
-
-       * obby/rudel-obby-server.el
-       (rudel-obby-client::rudel-obby/obby_document/subscribe): send
-       individual buffer chunks with their respective authors instead of
-       one large string without author information
-       * rudel.el (rudel-document::rudel-chunks): new method; return a
-       list of buffer position ranges and the respective authors, that
-       wrote the text
-
-2009-01-03  Jan Moringen  <address@hidden>
-
-       * obby/rudel-obby.el (rudel-obby-backend::rudel-host): cleanup
-       * obby/rudel-obby-client.el
-       (rudel-obby-connection::rudel-local-insert): accept arguments
-       `position' and `data' instead of `from', `to' and `what'; since
-       position is zero-based, transmit it literally
-       (rudel-obby-connection::rudel-local-delete): instead of `from' and
-       `to' accept argument `position'; since position is
-       zero-based. transmit it literally
-       (rudel-obby-connection::rudel-obby/obby_document/record):
-       identified remaining arguments; dispatch actions to appropriate
-       methods; identify methods by interning their symbols
-       (rudel-obby-connection::rudel-obby/obby_document/record/ins): new
-       method; handle remote insert actions
-       (rudel-obby-connection::rudel-obby/obby_document/record/del): new
-       method; handle remote delete actions
-       * rudel.el (includes): include rudel-overlay
-       (rudel-document::rudel-detach-from-buffer): improved readability
-       (rudel-document::rudel-local-insert): instead of redundant
-       arguments `from', `to' and `what' accept only `position' and
-       `data'; update overlays
-       (rudel-document::rudel-local-delete): instead of redundant
-       arguments `from', `to' and `length' accept only `position' and
-       `length'; update overlays
-       (rudel-document::rudel-remote-insert): renamed arguments `from' ->
-       `position', `what' -> `data'; update overlays
-       (rudel-document::rudel-remote-delete): replaced arguments `from'
-       and `to' by `position'; update overlays
-       (rudel-handle-buffer-change): call rudel-local-{insert, delete}
-       with changed arguments
-
-2009-01-01  Jan Moringen  <address@hidden>
-
-       * rudel.el (rudel-session::rudel-unsubscribed-documents): new
-       method; returns documents, to which the user associated with the
-       session is not yet subscribed
-       (rudel-subscribe): when called interactively, use
-       `rudel-unsubscribed-documents' to offer only unsubscribed
-       documents in completing read
-
-       * rudel-interactive.el (rudel-read-user-name): new function; read
-       a user name; could be used to enforce certain constraints on the
-       name
-       (rudel-read-user-color): new function; read a user color; could be
-       used to enforce certain constraints on the color
-
-       * obby/rudel-obby.el (rudel-obby-backend::rudel-ask-host-info):
-       new method; ask user for port number
-       (rudel-obby-backend::rudel-host): new method; require obby server
-       component, make the network process and construct the server
-       * obby/rudel-obby-server.el (new file): initial revision of obby
-       server for rudel
-       * obby/rudel-obby-client.el (header section): added keyword and
-       x-rcs
-       (rudel-obby-connection::rudel-publish): new method; send document
-       to server
-       (rudel-obby-connection::rudel-unsubscribe-from): send unsubscribe
-       notification to server
-       (rudel-obby-connection::rudel-local-insert): cleanup
-       (rudel-obby-connection::rudel-local-delete): new method; send
-       delete record to server and increase local revision
-       (rudel-obby-connection::rudel-obby/obby_document/sync_chunk):
-       improved user locating code; do not complain, when the user is not
-       found
-       (rudel-obby-connection::rudel-obby/obby_document/record): removed
-       useless debug message
-       * rudel.el (class rudel-session): update documentation string
-       (class rudel-server-session): new class; base class for server
-       sessions
-       (rudel-choose-backend): fixed void-variable when called
-       interactively
-       (rudel-host-session): provided initial implementation, which uses
-       the selected backend to create a server
-       (rudel-subscribe): call `set-window-buffer' instead of
-       `show-buffer'
-
-       * obby/rudel-obby.el (header section): fixed history
-       (rudel-obby-version): new constant; holds version of the obby
-       backend
-       (rudel-obby-protocol-version): new constant; holds the obby
-       protocol version understood by the backend
-       (rudel-obby-document::rudel-both-ids): new method; useful when
-       locating documents by means of owner and document id
-
-       * rudel-mode.el (header section): added keywords
-
-       * rudel-interactive.el (header section): added file comment
-
-2008-12-30  Jan Moringen  <address@hidden>
-
-       * rudel.el (class rudel-session): converted to base class for
-       other session classes; removed slots `connection' and `self' which
-       are specific for client sessions
-       (rudel-session::rudel-end): empty now; derived classes do the work
-       (rudel-session::rudel-add-user): use `object-add-to-list'
-       (rudel-session::rudel-remove-user): use `object-remove-from-list'
-       (rudel-session::rudel-add-document): use `object-add-to-list'
-       (rudel-session::rudel-remove-document): use
-       `object-remove-from-list'
-       (class rudel-client-session): derived from `rudel-session';
-       additional slots `connection' and `self'
-       (rudel-client-session::rudel-end): detach buffers from documents
-       and call `rudel-disconnect' on connection
-       (class rudel-connection): documentation string
-       (rudel-connection::rudel-disconnect): remove hook
-       `after-change-functions' only locally
-       (rudel-join-session): construct a proper session name; store
-       backend object in the session; some comments
-
-       * obby/rudel-obby.el (rudel-obby-document): cleanup; improved
-       documentation strings
-
-       * rudel-overlay.el (new file): functions for managing overlays,
-       which indicate the authors of contributions in collaborative
-       buffers
-
-       * rudel.el (rudel-allocate-buffer-function): customization option
-       for buffer allocation function
-       (rudel-subscribe): call buffer allocation function instead of just
-       using the provided name
-       * rudel-interactive.el (rudel-allocate-buffer-clear-existing): new
-       function; in case of a conflict, allocate buffer for subscription
-       by clearing the existing buffer
-       (rudel-allocate-buffer-make-unique): new function; in case of a
-       conflict, allocate buffer for subscription by producing a unique
-       name
-
-       * rudel.el (customization): added customization group definition
-       for `rudel'
-
-       * obby/rudel-obby.el (includes): require `rudel-util' instead of
-       `rudel'
-       (rudel-connect): attach connection to socket object
-       (rudel-obby-document): removed slot `subscribed' as it is now
-       contained in the base class `rudel-document'
-       (rudel-obby-escape-string): call `rudel-obby-replace-in-string'
-       instead of `obby-replace-in-string'
-       (rudel-obby-unescape-string): call `rudel-obby-replace-in-string'
-       instead of `obby-replace-in-string'
-       * obby/rudel-obby-client.el
-       (rudel-obby-connection::rudel-state-change): required by
-       `rudel-sentinel-dispatch'
-       (rudel-obby-connection::rudel-subscribe-to): do not touch slot
-       `subscribed'
-       (rudel-obby-connection::rudel-obby/obby_sync_doclist_document):
-       retrieve subscribed users and add to `subscribed' slot
-       (rudel-obby-connection::rudel-obby/obby_document_create): add
-       document owner to `subscribed' slot
-       (rudel-obby-connection::rudel-obby/obby_document/subscribe): add
-       user to `subscribed' slot
-       (rudel-obby-connection::rudel-obby/obby_document/unsubscribe):
-       remove user from `subscribed' slot
-       * rudel.el (rudel-document): added slot `subscribed' which
-       contains a list of subscribed users
-       (rudel-subscribe): do not use `rudel-unsubscribed-documents';
-       instead list all documents for now
-       (rudel-publish-buffer): add self to `subscribed' slot
-
-       * rudel-util.el (rudel-state-change): cleanup; added comments
-
-       * rudel-mode.el (rudel-minor-keymap): Fixed invalid menu
-       definition
-
-       * obby/rudel-obby.el (whole file): moved class
-       `rudel-obby-connection' and related methods into file
-       `rudel-obby-client.el'
-       (rudel-obby-backend): added capability `track-subscriptions'
-       (rudel-obby-backend::rudel-connect): require `rudel-obby-client'
-       before constructing the connection object
-       * obby/rudel-obby-client.el (new file): moved class
-       `rudel-obby-connection' and related methods into this file
-
-2008-12-29  Jan Moringen  <address@hidden>
-
-       * rudel.el (rudel-connection::rudel-change-color-): new method
-       handles color changes
-       (rudel-change-color): added basic implementation, which checks the
-       backend, asks the user for a new color and calls the connection
-       object
-
-       * rudel-util.el (rudel-socket-owner::rudel-state-change): called
-       when the state of the connection changes
-       (rudel-socket-owner::rudel-close): called when the connection is
-       closed
-       (rudel-sentinel-dispatch): the argument is a message, not the
-       actual state, the state is retrieved with `process-state'
-
-       * rudel-speedbar.el (whole file): cleanup; improved comments
-
-       * rudel-mode.el (whole file): improved comments
-       (rudel-read-{backend, document}): moved to rudel-interactive.el
-       (rudel-minor-keymap): added key binding for `rudel-change-color';
-       added `options' menu item
-
-       * rudel-interactive.el (whole file): user interaction functions
-       used by all Rudel components
-
-       * rudel-util.el (whole file): utility functions used by all Rudel
-       components
-
-       * rudel.el (whole file): improved comments
-       (rudel-backend::make-document): new function create an appropriate
-       document object for the backend
-       (rudel-session::rudel-end): added documentation string
-       (rudel-session::rudel-add-user): added documentation string
-       (rudel-session::rudel-remove-user): added documentation string
-       (rudel-session::rudel-remove-document): new method; remove
-       document from session
-       (rudel-connection::rudel-publish): new function; called when a
-       buffer is published
-       (rudel-connection::rudel-unsubscribe-from): new function; called
-       when a subscription is canceled
-       (class rudel-user): added documentation strings
-       (class rudel-document): added documentation strings
-       (rudel-document::rudel-attach-to-buffer): add to
-       `after-change-functions' hook only for the buffer in question;
-       added some comments
-       (rudel-document::rudel-detach-from-buffer): cleanup
-       (rudel-document::rudel-remote-insert): added comments
-       (rudel-document::rudel-remote-delete): added comments
-       (rudel-handle-buffer-change): added comments
-       (rudel-choose-backend): added comments
-       (rudel-end-session): additional error check
-       (rudel-subscribe): call `rudel-unsubscribed-documents' when
-       completing document name; added comments
-       (rudel-unpublish-buffer): call `rudel-detach-from-buffer' and
-       `rudel-unsubscribe-from'; added comments
-
-       * obby/rudel-obby.el (whole file): improved comments
-       (rudel-obby-backend::rudel-ask-connect-info): removed :override
-       tag; added comments
-       (rudel-obby-backend::rudel-connect): removed :override tag; use
-       `make-network-process' instead of `open-network-stream' and attach
-       filter and sentinel right away; removed some debug code
-       (rudel-obby-backend::rudel-disconnect): removed :override tag
-       (rudel-obby-backend::rudel-subscribe-to): removed :override tag
-       (rudel-obby-backend::rudel-local-insert): removed :override tag
-       (rudel-obby-backend::rudel-local-delete): removed :override tag
-       (rudel-obby-backend::rudel-make-document): new method; creates a
-       new rudel-obby-document object
-       (rudel-obby-backend::rudel-available-document-id): obtains an
-       unused document id, which can be assigned to a new document
-       (class rudel-obby-connection): removed useless `host' and `port'
-       slots
-       (rudel-obby-connection::rudel-receive): removed some debug code
-       (rudel-obby-connection::rudel-send): removed some debug code
-       (rudel-obby-connection::rudel-obby/net6_client_join): fixed syntax
-       error
-       (class rudel-obby-user): added accessors for slots `client-id' and
-       `user-id'
-       (rudel-obby-user::eieio-speedbar-description): removed :override
-       tag
-       (rudel-obby-user::eieio-speedbar-object-buttonname): removed
-       :override tag
-       (class rudel-obby-document): added accessors and documentation for
-       slot `id'
-       (rudel-obby-document::eieio-speedbar-object-buttonname): removed
-       :override tag
-       (rudel-obby-replace-in-string): new function; replace a set of
-       patterns in a string
-       (rudel-obby-escape-string): new function; replace obby control
-       characters with their escape sequences
-       (rudel-obby-unescape-string): new function; inverse of
-       `rudel-obby-escape-string'
-       (rudel-obby-parse-color): added documentation
-       (rudel-obby-format-color): added documentation
-       (rudel-obby-assemble-message): properly escape message components
-       (rudel-obby-parse-message): properly unescape message components
-
-       * README (whole file): some initial notes
-       * INSTALL (whole file): some initial notes
-
-2008-12-02  Jan Moringen  <address@hidden>
-
-       * obby (directory): new directory for files belonging to the obby
-       backend
-       * rudel-obby.el (whole file): moved to `obby' directory
-       * obby/rudel-obby.el (whole file): moved here from parent
-       directory
-
-       * Changelog (whole file): renamed to `ChangeLog?'
-       * ChangeLog? (whole file): fixed name
-
-       * INSTALL (whole file): added
-
-       * rudel.el (whole file): fixed some comments, removed some test
-       code
-       (rudel-version): new variable; global Rudel version
-       (rudel-sessions): removed; we only allow one session for now
-       (rudel-session): cleaned up
-       (rudel-session::rudel-end): cleaned up; added some comments
-       (rudel-session::rudel-add-user): cosmetic changes
-       (rudel-session::rudel-remove-user): cosmetic changes
-       (rudel-session::rudel-find-user): cosmetic changes
-       (rudel-session::rudel-add-document): cosmetic changes
-       (rudel-session::rudel-find-document): cosmetic changes
-       (rudel-backend::rudel-connect): improved documentation string
-       (rudel-backend::rudel-ask-host-info): renamed from
-       `rudel-ask-listen-info'
-       (rudel-backend::rudel-host): renamed from `rudel-listen'
-       (rudel-document::rudel-attach-to-buffer): cosmetic changes
-       (rudel-document::rudel-remote-insert): cleaned up
-       (rudel-document::rudel-remote-delete): cleaned up
-       (rudel-load-backends): cosmetic changes
-       (rudel-choose-backend): fixed message display
-       (rudel-host-session): improved documentation string
-       (rudel-change-color): raise an error since this is not yet
-       implemented
-       (rudel-subscribe): added comments
-       (rudel-unpublish-buffer): raise an error if the buffer has not
-       been published
-
-       * rudel.el (whole file): cleanup up some obsolete code
diff --git a/GNUmakefile b/GNUmakefile
index db56e2a..5dec9e7 100644
--- a/GNUmakefile
+++ b/GNUmakefile
@@ -6,10 +6,10 @@ EMACS = emacs -Q --batch
 # the top-level directory for that (otherwise, maybe we could rely on
 # buffer-locally setting generated-autoload-file in the non-main files).
 
-rudel-loaddefs.el: $(shell find -name '*.el' -print | \
+rudel-loaddefs.el: $(shell find \( -name .git -prune \) -o \( -name '*.el' 
-print \) | \
                               egrep -v 'rudel-(pkg|autoloads|loaddefs)')
        $(EMACS) \
            --eval '(setq generate-autoload-cookie ";;;###rudel-autoload")' \
            --eval '(setq generated-autoload-file (expand-file-name "$@"))' \
            -f batch-update-autoloads \
-           $$(find . -name '*.el' -print | sed 's|/[^/]*$$||' | sort -u)
+           $$(find \( -name .git -prune \) -o \( -name '*.el' -print \) | sed 
's|/[^/]*$$||' | sort -u)
diff --git a/rudel-backend.el b/rudel-backend.el
index ef1a5b3..6ef1d41 100644
--- a/rudel-backend.el
+++ b/rudel-backend.el
@@ -1,6 +1,6 @@
 ;;; rudel-backend.el --- A generic backend management mechanism for Rudel
 ;;
-;; Copyright (C) 2009, 2010, 2014 Free Software Foundation, Inc.
+;; Copyright (C) 2009, 2010, 2014, 2016 Free Software Foundation, Inc.
 ;;
 ;; Author: Jan Moringen <address@hidden>
 ;; Keywords: Rudel, backend, factory
@@ -96,24 +96,34 @@ factory objects."))
   "Factory class that holds an object for each known backend
 category. Objects manage backend implementation for one backend
 category each.")
-(oset-default rudel-backend-factory factories
+(oset-default 'rudel-backend-factory factories
              (make-hash-table :test #'eq))
 
-(defmethod initialize-instance ((this rudel-backend-factory) &rest slots)
+(defmethod initialize-instance ((this rudel-backend-factory) &rest _slots)
   "Initialize slots of THIS with SLOTS."
   (when (next-method-p)
     (call-next-method))
-  (oset this :backends (make-hash-table :test #'eq)))
+  (oset this backends (make-hash-table :test #'eq)))
+
+;;;###rudel-autoload
+(progn
+(defmacro rudel--with-memoization (place &rest code)
+  (declare (indent 1) (debug t))
+  (gv-letplace (getter setter) place
+    `(or ,getter
+         ,(macroexp-let2 nil val (macroexp-progn code)
+            `(progn
+               ,(funcall setter val)
+               ,val))))))
 
 ;;;###rudel-autoload
 (defmethod rudel-get-factory :static ((this rudel-backend-factory)
                                      category)
   "Return the factory responsible for CATEGORY.
 If there is no responsible factory, create one and return it."
-  (with-slots (factories) this
-    (or (gethash category factories)
-       (puthash category (rudel-backend-factory category) factories)))
-  )
+  (rudel--with-memoization
+   (gethash category (eieio-oref-default this 'factories))
+   (make-instance 'rudel-backend-factory))) ;; category
 
 ;;;###rudel-autoload
 (defmethod rudel-add-backend ((this rudel-backend-factory)
@@ -187,7 +197,8 @@ objects."
        (unless (object-p class)
         (condition-case error
             (puthash name (make-instance
-                           class (symbol-name name)) backends)
+                           class (symbol-name name))
+                      backends)
           (error
            ;; Store this error on the name symbol of the backend for
            ;; later display.
@@ -223,7 +234,7 @@ The returned backend is of the form (NAME . OBJECT)."
 ;;;###rudel-autoload
 (defun rudel-backend-get-factory (category)
   "A shortcut for getting the factory object for CATEGORY."
-  (rudel-get-factory rudel-backend-factory category))
+  (rudel-get-factory 'rudel-backend-factory category))
 
 (defun rudel-backend-suitable-backends (category predicate)
   "Return backends from category CATEGORY that satisfy PREDICATE.
@@ -289,15 +300,15 @@ available information available for the backends"
 
      ;; Insert all backends provided by this factory.
      (dolist (backend (rudel-all-backends factory))
-       (if (or (object-p (cdr backend))
-              (null (get (car backend)
-                         'rudel-backend-last-load-error)))
-          (insert (rudel-backend--format-backend-normal backend))
-        (insert (rudel-backend--format-backend-error backend))))
+       (insert (if (or (object-p (cdr backend))
+                       (null (get (car backend)
+                                  'rudel-backend-last-load-error)))
+                   (rudel-backend--format-backend-normal backend)
+                 (rudel-backend--format-backend-error backend))))
 
      ;; One empty line between backend categories.
      (insert "\n"))
-   (oref rudel-backend-factory factories))
+   (oref-default 'rudel-backend-factory factories))
   (current-buffer))
 
 (defun rudel-backend--format-backend-normal (backend)
@@ -315,7 +326,7 @@ available information available for the backends"
          (propertize
           (if (object-p (cdr backend))
               (mapconcat #'prin1-to-string
-                         (oref (cdr backend) :version)
+                         (oref (cdr backend) version)
                          ".")
             "?")
           'face 'font-lock-constant-face)
@@ -323,7 +334,7 @@ available information available for the backends"
          (propertize
           (if (object-p (cdr backend))
               (mapconcat #'prin1-to-string
-                         (oref (cdr backend) :capabilities)
+                         (oref (cdr backend) capabilities)
                          " ")
             "?")
           'face 'font-lock-constant-face))
diff --git a/rudel-loaddefs.el b/rudel-loaddefs.el
index 9afcdce..d64b4dd 100644
--- a/rudel-loaddefs.el
+++ b/rudel-loaddefs.el
@@ -4,7 +4,7 @@
 
 
 ;;;### (autoloads nil "infinote/rudel-infinote" "infinote/rudel-infinote.el"
-;;;;;;  (21360 21635 0 0))
+;;;;;;  (0 0 0 0))
 ;;; Generated autoloads from infinote/rudel-infinote.el
 
 (eieio-defclass-autoload 'rudel-infinote-backend '(rudel-protocol-backend) 
"infinote/rudel-infinote" "")
@@ -15,8 +15,8 @@
 
 ;;;***
 
-;;;### (autoloads nil "obby/rudel-obby" "obby/rudel-obby.el" (21360
-;;;;;;  21618 0 0))
+;;;### (autoloads nil "obby/rudel-obby" "obby/rudel-obby.el" (0 0
+;;;;;;  0 0))
 ;;; Generated autoloads from obby/rudel-obby.el
 
 (eieio-defclass-autoload 'rudel-obby-backend '(rudel-protocol-backend) 
"obby/rudel-obby" "Main class of the Rudel obby backend. Creates obby 
client\nconnections and creates obby servers.")
@@ -27,13 +27,14 @@
 
 ;;;***
 
-;;;### (autoloads nil "rudel-backend" "rudel-backend.el" (21360 21376
-;;;;;;  0 0))
+;;;### (autoloads nil "rudel-backend" "rudel-backend.el" (0 0 0 0))
 ;;; Generated autoloads from rudel-backend.el
 
 (eieio-defclass-autoload 'rudel-backend-factory 'nil "rudel-backend" "Factory 
class that holds an object for each known backend\ncategory. Objects manage 
backend implementation for one backend\ncategory each.")
 
-(defmethod rudel-get-factory :static ((this rudel-backend-factory) category) 
"Return the factory responsible for CATEGORY.\nIf there is no responsible 
factory, create one and return it." (with-slots (factories) this (or (gethash 
category factories) (puthash category (rudel-backend-factory category) 
factories))))
+(defmacro rudel--with-memoization (place &rest code) (declare (indent 1) 
(debug t)) (gv-letplace (getter setter) place `(or ,getter ,(macroexp-let2 nil 
val (macroexp-progn code) `(progn ,(funcall setter val) ,val)))))
+
+(defmethod rudel-get-factory :static ((this rudel-backend-factory) category) 
"Return the factory responsible for CATEGORY.\nIf there is no responsible 
factory, create one and return it." (rudel--with-memoization (gethash category 
(eieio-oref-default this 'factories)) (make-instance 'rudel-backend-factory)))
 
 (defmethod rudel-add-backend ((this rudel-backend-factory) name class 
&optional replace) "\
 Add factory class CLASS with name NAME to THIS.
@@ -54,7 +55,7 @@ A shortcut for getting the factory object for CATEGORY.
 ;;;***
 
 ;;;### (autoloads nil "rudel-session-initiation" "rudel-session-initiation.el"
-;;;;;;  (21360 22136 0 0))
+;;;;;;  (0 0 0 0))
 ;;; Generated autoloads from rudel-session-initiation.el
 
 (eieio-defclass-autoload 'rudel-ask-protocol-backend 
'(rudel-session-initiation-backend) "rudel-session-initiation" "This fallback 
backend can \"discover\" sessions by letting the\nuser select a suitable 
backend and asking for connect information\nrequired by the chosen backend.")
@@ -68,7 +69,7 @@ A shortcut for getting the factory object for CATEGORY.
 ;;;***
 
 ;;;### (autoloads nil "socket/rudel-socket" "socket/rudel-socket.el"
-;;;;;;  (21360 21601 0 0))
+;;;;;;  (0 0 0 0))
 ;;; Generated autoloads from socket/rudel-socket.el
 
 (eieio-defclass-autoload 'rudel-tcp-backend '(rudel-transport-backend) 
"socket/rudel-socket" "TCP transport backend.\nThe transport backend is a 
factory for TCP transport objects.")
@@ -78,7 +79,7 @@ A shortcut for getting the factory object for CATEGORY.
 ;;;***
 
 ;;;### (autoloads nil "telepathy/rudel-telepathy" 
"telepathy/rudel-telepathy.el"
-;;;;;;  (21360 21587 0 0))
+;;;;;;  (0 0 0 0))
 ;;; Generated autoloads from telepathy/rudel-telepathy.el
 
 (eieio-defclass-autoload 'rudel-telepathy-backend '(rudel-transport-backend) 
"telepathy/rudel-telepathy" "Class rudel-telepathy-backend ")
@@ -87,8 +88,7 @@ A shortcut for getting the factory object for CATEGORY.
 
 ;;;***
 
-;;;### (autoloads nil "tls/rudel-tls" "tls/rudel-tls.el" (21360 21567
-;;;;;;  0 0))
+;;;### (autoloads nil "tls/rudel-tls" "tls/rudel-tls.el" (0 0 0 0))
 ;;; Generated autoloads from tls/rudel-tls.el
 
 (eieio-defclass-autoload 'rudel-start-tls-backend '(rudel-transport-backend) 
"tls/rudel-tls" "STARTTLS transport backend.\nThe transport backend is a 
factory for transport objects that\nsupport STARTTLS behavior.")
@@ -97,8 +97,8 @@ A shortcut for getting the factory object for CATEGORY.
 
 ;;;***
 
-;;;### (autoloads nil "wave/rudel-wave" "wave/rudel-wave.el" (21360
-;;;;;;  21542 0 0))
+;;;### (autoloads nil "wave/rudel-wave" "wave/rudel-wave.el" (0 0
+;;;;;;  0 0))
 ;;; Generated autoloads from wave/rudel-wave.el
 
 (eieio-defclass-autoload 'rudel-wave-backend '(rudel-protocol-backend) 
"wave/rudel-wave" "Main class of the Rudel Wave backend. Creates wave 
client\nconnections.")
@@ -107,8 +107,8 @@ A shortcut for getting the factory object for CATEGORY.
 
 ;;;***
 
-;;;### (autoloads nil "xmpp/rudel-xmpp" "xmpp/rudel-xmpp.el" (21360
-;;;;;;  21513 0 0))
+;;;### (autoloads nil "xmpp/rudel-xmpp" "xmpp/rudel-xmpp.el" (0 0
+;;;;;;  0 0))
 ;;; Generated autoloads from xmpp/rudel-xmpp.el
 
 (eieio-defclass-autoload 'rudel-xmpp-backend '(rudel-transport-backend) 
"xmpp/rudel-xmpp" "Transport backend works by transporting XMPP messages 
through\nXMPP connections.")
@@ -118,7 +118,7 @@ A shortcut for getting the factory object for CATEGORY.
 ;;;***
 
 ;;;### (autoloads nil "xmpp/rudel-xmpp-tunnel" "xmpp/rudel-xmpp-tunnel.el"
-;;;;;;  (21360 21525 0 0))
+;;;;;;  (0 0 0 0))
 ;;; Generated autoloads from xmpp/rudel-xmpp-tunnel.el
 
 (rudel-add-backend (rudel-backend-get-factory 'transport) 'xmpp 
'rudel-xmpp-tunnel-backend)
@@ -126,7 +126,7 @@ A shortcut for getting the factory object for CATEGORY.
 ;;;***
 
 ;;;### (autoloads nil "zeroconf/rudel-zeroconf" "zeroconf/rudel-zeroconf.el"
-;;;;;;  (21360 21487 0 0))
+;;;;;;  (0 0 0 0))
 ;;; Generated autoloads from zeroconf/rudel-zeroconf.el
 
 (autoload 'rudel-zeroconf-register-service "zeroconf/rudel-zeroconf" "\
@@ -165,8 +165,8 @@ service type TYPE.
 ;;;;;;  "rudel-speedbar.el" "rudel-state-machine.el" "rudel-transport-util.el"
 ;;;;;;  "rudel-transport.el" "rudel-util.el" "rudel-xml.el" "rudel.el"
 ;;;;;;  "xmpp/rudel-xmpp-debug.el" "xmpp/rudel-xmpp-sasl.el" 
"xmpp/rudel-xmpp-state.el"
-;;;;;;  "xmpp/rudel-xmpp-tls.el" "xmpp/rudel-xmpp-util.el") (21360
-;;;;;;  22138 746854 586000))
+;;;;;;  "xmpp/rudel-xmpp-tls.el" "xmpp/rudel-xmpp-util.el") (0 0
+;;;;;;  0 0))
 
 ;;;***
 



reply via email to

[Prev in Thread] Current Thread [Next in Thread]