2009-10-22 Jan Moringen * TODO (Future): added BEEP and SubEthaEdit tasks 2009-10-15 Jan Moringen * 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 * TODO: new file; TODO items for future development and releases 2009-10-12 Phil Hagelberg * 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 * jupiter/jupiter-delete.el (jupiter-delete::jupiter-transform): fixed error message 2009-10-08 Jan Moringen * 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 * doc/card.tex (Session Initiation): mention configured sessions; explain Zeroconf-advertised session in more detail 2009-10-06 Jan Moringen * 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 * 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 * README: Mention Eshell issue and license. 2009-10-03 Jan Moringen * 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 * 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 * 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 * 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 * 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 * 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 2009-09-29 Jan Moringen * 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 * 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 * 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 * 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 * 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 * 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 * 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 * 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 * 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 * 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 * 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 * 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 * 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 * 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 * 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 * rudel-mode.el (rudel-header-subscriptions-minor-mode): improved documentation string 2009-08-30 Jan Moringen * 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 * 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 * 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 * . (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 * 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 * 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 * 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 * 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 * rudel.el (rudel-join-session): renamed local variable backend to session-initiation-backend 2009-08-17 Jan Moringen * 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 * 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 * 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 * 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 * 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 * 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 * rudel.el (file header): added project URL (whole file): improved some comments 2009-08-10 Jan Moringen * rudel.el (include eieio-base): needed for eieio-named 2009-08-04 Jan Moringen * 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 * 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 * 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 * 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 * 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 * 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 * 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 * 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 * 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 * 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 * 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 * 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 * 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 * 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 * 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 * 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 * 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 * 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

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 * 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 * 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 * 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 * 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 * 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 * 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 * 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 * 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 * 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 * 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 * 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 * 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 * rudel-compat.el (header): fixed email address, keywords, legal notice and file commentary 2009-02-05 Jan Moringen * 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 * 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 * 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 * 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 * 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 * 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 * 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 * 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 * obby/rudel-obby-client.el (rudel-obby-connection): removed redundant slot `socket' (inherited from base class) 2009-01-21 Jan Moringen * 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 * 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 -> * 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 * 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 * 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 * 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 * 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 * 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 * 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 * 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 * 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