;ELC ;;; Compiled ;;; in Emacs version 26.3 ;;; with all optimizations. ;;; This file uses dynamic docstrings, first added in Emacs 19.29. ;;; This file does not contain utf-8 non-ASCII characters, ;;; and so can be loaded in Emacs versions earlier than 23. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (byte-code "\300\301!\210\300\302!\210\300\303!\210\300\304!\210\300\305!\210\300\306!\210\300\307!\210\300\310!\210\300\311!\210\300\312!\210\300\313!\210\300\314!\210\300\315!\210\300\316!\210\317\320!\207" [require cl-lib cl-generic eieio eieio-base eieio-speedbar rudel-util rudel-backend rudel-session-initiation rudel-operations rudel-operators rudel-overlay rudel-hooks rudel-interactive rudel-icons load "rudel-loaddefs"] 2) #@33 Version of the Rudel framework. (defconst rudel-version '(0 3) (#$ . 841)) #@90 Global object representing the current Rudel session. nil if there is no active session. (defvar rudel-current-session nil (#$ . 922)) #@82 Buffer-local variable which holds the Rudel document associated with the buffer. (defvar rudel-buffer-document nil (#$ . 1063)) (byte-code "\300\301!\210\302\301\303\304#\207" [make-variable-buffer-local rudel-buffer-document put permanent-local t] 4) #@134 Buffer-local variable which holds change data that could not be accessed otherwise. It would be nice to find another way to do this. (defvar rudel-buffer-change-workaround-data nil (#$ . 1322)) (byte-code "\300\301!\210\302\301\303\304#\210\305\306\307\310\311\312\311\313\314\315\314\316\314\317\314\320\314\321&\210\322\323\324\325\326DD\327\311\306\330\331\332\333& \210\322\334\324\325\335DD\336\311\306\330\337&\210\340\341\342\343!\"\210\340\344\345\343!\"\210\340\346\344\"\210\347\346\350\351#\210\352\343\353\344#\354\343\355\356\357$\207" [make-variable-buffer-local rudel-buffer-change-workaround-data put permanent-local t custom-declare-group rudel nil "Rudel collaborative editing framework." :group applications communication :link (emacs-library-link :tag "Lisp File" "rudel.el") (url-link :tag "Project Homepage" "http://rudel.sourceforge.net") (url-link :tag "Report Issues" "http://sourceforge.net/tracker/?group_id=249139") (url-link :tag "Ask Questions (Mailing List)" "http://sourceforge.net/mail/?group_id=249139") (url-link :tag "Ask Questions (EmacsWiki)" "http://www.emacswiki.org/emacs/Rudel") custom-declare-variable rudel-allocate-buffer-function funcall function #[0 "\300\207" [rudel-allocate-buffer-clear-existing] 1] "A function used to find or create buffers to associate to documents.\nThe function is called with the document name as the sole\nargument and has to return a buffer object which will be attached\nto the document in question." :type (choice (const :tag "Clear content of existing buffer" rudel-allocate-buffer-clear-existing) (const :tag "Create a new uniquely named buffer" rudel-allocate-buffer-make-unique) (function :tag "Other function")) :require rudel-interactive rudel-default-username #[0 "\300 \207" [user-login-name] 1] "*" (string) defalias rudel-session-p eieio-make-class-predicate rudel-session rudel-session--eieio-childp eieio-make-child-predicate rudel-session-child-p make-obsolete "use (cl-typep ... \\='rudel-session) instead" "25.1" define-symbol-prop cl-deftype-satisfies eieio-defclass-internal (rudel-hook-object) ((backend :initarg :backend :type rudel-backend-child :documentation "The backend used by this session.") (users :initarg :users :type list :initform nil :documentation "The list of users participating in this\nsession.") (documents :initarg :documents :type list :initform nil :documentation "This list of documents available in\nthis session.") (end-hook :initarg :end-hook :type list :initform nil :documentation "") (add-user-hook :initarg :add-user-hook :type list :initform nil :documentation "This hook is run when a user gets added\nto the session.\nThe arguments are the session and the user object.") (remove-user-hook :initarg :remove-user-hook :type list :initform nil :documentation "This hook is run when a user gets\nremoved from the session.\nThe arguments are the session and the user object.") (add-document-hook :initarg :add-document-hook :type list :initform nil :documentation "This hook is run when a document gets\nadded to the session.\nThe arguments are the session and the document object.") (remove-document-hook :initarg :remove-document-hook :type list :initform nil :documentation "This hook is run when a document gets\nremoved from the session.\nThe arguments are the session and the document object.")) (:documentation "This class serves as a base class for rudel-client-session and\nrudel-server-session. Consequently, it consists of slots common\nto client and server sessions." :abstract t)] 18) #@71 You cannot create a new object of type `rudel-session'. (fn &rest _) (defalias 'rudel-session #[128 "\300\301!\207" [error "Class rudel-session is abstract"] 3 (#$ . 4852)]) (byte-code "\300\301\302\303\302\304%\210\300\305\302\306\302\307%\210\300\310\302\311\302\312%\210\300\313\302\314\302\315%\210\300\316\302\317\302\320%\210\300\321\302\322\302\323%\210\300\324\302\325\302\326%\210\327\330\331\332!\"\210\327\333\334\332!\"\210\327\335\333\"\210\336\335\337\340#\210\341\332\342\333#\343\332\344\345\346$\210\300\347\302\350\302\351%\210\300\352\302\353\302\354%\207" [cl-generic-define-method rudel-end nil ((this rudel-session)) #[257 "\300\301\"\207" [object-run-hook-with-args end-hook] 4 "Terminate THIS session performing all necessary cleanup.\n\n(fn THIS)"] rudel-add-user ((this rudel-session) user) #[514 "\300\301#\210\302\303#\207" [object-add-to-list :users object-run-hook-with-args add-user-hook] 6 "Add USER to the user list of THIS session.\n\nRuns object hook (see `rudel-hook-object') `add-user-hook' with\narguments THIS and USER.\n\n(fn THIS USER)"] rudel-remove-user ((this rudel-session) user) #[514 "\300\301#\210\302\303#\207" [object-remove-from-list :users object-run-hook-with-args remove-user-hook] 6 "Remove USER from the user list of THIS session.\n\nRuns object hook (see `rudel-hook-object') `remove-user-hook'\nwith arguments THIS and USER.\n\n(fn THIS USER)"] rudel-find-user ((this rudel-session) which &optional test key) #[1026 "\300\301\302\"\303\206 \304\305\206\306&\207" [cl-find slot-value users :key object-name-string :test string=] 12 "Find user WHICH in the user list.\nWHICH is compared to the result of KEY using TEST.\n\n(fn THIS WHICH &optional TEST KEY)"] rudel-add-document ((this rudel-session) document) #[514 "\300\301\"\204 \302\301#\210\303\304#\210\305\306#\207" [slot-boundp :session eieio-oset object-add-to-list :documents object-run-hook-with-args add-document-hook] 6 "\n\n(fn THIS DOCUMENT)"] rudel-remove-document ((this rudel-session) document) #[514 "\300!\210\301\302#\210\303\304#\207" [rudel-maybe-detach-from-buffer object-remove-from-list :documents object-run-hook-with-args remove-document-hook] 6 "Remove DOCUMENT from THIS session, detaching it if necessary.\n\n(fn THIS DOCUMENT)"] rudel-find-document ((this rudel-session) which &optional test key) #[1026 "\300\301\302\"\303\206 \304\305\206\306&\207" [cl-find slot-value documents :key object-name-string :test string=] 12 "Find document WHICH in the document list.\nWHICH is compared to the result of KEY using TEST.\n\n(fn THIS WHICH &optional TEST KEY)"] defalias rudel-client-session-p eieio-make-class-predicate rudel-client-session rudel-client-session--eieio-childp eieio-make-child-predicate rudel-client-session-child-p make-obsolete "use (cl-typep ... \\='rudel-client-session) instead" "25.1" define-symbol-prop cl-deftype-satisfies eieio-defclass-internal (rudel-session) ((connection :initarg :connection :type (or null rudel-connection-child) :initform nil :documentation "The connection used for communication by this\nsession.") (self :initarg :self :type (or null rudel-user-child) :initform nil :reader rudel-self :writer rudel-set-self :documentation "Points into USERS to the user object representing\nthe local user")) (:documentation "Objects represent a collaborative editing session from a\nclient perspective.") rudel-self ((this rudel-client-session)) #[257 "\300\301\"\207" [slot-value self] 4 "Access the slot `self' from object of class `rudel-client-session'.\n\n(fn THIS)"] rudel-set-self ((this rudel-client-session) value) #[514 "\300\301#\207" [eieio-oset self] 7 "Set the slot `self' of an object of class `rudel-client-session'.\n\n(fn THIS VALUE)"]] 7) #@77 Create a new object of class type `rudel-client-session'. (fn &rest SLOTS) (defalias 'rudel-client-session #[128 "\300\301\302#\207" [apply make-instance rudel-client-session] 5 (#$ . 8634)]) (byte-code "\300\301\302\303#\300\207" [function-put rudel-client-session compiler-macro rudel-client-session--anon-cmacro] 4) #@26 (fn WHOLE &rest SLOTS) (defalias 'rudel-client-session--anon-cmacro #[385 "\211@;\204\207\300\301\302@@#@\303@DABB\"\207" [macroexp--warn-and-return format "Obsolete name arg %S to constructor %S" identity] 7 (#$ . 8961)]) (byte-code "\300\301\302\303\304\305%\210\300\306\302\307\302\310%\210\311\312\313\314!\"\210\311\315\316\314!\"\210\311\317\315\"\210\320\317\321\322#\210\323\314\324\315#\325\314\326\302\327$\207" [cl-generic-define-method rudel-end nil ((this rudel-client-session)) t #[514 "\211\300\301\302\303\"\"\210\302\304\"\203#\3051\306\302\304\"!0\202\"\210\202#\210\210 \207" [mapc rudel-maybe-detach-from-buffer slot-value documents connection (error) rudel-disconnect] 8 "\n\n(fn CL--CNM THIS)"] rudel-unsubscribed-documents ((this rudel-client-session)) #[257 "\211\300\301\"\204\f\302\303!\210\304\305\306\307\310\311!\312\"\313\314%\300\315\"\"\207" [slot-value self error "Cannot find unsubscribed documents without self user" cl-remove-if make-byte-code 257 "\211\301\300\302\"\301\303\">\207" vconcat vector [slot-value self subscribed] 6 "\n\n(fn DOCUMENT)" documents] 9 "Return documents in THIS to which the self user is not subscribed.\n\n(fn THIS)"] defalias rudel-server-session-p eieio-make-class-predicate rudel-server-session rudel-server-session--eieio-childp eieio-make-child-predicate rudel-server-session-child-p make-obsolete "use (cl-typep ... \\='rudel-server-session) instead" "25.1" define-symbol-prop cl-deftype-satisfies eieio-defclass-internal (rudel-session) (:documentation "Class rudel-server-session " :abstract t)] 6) #@78 You cannot create a new object of type `rudel-server-session'. (fn &rest _) (defalias 'rudel-server-session #[128 "\300\301!\207" [error "Class rudel-server-session is abstract"] 3 (#$ . 10563)]) (byte-code "\300\301\302\303!\"\210\300\304\305\303!\"\210\300\306\304\"\210\307\306\310\311#\210\312\303\313\304#\314\303\315\316\317$\207" [defalias rudel-connection-p eieio-make-class-predicate rudel-connection rudel-connection--eieio-childp eieio-make-child-predicate rudel-connection-child-p make-obsolete "use (cl-typep ... \\='rudel-connection) instead" "25.1" define-symbol-prop cl-deftype-satisfies eieio-defclass-internal nil ((session :initarg :session :type rudel-session-child :documentation "")) (:documentation "This abstract class defines the interface implementations of\nclient protocols have to obey." :abstract t)] 6) #@74 You cannot create a new object of type `rudel-connection'. (fn &rest _) (defalias 'rudel-connection #[128 "\300\301!\207" [error "Class rudel-connection is abstract"] 3 (#$ . 11404)]) (byte-code "\300\301\302\301\303\304#\305#\210\300\306\302\306\307\304#\310#\210\300\311\302\311\312\304#\313#\210\300\314\302\314\315\304#\313#\210\300\316\302\316\317\304#\313#\210\300\320\302\320\321\304#\322#\210\300\323\302\323\324\304#\322#\210\300\325\302\325\326\304#\322#\210\300\327\302\327\330\304#\322#\210\300\331\332\333!\"\210\300\334\335\333!\"\210\300\336\334\"\210\337\336\340\341#\210\342\333\343\334#\344\333\345\346\347$\210\350\351\304\352\304\353%\210\350\354\304\355\304\356%\207" [defalias rudel-disconnect cl-generic-define ((this rudel-connection)) nil "Close the connection.\n\n(fn (this rudel-connection))" rudel-change-color- ((this rudel-connection) color) "\n\n(fn (this rudel-connection) COLOR)" rudel-publish ((this rudel-connection) document) "\n\n(fn (this rudel-connection) DOCUMENT)" rudel-subscribe-to ((this rudel-connection) document) rudel-unsubscribe-from ((this rudel-connection) document) rudel-local-insert ((this rudel-connection)) "\n\n(fn (this rudel-connection))" rudel-local-delete ((this rudel-connection)) rudel-remote-insert ((this rudel-connection)) rudel-remote-delete ((this rudel-connection)) rudel-user-p eieio-make-class-predicate rudel-user rudel-user--eieio-childp eieio-make-child-predicate rudel-user-child-p make-obsolete "use (cl-typep ... \\='rudel-user) instead" "25.1" define-symbol-prop cl-deftype-satisfies eieio-defclass-internal (eieio-named eieio-speedbar-file-button rudel-hook-object) ((color :initarg :color :reader rudel-color :writer rudel-set-color :documentation "Color used to indicate ownership or authorship\nby the user. Examples includes text written by the user or the\nuser name itself.") (change-hook :initarg :change-hook :type list :initform nil :documentation "This hook is run when this user object\nchanges.")) (:documentation "Objects of this class represent users participating in\ncollaborative editing session. Note that a participating user\ndoes not have to be connected to the session at any given time." :abstract t) cl-generic-define-method rudel-color ((this rudel-user)) #[257 "\300\301\"\207" [slot-value color] 4 "Access the slot `color' from object of class `rudel-user'.\n\n(fn THIS)"] rudel-set-color ((this rudel-user) value) #[514 "\300\301#\207" [eieio-oset color] 7 "Set the slot `color' of an object of class `rudel-user'.\n\n(fn THIS VALUE)"]] 7) #@68 You cannot create a new object of type `rudel-user'. (fn &rest _) (defalias 'rudel-user #[128 "\300\301!\207" [error "Class rudel-user is abstract"] 3 (#$ . 13962)]) (byte-code "\300\301\302\303\302\304%\210\305\306\307\310!\"\210\305\311\312\310!\"\210\305\313\311\"\210\314\313\315\316#\210\317\310\320\311#\321\310\322\323\324$\207" [cl-generic-define-method rudel-change-notify nil ((this rudel-user)) #[257 "\300\301\"\207" [object-run-hook-with-args change-hook] 4 "Run change hook of THIS after slot values have changed.\n\n(fn THIS)"] defalias rudel-document-p eieio-make-class-predicate rudel-document rudel-document--eieio-childp eieio-make-child-predicate rudel-document-child-p make-obsolete "use (cl-typep ... \\='rudel-document) instead" "25.1" define-symbol-prop cl-deftype-satisfies eieio-defclass-internal (eieio-named eieio-speedbar-file-button rudel-hook-object) ((session :initarg :session :type rudel-session :documentation #1="") (buffer :initarg :buffer :type (or null buffer) :initform nil :documentation #1#) (subscribed :initarg :subscribed :type list :initform nil :documentation #1#) (subscribe-hook :initarg :subscribe-hook :type list :initform nil :documentation "This hook is run when a user subscribes to\nthis document object.") (unsubscribe-hook :initarg :unsubscribe-hook :type list :initform nil :documentation "This hook is run when a user unsubscribes\nfrom this document object.") (attach-hook :initarg :attach-hook :type list :initform nil :documentation "This hook is run when a buffer is attached\nto this document object.") (detach-hook :initarg :detach-hook :type list :initform nil :documentation "This hook is run when the attached buffer\nis detached from this document object.")) (:documentation "This class represents a document, which participants of a\ncollaborative editing session can subscribe to." :abstract t)] 6) #@72 You cannot create a new object of type `rudel-document'. (fn &rest _) (defalias 'rudel-document #[128 "\300\301!\207" [error "Class rudel-document is abstract"] 3 (#$ . 15840)]) (byte-code "\300\301\302\303\302\304%\210\300\305\302\306\302\307%\210\300\310\302\311\302\312%\210\300\313\302\314\302\315%\210\300\316\302\317\302\320%\210\300\321\302\322\302\323%\210\300\324\302\325\302\326%\210\300\327\302\330\302\331%\210\300\332\302\333\302\334%\210\300\335\302\336\302\337%\210\300\340\302\341\302\342%\210\300\343\302\344\302\345%\210\300\346\302\347\302\350%\210\300\351\302\352\302\353%\210\300\354\302\355\302\356%\207" [cl-generic-define-method rudel-unique-name nil ((this rudel-document)) #[257 "\300!\207" [object-name-string] 3 "Returns a suggested name for the buffer attached to THIS document.\n\n(fn THIS)"] rudel-suggested-buffer-name ((this rudel-document)) #[257 "\300!\207" [rudel-unique-name] 3 "Returns a suggested name for the buffer attached to THIS document.\n\n(fn THIS)"] rudel-attached-p ((this rudel-document)) #[257 "\211\300\301\"\207" [slot-value buffer] 5 "\n\n(fn THIS)"] rudel-attach-to-buffer ((this rudel-document) buffer) #[514 "\211\300\301#\266\302\"\210r\303\301\"q\210\304\305\306\307\310$\210\304\311\312\307\310$\210\304\313\314\307\310$\210\304\315\316\307\310$\210)\317\320\303\301\"#\207" [eieio-oset buffer rudel-set-buffer-document slot-value add-hook after-change-functions rudel-handle-buffer-change nil t before-change-functions rudel-buffer-change-workaround kill-buffer-hook rudel-unsubscribe change-major-mode-hook rudel-handle-major-mode-change object-run-hook-with-args attach-hook] 9 "Attach THIS document to BUFFER\n\n(fn THIS BUFFER)"] rudel-detach-from-buffer ((this rudel-document)) #[257 "\211\300\301\"r\300\301\"q\210\302\303\304\305#\210\302\306\307\305#\210\302\310\311\305#\210\312 \210\302\313\314\305#\210)\315\316\300\301\"\"\210\317\301\316#\266\320\321#\262\207" [slot-value buffer remove-hook kill-buffer-hook rudel-unsubscribe t after-change-functions rudel-handle-buffer-change before-change-functions rudel-buffer-change-workaround rudel-overlays-remove-all change-major-mode-hook rudel-handle-major-mode-change rudel-set-buffer-document nil eieio-oset object-run-hook-with-args detach-hook] 8 "Detach document THIS from its buffer.\nDo nothing, if THIS is not attached to any buffer.\n\n(fn THIS)"] rudel-maybe-detach-from-buffer ((this rudel-document)) #[257 "\300!\205 \301!\207" [rudel-attached-p rudel-detach-from-buffer] 3 "\n\n(fn THIS)"] rudel-add-user ((this rudel-document) user) #[514 "\300\301#\210\302\303#\207" [object-add-to-list :subscribed object-run-hook-with-args subscribe-hook] 6 "Add USER to the list of subscribed users of THIS.\n\nRuns object hook (see `rudel-hook-object') `subscribe-hook' with\narguments THIS and USER.\n\n(fn THIS USER)"] rudel-remove-user ((this rudel-document) user) #[514 "\300\301#\210\302\303#\207" [object-remove-from-list :subscribed object-run-hook-with-args unsubscribe-hook] 6 "Remove USER from the list of subscribed users of THIS.\n\nRuns object hook (see `rudel-hook-object') `unsubscribe-hook'\nwith arguments THIS and USER.\n\n(fn THIS USER)"] rudel-clear-users ((this rudel-document)) #[257 "\300\301\302#\207" [eieio-oset :subscribed nil] 5 "Clear list of users subscribed to THIS.\n\n(fn THIS)"] rudel-find-user ((this rudel-document) which &optional test key) #[1026 "\300\301\302\"\303\206 \304\305\206\306&\207" [cl-find slot-value subscribed :key object-name-string :test string=] 12 "Find user WHICH in the list of subscribed users.\nWHICH is compared to the result of KEY using TEST.\n\n(fn THIS WHICH &optional TEST KEY)"] rudel-insert ((this rudel-document) position data) #[771 "r\301\302\"q\210\204dS\262\212\303Tb\210c+\207" [inhibit-modification-hooks slot-value buffer t] 7 "Insert DATA at POSITION into the buffer attached to THIS.\nWhen POSITION is nil `point-max' is used to determine the\ninsertion position.\nModification hooks are disabled during the insertion.\n\n(fn THIS POSITION DATA)"] rudel-delete ((this rudel-document) position length) #[771 "r\301\302\"q\210\212\303T\304\305#|+\207" [inhibit-modification-hooks slot-value buffer t + 1] 9 "Delete a region of LENGTH character at POSITION from the buffer attached to THIS.\nModification hooks are disabled during the insertion.\n\n(fn THIS POSITION LENGTH)"] rudel-local-operation ((this rudel-document) operation) #[514 "\300\301\"\302\303\304\305\300\306\"%\307\310\311\300\312\"\304 %D\211\205/\211@\313\"\210A\266\202\202\262\262\207" [slot-value session rudel-overlay-operators "overlay-operators" :document :user self rudel-connection-operators "connection-operators" :connection connection rudel-apply] 12 "Apply the local operation OPERATION to THIS.\n\n(fn THIS OPERATION)"] rudel-remote-operation ((this rudel-document) user operation) #[771 "\300\301\302\303#C\205\304\305\303\306%C\"\211\205)\211@\307\"\210A\266\202\202\207" [append rudel-document-operators "document-operators" :document rudel-overlay-operators "overlay-operators" :user rudel-apply] 11 "Apply the remote operation OPERATION performed by USER to THIS.\n\n(fn THIS USER OPERATION)"] rudel-chunks ((this rudel-document)) #[257 "\211r\300\301\"q\210\302 \303\304\305\306 \307\310\311$\"\312\211\211\203W\211@\204(\211@\313V\2045\203HA@@U\204H\203?A@\202@\313@\312EB\262\211B\262\211\262A\266\202\202\210\204cG\313U\203p\203\203A@GU\204\203\203zA@\202{\313G\312EB\262\305\307\310\314$\266\204)\207" [slot-value buffer buffer-string mapcar #[257 "\300!S\301!S\302!E\207" [overlay-start overlay-end rudel-overlay-user] 5 "\n\n(fn OVERLAY)"] cl-sort rudel-author-overlays < :key overlay-start nil 0 car] 11 "Return a list of text chunks of the associated buffer.\nEach element in the chunk is a list structured like this (START\nEND AUTHOR). START and END are numbers, AUTHOR is of type (or\nnull rudel-user-child).\n\n(fn THIS)"]] 6) #@125 Return non-nil if a document object is attached to BUFFER. If BUFFER is nil, use the current buffer. (fn &optional BUFFER) (defalias 'rudel-buffer-has-document-p #[256 "\211\204p\262\300\301\"\207" [buffer-local-value rudel-buffer-document] 4 (#$ . 21905)]) #@113 Return the document object attached to BUFFER. If BUFFER is nil, use the current buffer. (fn &optional BUFFER) (defalias 'rudel-buffer-document #[256 "\211\204p\262\300\301\"\207" [buffer-local-value rudel-buffer-document] 4 (#$ . 22175)]) #@163 Associate BUFFER to DOCUMENT. If DOCUMENT is nil, make it not associated to any buffer. If BUFFER is nil, use the current buffer. (fn DOCUMENT &optional BUFFER) (defalias 'rudel-set-buffer-document #[513 "\211\204p\262r\211q\210\211)\207" [rudel-buffer-document] 4 (#$ . 22427)]) #@188 Handle buffer change at range FROM to TO with length LENGTH by relaying them to the document object of the buffer. See `after-change-functions' for more information. (fn FROM TO LENGTH) (defalias 'rudel-handle-buffer-change #[771 "\300 \205\203\301 \302U\2047\303U\2037r\304\305\"q\210\306\"\262)\307\310\311\312\nS\313%\"\262\202\201U\203S\303U\204S\307\314\315\312 S\316 %\"\202\201r\304\305\"q\210\306\"\262)\307\314\315\312\nS\316\n%\"\210\307\310\311\312\nS\313%\"\262\266\202\207" [rudel-buffer-has-document-p rudel-buffer-document nil 0 slot-value buffer buffer-substring-no-properties rudel-local-operation rudel-insert-op "insert" :from :data rudel-delete-op "delete" :length] 14 (#$ . 22720)]) #@16 (fn FROM TO) (defalias 'rudel-buffer-change-workaround #[514 "U?\205\301\"E\211\207" [rudel-buffer-change-workaround-data buffer-substring-no-properties] 7 (#$ . 23474)]) #@73 List of buffers that may need to be repaired after a major mode change. (defvar rudel-mode-changed-buffers nil (#$ . 23662)) #@160 Store the current buffer to repair damage done by major mode change. Note: The way this works is inspired by mode-local.el by David Ponce and Eric M. Ludlam. (defalias 'rudel-handle-major-mode-change #[0 "\300\301p\"\210\302\303\304\"\207" [add-to-list rudel-mode-changed-buffers add-hook post-command-hook rudel-after-major-mode-change] 3 (#$ . 23794)]) #@222 Repair damage done by major mode changes. As a function in `post-command-hook', this is run after there was a `major-mode' change. Note: The way this works is inspired by mode-local.el by David Ponce and Eric M. Ludlam. (defalias 'rudel-after-major-mode-change #[0 "\301\302\303\"\210\211\203#\211@\304!\203\305\306\"\307\"\266A\266\202\202\210\310\211\207" [rudel-mode-changed-buffers remove-hook post-command-hook rudel-after-major-mode-change buffer-live-p buffer-local-value rudel-buffer-document rudel-attach-to-buffer nil] 6 (#$ . 24157)]) #@371 Join the collaborative editing session described by INFO. INFO is a property list that describes the collaborative editing session in terms of properties like :host, :port and :encryption. The particular properties and their respective meanings depend on the used backend. When called interactively, all data required to join a session will be prompted for. (fn INFO) (defalias 'rudel-join-session #[257 "\301\235\204 \302\301\303#\262\304\211\203'\211@\211\235\204 \305\306C\"\210A\266\202\202\210\307\301\"\307\310\"A\307\311\"A\312\313#\314\211\302\315#\262\316\317\320\321!$\262\322 \317\320\323!%\262\324\325#\210\326\327\330#\210\331\332\"\210\207" [rudel-current-session :name plist-put "rudel session" (:transport-backend :protocol-backend) signal rudel-incomplete-info plist-get :transport-backend :protocol-backend rudel-client-session :backend nil :session rudel-make-connection rudel-ask-connect-info rudel-make-state-progress-callback "Connecting " rudel-connect "Joining " eieio-oset :connection object-add-hook end-hook #[257 "\301\211\207" [rudel-current-session nil] 3 "\n\n(fn SESSION)"] run-hook-with-args rudel-session-start-hook] 14 (#$ . 24724) (byte-code "\300\211\204B\301\302!\210\303!\211G\304U\203\211@\202\305\306\307#\211\211:\205.\211@9\205.\310A!\262\203:\211@\262\202=\211\262\266\202\266\202C\207" [nil message "Discovering Sessions ..." rudel-session-initiation-discover 1 rudel-read-session "Choose Session: " object object-p] 7)]) #@386 Host a collaborative editing session described by INFO. INFO is a property list that describes the collaborative editing session to be created in terms of properties like :address, :port and :encryption. The particular properties and their respective meanings depend on the used backend. When called interactively, all data required to host a session will be prompted for. (fn INFO) (defalias 'rudel-host-session #[257 "\300\211\203\211@\211\235\204\301\302C\"\210A\266\202\202\210\303\304\"A\303\305\"A\306\211\307\"\262\310\311#\262\312#\262\313!\210\207" [(:transport-backend :protocol-backend) signal rudel-incomplete-info plist-get :transport-backend :protocol-backend nil rudel-ask-host-info rudel-wait-for-connections rudel-ask-listen-info rudel-host rudel-session-initiation-advertise] 9 (#$ . 26256) (byte-code "\300\301\302\"\300\303\304\"\305A\306\307F\"\266\202C\207" [rudel-backend-choose transport #[257 "\300\301\"\207" [rudel-capable-of-p listen] 4 "\n\n(fn BACKEND)"] protocol #[257 "\300\301\"\207" [rudel-capable-of-p host] 4 "\n\n(fn BACKEND)"] rudel-ask-host-info :transport-backend :protocol-backend] 8)]) #@50 Leave the current collaborative editing session. (defalias 'rudel-leave-session #[0 "\204\301\302!\210\303!\207" [rudel-current-session error "No active Rudel session" rudel-end] 2 (#$ . 27422) nil]) #@91 Change the color associated with the local user. Not all backends support this operation. (defalias 'rudel-change-color #[0 "\204\301\302!\210\303\304\305\"\306\"\204\301\307\310\304\305\"!\"\210\304\311\"\211\312\313\314\315\316\"#\266\317\304\320\"\304\313\"\"\210\321\304\311\"\322\"\210\323\324\325\304\326\"\"\304\313\"\"\262\207" [rudel-current-session error "No active Rudel session" rudel-capable-of-p slot-value backend change-color "Backend `%s' cannot change colors" object-name-string self eieio-oset color read-color "New Color: " t rudel-change-color- connection object-run-hook-with-args change-hook rudel-overlay-set-face-attributes rudel-overlay-make-face-symbol author object-name] 9 (#$ . 27632) nil]) #@159 Subscribe to DOCUMENT offered by a peer in a collaborative editing session. When called interactively, DOCUMENT is prompted for interactively. (fn DOCUMENT) (defalias 'rudel-subscribe #[257 "\204\302\303!\210\304! !\305\"\210\306\211\307\"\310\"\311\"\266\312\313\"\207" [rudel-current-session rudel-allocate-buffer-function error "No active Rudel session" rudel-suggested-buffer-name rudel-attach-to-buffer eieio-oref session connection rudel-subscribe-to set-window-buffer nil] 7 (#$ . 28377) (byte-code "\204\301\302!\210\303!\211\204\301\304!\210\305\306\307#\262C\207" [rudel-current-session error "No active Rudel session" rudel-unsubscribed-documents "No unsubscribed documents" rudel-read-document nil object] 5)]) #@158 Make the BUFFER available for subscription to peers in a collaborative editing session. If BUFFER is nil, the current buffer is used. (fn &optional BUFFER) (defalias 'rudel-publish-buffer #[256 "\204\301\302!\210\211\204p\262r\211q\210\303 \203\301\304!\210)\305\306\307\"\310!#\311\"\210\312\"\210\313\306\314\"\"\210\315\306\316\"\"\262\207" [rudel-current-session error "No active Rudel session" rudel-buffer-has-document-p "Buffer already published or subscribed" rudel-make-document slot-value backend buffer-name rudel-add-document rudel-attach-to-buffer rudel-add-user self rudel-publish connection] 8 (#$ . 29128) (list nil)]) #@240 Detaches BUFFER from the collaborative editing session. The most recent version of the content will remain in the buffer but not be affected by future changes from other peers. If BUFFER is nil, the current is used. (fn &optional BUFFER) (defalias 'rudel-unsubscribe #[256 "\204\301\302!\210\211\204p\262r\211q\210\303 \204\301\304!\210)\305!\306!\210\307\310\311\"\"\262\207" [rudel-current-session error "No active Rudel session" rudel-buffer-has-document-p "Buffer is not published" rudel-buffer-document rudel-detach-from-buffer rudel-unsubscribe-from slot-value connection] 7 (#$ . 29792) nil]) (provide 'rudel)