;ELC   
;;; Compiled
;;; in Emacs version 29.3
;;; with all optimizations.



(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!\207" [require color ewoc mailcap shr subr-x mwheel dnd ement-api ement-lib ement-macros ement-structs] 2)#@87 compiler-macro for inlining `ement-room-membership-events-p'.

(fn CL-WHOLE-ARG CL-X)
(defalias 'ement-room-membership-events-p--cmacro #[514 "\300\301\302\303\211\211&\207" [cl--defsubst-expand (cl-x) (cl-block ement-room-membership-events-p (and (memq (type-of cl-x) cl-struct-ement-room-membership-events-tags) t)) nil] 9 (#$ . 341)])
(byte-code "\300\301\302\303#\300\207" [define-symbol-prop ement-room-membership-events-p compiler-macro ement-room-membership-events-p--cmacro] 4)#@13 

(fn CL-X)
(defalias 'ement-room-membership-events-p #[257 "\301!>\205	 \302\207" [cl-struct-ement-room-membership-events-tags type-of t] 3 (#$ . 835)])
(byte-code "\300\301\302\303#\300\301\304\305#\306\307\310\301#\300\207" [function-put ement-room-membership-events-p side-effect-free error-free pure t define-symbol-prop ement-room-membership-events cl-deftype-satisfies] 6)#@92 compiler-macro for inlining `ement-room-membership-events-events'.

(fn CL-WHOLE-ARG CL-X)
(defalias 'ement-room-membership-events-events--cmacro #[514 "\300\301\302\303\211\211&\207" [cl--defsubst-expand (cl-x) (cl-block ement-room-membership-events-events (progn (or (ement-room-membership-events-p cl-x) (signal 'wrong-type-argument (list 'ement-room-membership-events cl-x))) (aref cl-x 1))) nil] 9 (#$ . 1222)])
(byte-code "\300\301\302\303#\300\207" [define-symbol-prop ement-room-membership-events-events compiler-macro ement-room-membership-events-events--cmacro] 4)#@113 Access slot "events" of `ement-room-membership-events' struct CL-X.
Membership events, latest first.

(fn CL-X)
(defalias 'ement-room-membership-events-events #[257 "\301!>\204 \302\303\304D\"\210\211\305H\207" [cl-struct-ement-room-membership-events-tags type-of signal wrong-type-argument ement-room-membership-events 1] 5 (#$ . 1806)])
(byte-code "\300\301\302\303#\300\207" [function-put ement-room-membership-events-events side-effect-free t] 4)#@97 compiler-macro for inlining `ement-room-membership-events-earliest-ts'.

(fn CL-WHOLE-ARG CL-X)
(defalias 'ement-room-membership-events-earliest-ts--cmacro #[514 "\300\301\302\303\211\211&\207" [cl--defsubst-expand (cl-x) (cl-block ement-room-membership-events-earliest-ts (progn (or (ement-room-membership-events-p cl-x) (signal 'wrong-type-argument (list 'ement-room-membership-events cl-x))) (aref cl-x 2))) nil] 9 (#$ . 2266)])
(byte-code "\300\301\302\303#\300\207" [define-symbol-prop ement-room-membership-events-earliest-ts compiler-macro ement-room-membership-events-earliest-ts--cmacro] 4)#@114 Access slot "earliest-ts" of `ement-room-membership-events' struct CL-X.
Timestamp of earliest event.

(fn CL-X)
(defalias 'ement-room-membership-events-earliest-ts #[257 "\301!>\204 \302\303\304D\"\210\211\305H\207" [cl-struct-ement-room-membership-events-tags type-of signal wrong-type-argument ement-room-membership-events 2] 5 (#$ . 2875)])
(byte-code "\300\301\302\303#\300\207" [function-put ement-room-membership-events-earliest-ts side-effect-free t] 4)#@95 compiler-macro for inlining `ement-room-membership-events-latest-ts'.

(fn CL-WHOLE-ARG CL-X)
(defalias 'ement-room-membership-events-latest-ts--cmacro #[514 "\300\301\302\303\211\211&\207" [cl--defsubst-expand (cl-x) (cl-block ement-room-membership-events-latest-ts (progn (or (ement-room-membership-events-p cl-x) (signal 'wrong-type-argument (list 'ement-room-membership-events cl-x))) (aref cl-x 3))) nil] 9 (#$ . 3346)])
(byte-code "\300\301\302\303#\300\207" [define-symbol-prop ement-room-membership-events-latest-ts compiler-macro ement-room-membership-events-latest-ts--cmacro] 4)#@110 Access slot "latest-ts" of `ement-room-membership-events' struct CL-X.
Timestamp of latest event.

(fn CL-X)
(defalias 'ement-room-membership-events-latest-ts #[257 "\301!>\204 \302\303\304D\"\210\211\305H\207" [cl-struct-ement-room-membership-events-tags type-of signal wrong-type-argument ement-room-membership-events 3] 5 (#$ . 3945)])
(byte-code "\300\301\302\303#\304\305\306\"\207" [function-put ement-room-membership-events-latest-ts side-effect-free t defalias copy-ement-room-membership-events copy-sequence] 4)#@125 compiler-macro for inlining `make-ement-room-membership-events'.

(fn CL-WHOLE &cl-quote &key EVENTS EARLIEST-TS LATEST-TS)
(defalias 'make-ement-room-membership-events--cmacro #[385 "\300\301\"A@\300\302\"A@\300\303\"A@\211\203H \211@\304>\2031 \211A\204) \305\306@\"\210\211AA\262\202 \307>A@\203? \310\262\202 \305\311@\"\210\202 \210\312\313\314\310\310&\207" [plist-member :events :earliest-ts :latest-ts (:events :earliest-ts :latest-ts :allow-other-keys) error "Missing argument for %s" :allow-other-keys nil "Keyword argument %s not one of (:events :earliest-ts :latest-ts)" cl--defsubst-expand (events earliest-ts latest-ts) (cl-block make-ement-room-membership-events (record 'ement-room-membership-events events earliest-ts latest-ts))] 14 (#$ . 4476)])
(byte-code "\300\301\302\303#\300\207" [define-symbol-prop make-ement-room-membership-events compiler-macro make-ement-room-membership-events--cmacro] 4)#@105 Constructor for objects of type `ement-room-membership-events'.

(fn &key EVENTS EARLIEST-TS LATEST-TS)
(defalias 'make-ement-room-membership-events #[128 "\300\301\"A@\300\302\"A@\300\303\"A@\211\203H \211@\304>\2031 \211A\204) \305\306@\"\210\211AA\262\202 \307>A@\203? \310\262\202 \305\311@\"\210\202 \210\312\313$\207" [plist-member :events :earliest-ts :latest-ts (:events :earliest-ts :latest-ts :allow-other-keys) error "Missing argument for %s" :allow-other-keys nil "Keyword argument %s not one of (:events :earliest-ts :latest-ts)" record ement-room-membership-events] 9 (#$ . 5422)])
(byte-code "\300\301\302\303#\304\305\306\307\310\311\312\313\305\303&	\207" [function-put make-ement-room-membership-events side-effect-free t cl-struct-define ement-room-membership-events "Struct grouping membership events.\nAfter adding events, use `ement-room-membership-events--update'\nto sort events and update other slots." cl-structure-object record nil ((cl-tag-slot) (events nil :documentation "Membership events, latest first.") (earliest-ts nil :documentation "Timestamp of earliest event.") (latest-ts nil :documentation "Timestamp of latest event.")) cl-struct-ement-room-membership-events-tags] 11)#@76 Return STRUCT having sorted its events and updated its slots.

(fn STRUCT)
(defalias 'ement-room-membership-events--update #[257 "\302!>\204 \303\304\305D\"\210\211\306\307\302!>\204\" \303\304\305D\"\210\306H\310\311\312\313%I\210\302!>\204; \303\304\305D\"\210\211\306\314\302!>\204N \303\304\305D\"\210\306H\315\310\316$I\210\302!>\204f \303\304\305D\"\210\211\317\302\320\302!>\204z \303\304\305D\"\210\306H!@!	>\204\243 \303\304\321\320\302!>\204\232 \303\304\305	D\"\210\306H!@D\"\210\320\302!>\204\264 \303\304\305D\"\210\306H!@\322HI\210\302!>\204\314 \303\304\305D\"\210\211\323\302\211!>\204\337 \303\304\305D\"\210\306H@!	>\204\303\304\321\302!>\204\375 \303\304\305D\"\210\306H@D\"\210\302!>\204\303\304\305D\"\210\306H@\322HI\210\207" [cl-struct-ement-room-membership-events-tags cl-struct-ement-event-tags type-of signal wrong-type-argument ement-room-membership-events 1 cl-delete-duplicates :key ement-event-id :test equal cl-sort > ement-event-origin-server-ts 2 last ement-event 4 3] 11 (#$ . 6653)])#@30 EWOC for Ement room buffers.
(defvar ement-ewoc nil (#$ . 7735))
(make-variable-buffer-local 'ement-ewoc)#@32 Ement room for current buffer.
(defvar ement-room nil (#$ . 7846))
(make-variable-buffer-local 'ement-room)#@35 Ement session for current buffer.
(defvar ement-session nil (#$ . 7959))
(make-variable-buffer-local 'ement-session)#@85 Non-nil when earlier messages are being loaded.
Used to avoid overlapping requests.
(defvar ement-room-retro-loading nil (#$ . 8081))
(make-variable-buffer-local 'ement-room-retro-loading)#@82 When non-nil, the user is editing this event.
Used by `ement-room-send-message'.
(defvar ement-room-editing-event nil (#$ . 8275))
(make-variable-buffer-local 'ement-room-editing-event)#@86 When non-nil, the user is replying to this event.
Used by `ement-room-send-message'.
(defvar ement-room-replying-to-event nil (#$ . 8466))
(make-variable-buffer-local 'ement-room-replying-to-event)#@35 Used by `ement-room-write-reply'.
(defvar ement-room-replying-to-overlay nil (#$ . 8669))
(make-variable-buffer-local 'ement-room-replying-to-overlay)#@86 Maps event ID to request updating read receipt to that event.
An alist of one entry.
(defvar ement-room-read-receipt-request nil (#$ . 8825))
(make-variable-buffer-local 'ement-room-read-receipt-request)#@139 Normal hook run by `ement-room-read-string' after switching to minibuffer.
Should be used to, e.g. propagate variables to the minibuffer.
(defvar ement-room-read-string-setup-hook nil (#$ . 9035))#@88 Hook run in compose buffers when created.
Used to, e.g. call `ement-room-compose-org'.
(defvar ement-room-compose-hook nil (#$ . 9237))#@1028 The `ement-room-mode' keymap under `ement-room-self-insert-mode'.

Set as the parent keymap of `ement-room-mode-effective-keymap'
when `ement-room-self-insert-mode' is enabled.

This keymap is derived from the `ement-room-self-insert-chars'
and `ement-room-self-insert-commands' user options, along with
`ement-room-mode-map-prefix-key' which provides access to the
full `ement-room-mode-map'.  (Non-conflicting key bindings from
`ement-room-mode-map' are also available directly).

This keymap is generated when `ement-room-self-insert-mode' is
enabled, and after customizing any of the above options when the
minor mode is enabled.

The hook `ement-room-mode-self-insert-keymap-update-hook' runs
after generating this keymap.

Note: Emacs bug#66792 may cause `describe-keymap' to include
unreachable key bindings from the parent `ement-room-mode-map' in
its help output.  This problem affects only the help, and we work
around it for the `ement-room-mode' help; but when viewing the
keymap directly the issue may be visible.
(defvar ement-room-mode-self-insert-keymap (make-sparse-keymap) (#$ . 9380))#@32 Keymap for Ement room buffers.
(defvar ement-room-mode-map (byte-code "\300 \301\211\211\203! \211@\302\303A!!\304\305@!#\266A\266\202\202 \210\304\306\307#\210\304\310\311#\210\304\312\313#\210\304\314\315#\210\304\316\317#\210\304\320\321#\210\304\322\323#\210\304\324\325#\210\304\326\321#\210\304\327\330#\210\304\331\332#\210\304\333\334#\210\304\335\336#\210\304\337\340#\210\304\341\342#\210\304\343\344#\210\304\345\346#\210\304\347\350#\210\304\351\352#\210\304\353\354#\210\304\355\356#\210\304\357\360#\210\304\361\362#\210\304\363\364#\210\304\365\366#\210\304\367\370#\210\304\371\372#\210\304\373\374#\210\304\375\376#\210\304\377\201@ #\210\304\201A \201B #\210\304\201C \201D #\210\304\201E \201F #\210\304\201G \201H #\210\304\201I \201J #\210\304\201K \201L #\210\304\201M \201N #\210\304\201O \201P #\210\304\201Q \201R #\210\304\201S \201T #\210\304\201U \201V #\210\304\201W \201X #\210\304\201Y \201Z #\210\304\201[ \201\\ #\210\304\201] \201^ #\210\304\201_ \201` #\210\207" [make-sparse-keymap (("M-g" . "group:switching") ("s" . "group:messages") ("u" . "group:users") ("r" . "group:room") ("R" . "group:membership")) define-prefix-command make-symbol define-key kbd "?" ement-room-transient "n" ement-room-goto-next "N" end-of-buffer "p" ement-room-goto-prev " " ement-room-scroll-up-mark-read [33554464] ement-room-scroll-down-command [134217831 134217840] ement-room-goto-fully-read-marker "m" ement-room-mark-read [remap scroll-down-command] [remap mwheel-scroll] ement-room-mwheel-scroll [tab] forward-button [backtab] backward-button [134217831 134217836] ement-room-list [134217831 134217842] ement-view-room [134217831 134217837] ement-notify-switch-to-mentions-buffer [134217831 134217838] ement-notify-switch-to-notifications-buffer "q" quit-window "" ement-room-dispatch-new-message [134217741] ement-room-dispatch-new-message-alt [S-return] ement-room-dispatch-reply-to-message [insert] ement-room-dispatch-edit-message "" ement-room-delete-message "sr" ement-room-send-reaction "se" ement-room-send-emote "sf" ement-room-send-file "si" ement-room-send-image "v" ement-room-view-event "D" ement-room-download-file "u" ement-send-direct-message "ui" ement-invite-user "uI" ement-ignore-user [134217843 111] ement-room-occur "rd" ement-describe-room "rm" ement-list-members "rt" ement-room-set-topic "rf" ement-room-set-message-format "rn" ement-room-set-notification-state "rN" ement-room-override-name "rT" ement-tag-room "Rc" ement-create-room "Rj" ement-join-room "Rl" ement-leave-room "RF" ement-forget-room "Rn" ement-room-set-display-name "Rs" ement-room-toggle-space "g" ement-room-sync] 9) (#$ . 10489))#@244 The actual keymap used in `ement-room-mode'.

This keymap reflects the state of `ement-room-self-insert-mode',
with a parent of `ement-room-mode-map' when the mode is disabled,
or `ement-room-mode-self-insert-keymap' when the mode is enabled.
(defvar ement-room-mode-effective-keymap (byte-code "\301 \302\"\210\207" [ement-room-mode-map make-sparse-keymap set-keymap-parent] 4) (#$ . 13200))#@539 The keymap advertised by `ement-room-mode'.

This keymap should represent the functional behaviour of
`ement-room-mode-effective-keymap' without the confusion arising
from Emacs bug#66792 on account of the effective keymap having
`ement-room-mode-map' as a parent if `ement-room-self-insert-mode'
is enabled.

Because it does not always have `ement-room-mode-map' as a
parent, it is possible for that map to get out of sync with the
advertised map, but `ement-room-mode-self-insert-keymap-update'
makes a best effort to keep it accurate.
(defvar ement-room-mode--advertised-keymap ement-room-mode-map (#$ . 13601))#@42 Keymap used in `ement-room-read-string'.
(defvar ement-room-minibuffer-map (byte-code "\301 \302\"\210\303\304\305#\210\207" [minibuffer-local-map make-sparse-keymap set-keymap-parent define-key "'" ement-room-compose-from-minibuffer] 5) (#$ . 14221))#@44 Keymap used in `ement-room-send-reaction'.
(defvar ement-room-reaction-map (byte-code "\301 \302\303\304#\210\305\306!\203 \302\307\306#\210\305\310!\203  \302\311\310#\210\312\313\"\203- \302\314\315#\210\207" [input-method-alist make-sparse-keymap define-key "c" insert-char commandp emoji-insert "i" emoji-search "s" assoc "emoji" "m" ement-room-use-emoji-input-method] 5) (#$ . 14482))#@105 Non-nil when sender is displayed in headers.
In that case, sender names are aligned to the margin edge.
(defvar ement-room-sender-in-headers nil (#$ . 14884))#@49 Default RoomEventFilter for /messages requests.
(defvar ement-room-messages-filter '((lazy_load_members . t)) (#$ . 15048))#@48 Timer used to send notifications while typing.
(defvar ement-room-typing-timer nil (#$ . 15177))#@35 Regexp matching "matrix.to" URLs.
(defvar ement-room-matrix.to-url-regexp "https?://matrix\\.to/#/\\([!#][^/]+\\)\\(?:/\\(\\$[^/?]+\\)\\)?\\(?:\\?\\([^z-a]+\\)\\)?" (#$ . 15279))#@103 History list of messages entered with `ement-room' commands.
Does not include filenames, emotes, etc.
(defvar ement-room-message-history nil (#$ . 15464))#@60 History list of emotes entered with `ement-room' commands.
(defvar ement-room-emote-history nil (#$ . 15624))
(byte-code "\300\301\302\303\304\305\304\306&\210\300\305\302\307\304\310%\210\311\312\313\314\315DD\316\317\320%\210\311\321\313\314\322DD\323\317\324%\210\311\325\313\314\326DD\327\317\330%\210\311\331\313\314\332DD\333\317\334%\207" [custom-declare-group ement-room-faces nil "Faces for room buffers." :group ement-room ement-faces "Options for room buffers." ement custom-declare-variable ement-room-timestamp-header-align funcall function #[0 "\300\207" [right] 1 #1=""] "Where to align timestamp headers." :type (choice (const :tag "Left" left) (const :tag "Center" center) (const :tag "Right" right)) ement-room-view-hook #[0 "\300\207" [(ement-room-view-hook-room-list-auto-update)] 1 #1#] "Functions called when `ement-room-view' is called.\nCalled with two arguments, the room and the session." hook ement-room-reaction-names-limit #[0 "\300\207" [3] 1 #1#] "Up to this many users, show a reaction's senders' names.\nIf more than this many users have sent a reaction, show the\nnumber of senders instead (and the names in a tooltip)." natnum ement-room-hide-redacted-message-content #[0 "\300\207" [t] 1 #1#] "Hide content in redacted messages.\nIf nil, redacted messages' content will remain visible with a\nstrikethrough face until the session is terminated (a new session\nwill not receive the redacted content).\n\nDisabling this option may be useful for room administrators and\nmoderators, so they can see content redacted by other users and\nhandle it appropriately.  However, one should use this option\nwith caution, as it will keep unpleasant content visible even\nafter it has been redacted.\n\nAfter changing this option, a room's buffer must be killed and\nreopened for existing messages to be rendered accordingly." (choice (const :tag "Hide content" t) (const :tag "Strikethrough" nil))] 8)
(custom-declare-face 'ement-room-name '((t (:inherit font-lock-function-name-face))) "Room name shown in header line." :group 'ement-room-faces)
(custom-declare-face 'ement-room-membership '((t (:height 0.8 :inherit font-lock-comment-face))) "Membership events (join/part)." :group 'ement-room-faces)
(custom-declare-face 'ement-room-reactions '((t (:inherit font-lock-comment-face :height 0.9))) "Reactions to messages (including the user count)." :group 'ement-room-faces)
(custom-declare-face 'ement-room-reactions-key '((t (:inherit ement-room-reactions :height 1.5))) "Reactions to messages (the key, i.e. the emoji part).\nUses a separate face to allow the key to be shown at a different\nsize, because in some fonts, emojis are too small relative to\nnormal text." :group 'ement-room-faces)
(custom-declare-face 'ement-room-timestamp '((t (:inherit font-lock-comment-face))) "Event timestamps." :group 'ement-room-faces)
(custom-declare-face 'ement-room-user '((t (:inherit font-lock-function-name-face :weight bold :overline t))) "Usernames." :group 'ement-room-faces)
(custom-declare-face 'ement-room-self '((t (:inherit (font-lock-variable-name-face ement-room-user) :weight bold))) "Own username." :group 'ement-room-faces)
(custom-declare-face 'ement-room-message-text '((t (:inherit default))) "Text message bodies." :group 'ement-room-faces)
(custom-declare-face 'ement-room-message-emote '((t (:inherit italic))) "Emote message bodies." :group 'ement-room-faces)
(custom-declare-face 'ement-room-quote '((t (:height 0.9 :inherit font-lock-comment-face))) "Quoted parts of messages.\nAnything wrapped by HTML BLOCKQUOTE tag." :group 'ement-room-faces)
(custom-declare-face 'ement-room-redacted '((t (:strike-through t))) "Redacted messages." :group 'ement-room-faces)
(custom-declare-face 'ement-room-self-message '((t (:inherit (font-lock-variable-name-face)))) "Oneself's message bodies.\nNote that this does not need to inherit\n`ement-room-message-text', because that face is combined with\nthis one automatically." :group 'ement-room-faces)
(custom-declare-face 'ement-room-timestamp-header '((t (:inherit header-line :weight bold :height 1.1))) "Timestamp headers." :group 'ement-room-faces)
(custom-declare-face 'ement-room-mention (if (version< emacs-version "27.1") '((t (:inherit hl-line))) '((t (:inherit hl-line :extend t)))) "Messages that mention the local user." :group 'ement-room-faces)
(custom-declare-face 'ement-room-wrap-prefix '((t :inherit highlight)) "Face applied to `ement-room-wrap-prefix', which see." :group 'ement-room-faces)
(byte-code "\301\302\303\304\305DD\306\307\310%\210\301\311\303\304\312DD\313\307\314%\210\301\315\303\304\316DD\317\307\320%\210\301\321\303\304\322DD\323\307\320%\210\301\324\303\304\325DD\326\307\327%\210\301\330\303\304\331DD\332\307\333%\210\334\330\335\336#\210\301\337\303\304\340DD\341\307\310%\210\301\342\303\304\343DD\344\307\310%\210\301\345\303\304\346DD\347\307\350%\210\301\351\303\304\352DD\353\307\320%\210\301\354\303\304\355DD\356\307\320%\210\301\357\303\304\360DD\361\307\314%\210\301\362\303\304\363DD\364\307\314%\210\301\365\303\304\366DD\367\307\370%\210\301\371\303\304\372DD\373\307\374\336&\210\301\375\303\304\376DD\377\307\201@ %\210\301\201A \303\304\201B DD\201C \307\314%\207" [display-buffer--action-custom-type custom-declare-variable ement-room-ellipsis funcall function #[0 "\300\207" ["⋮"] 1 #1=""] "String used when abbreviating certain strings." :type string ement-room-avatars #[0 "\300 \207" [display-images-p] 1 #1#] "Show room avatars." boolean ement-room-avatar-max-width #[0 "\300\207" [32] 1 #1#] "Maximum width in pixels of room avatars shown in header lines." integer ement-room-avatar-max-height #[0 "\300\207" [32] 1 #1#] "Maximum height in pixels of room avatars shown in header lines." ement-room-coalesce-events #[0 "\300\207" [100] 1 #1#] "Coalesce certain events in room buffers.\nFor example, membership events can be overwhelming in large\nrooms, especially ones bridged to IRC.  This option groups them\ntogether so they take less space.\n\nThe current, naïve implementation re-renders events as they are\ncoalesced, which can cause a performance problem in unusual\ncircumstances, so the number of events coalesced into a single,\nrendered event may be limited." (choice (integer :tag "Up to this many events") (const :tag "An unlimited number of events" :doc "Note that this choice may cause performance problems in rooms with very large numbers of consecutive membership events, but in most cases it should be fine." t) (const :tag "Don't coalesce" nil)) ement-room-header-line-format #[0 "\300\207" [(:eval (concat (if ement-room-avatars (or (ement-room-avatar ement-room) #1#) #1#) " " (propertize (ement-room--escape-% (or (ement-room-display-name ement-room) "[no room name]")) 'face 'ement-room-name) ": " (propertize (ement-room--escape-% (or (ement-room-topic ement-room) "[no topic]")) 'help-echo (ement-room-topic ement-room))))] 1 #1#] "Header line format for room buffers.\nSee Info node `(elisp)Header lines'." sexp put risky-local-variable t ement-room-buffer-name-prefix #[0 "\300\207" ["*Ement Room: "] 1 #1#] "Prefix for Ement room buffer names." ement-room-buffer-name-suffix #[0 "\300\207" ["*"] 1 #1#] "Suffix for Ement room buffer names." ement-room-timestamp-format #[0 "\300\207" ["%H:%M:%S"] 1 #1#] "Format string for event timestamps.\nSee function `format-time-string'." (choice (const "%H:%M:%S") (const "%Y-%m-%d %H:%M:%S") string) ement-room-left-margin-width #[0 "\300\207" [0] 1 #1#] "Width of left margin in room buffers.\nWhen using a non-graphical display, this should be set slightly\nwider than when using a graphical display, to prevent sender\ndisplay names from colliding with event text." ement-room-right-margin-width #[0 "G\207" [ement-room-timestamp-format] 1 #1#] "Width of right margin in room buffers." ement-room-sender-headers #[0 "\300\207" [t] 1 #1#] "Show sender headers.\nAutomatically set by setting `ement-room-message-format-spec',\nbut may be overridden manually." ement-room-unread-only-counts-notifications #[0 "\300\207" [t] 1 #1#] "Only use notification counts to mark rooms unread.\nNotification counts are set by the server based on each room's\nnotification settings.  Otherwise, whether a room is marked\nunread depends on the room's fully-read marker, read-receipt\nmarker, whether the local user sent the latest events, etc." ement-room-compose-method #[0 "\300\207" [minibuffer] 1 #1#] "How to compose messages.\n\nThe value `minibuffer' means the minibuffer will be used to write\nand edit messages.  You can use \\<ement-room-minibuffer-map>\\[ement-room-compose-from-minibuffer] to switch from the minibuffer\nto a separate compose buffer, and \\[save-buffer] in the compose buffer\nwill then return you to the minibuffer to confirm the message\nbefore sending.\n\nThe value `compose-buffer' means that the minibuffer is not used --\nmessages are written in a compose buffer by default, and \\[save-buffer]\nsends the composed message directly." (choice (const :tag "Minibuffer" minibuffer) (const :tag "Compose buffer" compose-buffer)) ement-room-compose-buffer-display-action #[0 "\300\301B\207" [display-buffer-below-selected ((window-height . 3) (inhibit-same-window . t) (reusable-frames))] 2 #1#] "`display-buffer' action for displaying compose buffers.\n\nSee also option `ement-room-compose-buffer-window-auto-height'\nand `ement-room-compose-buffer-window-dedicated'." :risky ement-room-compose-buffer-window-dedicated #[0 "\300\207" [created] 1 #1#] "Whether windows for compose buffers should be dedicated.\n\nA dedicated compose buffer window will not be used to display any\nother buffer, and will be deleted once the message has been sent\nor aborted (see `ement-room-compose-buffer-quit-restore-window').\n\nThe values t and nil mean \"always\" and \"never\" respectively.\n\nThe value `created' means newly-created windows are dedicated.\n(The default `ement-room-compose-buffer-display-action' always\ncreates a new window.)\n\nThe value `auto-height' means that windows will be dedicated if\nthe option `ement-room-compose-buffer-window-auto-height' is\nenabled (this option generally keeps the windows too small to\nusefully display other buffers).\n\nThe value `delete' means that windows will not be dedicated, but\nthey will still be deleted once the message is sent or aborted\n(even when they have also been used to display other buffers).\n\nSee also `set-window-dedicated-p' and\n`switch-to-buffer-in-dedicated-window'." (radio (const :tag "Always" t) (const :tag "Never" nil) (const :tag "Never (but always delete window)" delete) (const :tag "Newly-created windows" created) (const :tag "When auto-height enabled" auto-height)) ement-room-compose-buffer-window-auto-height #[0 "\300\207" [t] 1 #1#] "Dynamically match the compose buffer window height to its contents.\nSee also `ement-room-compose-buffer-window-auto-height-max' and\n`ement-room-compose-buffer-window-auto-height-min'."] 8)#@64 The buffer-local `window-size-fixed' value in compose buffers.
(defvar ement-room-compose-buffer-window-auto-height-fixed nil (#$ . 26582))#@62 Whether to adjust the window height for pixel-precise lines.
(defvar ement-room-compose-buffer-window-auto-height-pixelwise t (#$ . 26727))
(byte-code "\300\301\302\303\304DD\305\306\307%\210\300\310\302\303\311DD\312\306\313%\210\300\314\302\303\315DD\316\306\317%\207" [custom-declare-variable ement-room-compose-buffer-window-auto-height-min funcall function #[0 "\300\207" [nil] 1 #1=""] "If non-nil, limits the body height of the compose buffer window.\n\nSee also option `ement-room-compose-buffer-window-auto-height'\nand `ement-room-compose-buffer-window-auto-height-max'." :type (choice (const :tag "Default" nil) (natnum :tag "Lines")) ement-room-compose-buffer-window-auto-height-max #[0 "\300\207" [nil] 1 #1#] "If non-nil, limits the body height of the compose buffer window.\n\nSee also option `ement-room-compose-buffer-window-auto-height'\nand `ement-room-compose-buffer-window-auto-height-min'." (choice (const :tag "Default" nil) (natnum :tag "Lines")) ement-room-mode-self-insert-keymap-update-hook #[0 "\300\207" [nil] 1 #1#] "Hook run after rebuilding `ement-room-mode-self-insert-keymap'.\n\nThis happens at the time `ement-room-self-insert-mode' is\nenabled, and also if user options `ement-room-self-insert-chars',\n`ement-room-self-insert-commands', or\n`ement-room-mode-map-prefix-key' are customized while the mode is\nenabled.\n\nYou can use this hook to define any desired custom bindings which\nare not accounted for by those user options." hook] 6)#@100 Rebuilds `ement-room-mode-self-insert-keymap'.
Also rebuilds `ement-room-mode--advertised-keymap'.
(defalias 'ement-room-mode-self-insert-keymap-update #[0 "\306 \211\203C \211@\211:\2034 \307\310\311\"@AX\203/ \312I\210\313\314#\210T\262\202 \266\202< \313\315!\314#\210A\266\202\202 \210\316\301!\203T 	\203T \313	\n#\210\317!\320\n\"\210\316\304!\203g \f\204l \n\202w \211\321\322\317\n!\"\266\316\304!\203\207 \f\203\207 D\202\211 C\211\211\203\260 \211@\211\203\250 \211@\313\315\323\"\314#\210A\266\202\202\222 \210A\266\202\202\212 \266\324\325!\207" [ement-room-self-insert-chars ement-room-mode-map-prefix-key ement-room-mode-map ement-room-mode-self-insert-keymap ement-room-self-insert-mode ement-room-mode--advertised-keymap make-sparse-keymap make-vector 1 nil 0 define-key ement-room-self-insert-new-message vector boundp copy-keymap set-keymap-parent #[514 "\301\302!\"?\205 \303\302!#\207" [ement-room-mode--advertised-keymap lookup-key vector define-key] 6 "\n\n(fn KEY DEFINITION)"] map-keymap remap run-hooks ement-room-mode-self-insert-keymap-update-hook ement-room-self-insert-commands] 11 (#$ . 28213)])#@179 Sets the parent keymap for `ement-room-mode-effective-keymap'.

Either `ement-room-mode-self-insert-keymap' or `ement-room-mode-map',
depending on `ement-room-self-insert-mode'.
(defalias 'ement-room-mode-effective-keymap-update #[0 "\304\305\301!\203 	\203 \n\202 \"\207" [ement-room-mode-effective-keymap ement-room-self-insert-mode ement-room-mode-self-insert-keymap ement-room-mode-map set-keymap-parent boundp] 4 (#$ . 29387)])#@303 Setter for options affecting `ement-room-self-insert-mode'.

This is the setter function for `ement-room-self-insert-chars'
and `ement-room-self-insert-commands'.

Sets the value with (set-default-toplevel-value OPTION VALUE),
and then rebuilds `ement-room-mode-self-insert-keymap'.

(fn OPTION VALUE)
(defalias 'ement-room-self-insert-option-setter #[514 "\301\"\210\302\300!\205 \205 \303 \210\304 \207" [ement-room-self-insert-mode set-default-toplevel-value boundp ement-room-mode-self-insert-keymap-update ement-room-mode-effective-keymap-update] 5 (#$ . 29831)])
(byte-code "\301\302\303\304\305DD\306\307\310\311\312&\210\301\313\303\304\314DD\315\307\316\311\312&\210\301\317\303\304\320DD\321\307\322\311\312&\210\301\323\303\304\324DD\325\307\326\327\330\331\332!\205@ \333\331\334!\205G \335\336\337\"\205O \340\341$BB%\207" [input-method-alist custom-declare-variable ement-room-self-insert-chars funcall function #[0 "\300\207" [((33 . 62) (64 . 126))] 1 #1=""] "Characters handled by `ement-room-self-insert-mode'.\n\nThese are in addition to any `self-insert-command' key bindings\n-- this list is to ensure that certain keys will be treated this\nway even when they have `ement-room-mode-map' bindings.\n\nCons cell elements represent the range from the car to the cdr\n(inclusive).  The default value covers the common \"printable\"\nASCII characters excluding SPC (32), ? (63), and DEL (127).\n\nCustomizing this option updates `ement-room-mode-self-insert-keymap'\nvia the setter function `ement-room-self-insert-option-setter'.\nTo do the same in lisp code, set the option with `setopt'.\n\nSee also `ement-room-self-insert-commands'." :type (repeat (choice (character :tag "Character") (cons :tag "Character range" (character :tag "From") (character :tag "To")))) :set ement-room-self-insert-option-setter ement-room-self-insert-commands #[0 "\300\207" [(self-insert-command yank)] 1 #1#] "Commands handled by `ement-room-self-insert-mode'.\n\nWhen the mode is enabled, the listed commands are remapped to\n`ement-room-self-insert-new-message' such that when one of those\ncommands is invoked in a room buffer, a new message will be\nstarted and the event which triggered the command (typically a\n`self-insert-command' key binding) will be re-issued in the\nmessage buffer.\n\nCustomizing this option updates `ement-room-mode-self-insert-keymap'\nvia the setter function `ement-room-self-insert-option-setter'.\nTo do the same in lisp code, set the option with `setopt'.\n\nSee also `ement-room-self-insert-chars'." (repeat (function :tag "Command")) ement-room-mode-map-prefix-key #[0 "\300\207" [""] 1 #1#] "A prefix key sequence to access `ement-room-mode-map'.\nActive when `ement-room-self-insert-mode' is enabled.\n\nThe default key is DEL.\n\nCustomizing this option updates `ement-room-mode-self-insert-keymap'\nvia the setter function `ement-room-self-insert-option-setter'.\nTo do the same in lisp code, set the option with `setopt'." key-sequence ement-room-reaction-picker #[0 "\300\301!\203 \301\207\302\207" [commandp emoji-search insert-char] 2 #1#] "Command used to select a reaction by `ement-room-send-reaction'.\nShould be set to a command that somehow prompts the user for an\nemoji and inserts it into the current buffer.  In Emacs 29\nreasonable choices include `emoji-insert' which uses a transient\ninterface, and `emoji-search' which uses `completing-read'.  If\nthose are not available, one can use `insert-char'." choice (const :tag "Complete unicode character name" insert-char) append commandp emoji-insert ((const :tag "Categorized emoji menu" emoji-insert)) emoji-search ((const :tag "Complete emoji name" emoji-search)) assoc "emoji" ((const :tag "Emoji input method" ement-room-use-emoji-input-method)) ((const :tag "Type an emoji without assistance" ignore) (function :tag "Use other command"))] 13)#@89 Whether sender is shown in left margin.
Set by `ement-room-message-format-spec-setter'.
(defvar ement-room-sender-in-left-margin nil (#$ . 33703))#@323 Set relevant options for `ement-room-message-format-spec', which see.
To be used as that option's setter.  OPTION and VALUE are
received from setting the customization option.  If LOCAL is
non-nil, set the variables buffer-locally (i.e. when called from
`ement-room-set-message-format'.

(fn OPTION VALUE &optional LOCAL)
(defalias 'ement-room-message-format-spec-setter #[770 "\211\203 \306!L\210\202 \307\"\210\310\267\202\211\203% \306\300!\210\311\202' \311\211\2034 \306\301!\210\312\2026 \312\211\203C \306\302!\210\313\202E \313\211\203R \306\303!\210\313\202T \313\211\203a \306\304!\210\314\202\335\314\202\335\211\203s \306\300!\210\315\202u \315\211\203\202 \306\301!\210\312\202\204 \312\211\203\221 \306\302!\210\314\202\223 \314\211\203\240 \306\303!\210\314\202\242 \314\211\203\257 \306\304!\210\313\202\335\313\202\335\211\203\301 \306\300!\210\311\202\303 \311\211\203\320 \306\301!\210\311\202\322 \311\211\203\337 \306\302!\210\314\202\341 \314\211\203\356 \306\303!\210\314\202\360 \314\211\203\375 \306\304!\210\314\202\335\314\202\335\211\203!\306\300!\210\316\314\317\313$\266\203\203\315\202\311\2025\316\314\317\313$\266\203\2033\315\2024\311\211\203T\306\301!\210\320\314\317\313$\266\203\203O\312\202P\311\202h\320\314\317\313$\266\203\203f\312\202g\311\211\203\201\306\304!\210\321\314\317\313$\266\203??\202\217\321\314\317\313$\266\203??\211\203\247\306\302!\210\322\314\317\313$\266\203?\202\264\322\314\317\313$\266\203?\211\203\314\306\303!\210\323\314\317\313$\266\203?\202\331\323\314\317\313$\266\203?\324\325!\210\204\374\326\327!\210\211\203\365\330\331!\210\332\331\333\"\210\202\374\334\331\314\335\314$\210\211?\205\336\305!\205\205@\205\324\337!\207" [ement-room-left-margin-width ement-room-right-margin-width ement-room-sender-headers ement-room-sender-in-headers ement-room-sender-in-left-margin ement-sessions make-local-variable set-default #s(hash-table size 3 test equal rehash-size 1.5 rehash-threshold 0.8125 purecopy t data ("%B%r%R%t" 24 "%S%L%B%r%R%t" 102 "[%t] %S> %B%r" 180)) 0 8 t nil 12 "%L" string-match "%R" "[^z-a]+\\(?:%[Ss]\\)[^z-a]+%L" "%S" "\\(?:%[Ss]\\)" message "Ement: When using custom message format, setting margin widths may be necessary" require face-remap face-remap-reset-base ement-room-user face-remap-add-relative (:overline nil) set-face-attribute :overline boundp "Ement: Kill and reopen room buffers to display in new format"] 11 (#$ . 33856)])
(byte-code "\300\301\302\303\304DD\305\306\307\310\311\312\313\314\315&\210\300\316\302\303\317DD\320\306\321%\210\300\322\302\303\323DD\324\306\325%\210\300\326\302\303\327DD\330\306\331%\210\300\332\302\303\333DD\334\306\335%\210\336\337\340\341#\210\342\211\203k \211@\337N\203d \340N\204d \343\340\337N#\210A\266\202\202J \210\344\337\340\345#\210\300\340\302\303\346DD\347\306\350%\210\300\351\302\303\352DD\353\306\354%\210\300\355\302\303\356DD\357\306\360%\210\300\361\302\303\362DD\363\306\321%\210\300\364\302\303\365DD\366\306\367\310\370&\210\300\371\302\303\372DD\373\306\374%\210\300\375\302\303\376DD\377\306\335%\210\300\201@ \302\303\201A DD\201B \306\335%\210\300\201C \302\303\201D DD\201E \306\335%\210\300\201F \302\303\201G DD\201H \306\335%\210\300\201I \302\303\201J DD\201K \306\201L %\210\201M \201N \341\201O \201P \315%\210\300\201N \302\303\201Q DD\201R \306\201S %\210\300\201T \302\303\201U DD\201V \306\335%\210\300\201W \302\303\201X DD\201Y \306\201Z \310\201[ &\210\300\201\\ \302\303\201] DD\201^ \306\201Z %\207" [custom-declare-variable ement-room-message-format-spec funcall function #[0 "\300\207" ["%S%L%B%r%R%t"] 1 #1=""] "Format messages according to this spec.\nIt may contain these specifiers:\n\n  %L  End of left margin\n  %R  Start of right margin\n  %W  End of wrap-prefix\n\n  %b  Message body (plain-text)\n  %B  Message body (formatted if available)\n  %i  Event ID\n  %O  Room display name (used for mentions buffer)\n  %r  Reactions\n  %s  Sender ID\n  %S  Sender display name\n  %t  Event timestamp, formatted according to\n      `ement-room-timestamp-format'\n\nNote that margin sizes must be set manually with\n`ement-room-left-margin-width' and\n`ement-room-right-margin-width'." :type (choice (const :tag "IRC-style using margins" "%S%L%B%r%R%t") (const :tag "IRC-style without margins" "[%t] %S> %B%r") (const :tag "IRC-style without margins, with wrap-prefix" "[%t] %S> %W%B%r") (const :tag "IRC-style with right margin, with wrap-prefix" "%S> %W%B%r%R%t") (const :tag "Elemental" "%B%r%R%t") (string :tag "Custom format")) :set ement-room-message-format-spec-setter :set-after (ement-room-left-margin-width ement-room-right-margin-width ement-room-sender-headers) :require ement-room ement-room-retro-messages-number #[0 "\300\207" [30] 1 #1#] "Number of messages to retrieve when loading earlier messages." integer ement-room-timestamp-header-format #[0 "\300\207" [" %H:%M "] 1 #1#] "Format string for timestamp headers where date is unchanged.\nSee function `format-time-string'.  If this string ends in a\nnewline, its background color will extend to the end of the\nline." (choice (const :tag "Time-only" " %H:%M ") (const :tag "Always show date" " %Y-%m-%d %H:%M ") string) ement-room-timestamp-header-with-date-format #[0 "\300\207" [" %Y-%m-%d (%A)\n"] 1 #1#] "Format string for timestamp headers where date changes.\nSee function `format-time-string'.  If this string ends in a\nnewline, its background color will extend to the end of the\nline." (choice (const " %Y-%m-%d (%A)\n") string) ement-room-replace-edited-messages #[0 "\300\207" [t] 1 #1#] "Replace edited messages with their new content.\nWhen nil, edited messages are displayed as new messages, leaving\nthe original messages visible." boolean defvaralias ement-room-shr-use-fonts ement-room-use-variable-pitch nil (saved-value saved-variable-comment) put make-obsolete-variable "ement-0.14" #[0 "\300\207" [nil] 1 #1#] "Use proportional fonts for message bodies.\nIf non-nil, plain text message bodies are displayed in a\nvariable-pitch font, and `shr-use-fonts' is enabled for rendering\nHTML-formatted message bodies (which includes most replies)." (choice (const :tag "Disable variable-pitch fonts" nil) (const :tag "Enable variable-pitch fonts" t)) ement-room-username-display-property #[0 "\300\207" [(raise -0.25)] 1 #1#] "Display property applied to username strings.\nSee Info node `(elisp)Other Display Specs'." (choice (list :tag "Raise" (const :tag "Raise" raise) (number :tag "Factor")) (list :tag "Height" (const height) (choice (list :tag "Larger" (const :tag "Larger" +) (number :tag "Steps")) (list :tag "Smaller" (const :tag "Smaller" -) (number :tag "Steps")) (number :tag "Factor") (function :tag "Function") (sexp :tag "Form")))) ement-room-event-separator-display-property #[0 "\300\207" [(space :ascent 50)] 1 #1#] "Display property applied to invisible space string after events.\nAllows visual separation between events without, e.g. inserting\nnewlines.\n\nSee Info node `(elisp)Specified Space'." sexp ement-room-timestamp-header-delta #[0 "\300\207" [600] 1 #1#] "Show timestamp header where events are at least this many seconds apart." ement-room-send-message-filter #[0 "\300\207" [nil] 1 #1#] "Function through which to pass message content before sending.\nUsed to, e.g. send an Org-formatted message by exporting it to\nHTML first." (choice (const :tag "Send messages as-is" nil) (const :tag "Send messages in Org format" ement-room-send-org-filter) (function :tag "Custom filter function")) #[514 "\300\"\210\211\301=\203 \302\303\304\"\207\305\303\304\"\207" [set-default ement-room-send-org-filter add-hook ement-room-compose-hook ement-room-compose-org remove-hook] 5 "\n\n(fn OPTION VALUE)"] ement-room-mark-rooms-read #[0 "\300\207" [t] 1 #1#] "Mark rooms as read automatically.\nMoves read and fully-read markers in rooms on the server when\n`ement-room-scroll-up-mark-read' is called at the end of a\nbuffer.  When `send', also marks room as read when sending a\nmessage in it.  When disabled, rooms may still be marked as read\nmanually by calling `ement-room-mark-read'.  Note that this is\nnot strictly the same as read receipts." (choice (const :tag "When scrolling past end of buffer" t) (const :tag "Also when sending" send) (const :tag "Never" nil)) ement-room-send-typing #[0 "\300\207" [t] 1 #1#] "Send typing notifications to the server while typing a message." ement-room-join-view-buffer #[0 "\300\207" [t] 1 #1#] "View room buffer when joining a room." ement-room-leave-kill-buffer #[0 "\300\207" [t] 1 #1#] "Kill room buffer when leaving a room.\nWhen disabled, the room's buffer will remain open, but\nMatrix-related commands in it will fail." ement-room-warn-for-already-seen-messages #[0 "\300\207" [nil] 1 #1#] "Warn when a sent message has already been seen.\nSuch a case could very rarely indicate a reused transaction ID,\nwhich would prevent further messages from being sent (and would\nbe solved by logging in with a new session, generating a new\ntoken), but most often it happens when the server echoes back a\nsent message before acknowledging the sending of the\nmessage (which is harmless and can be ignored)." ement-room-wrap-prefix #[0 "\300\301\302\303#\301P\207" [propertize " " face ement-room-wrap-prefix] 4 #1#] "String prefixing certain events in room buffers.\nEvents include membership events, image attachments, etc.\nGenerally users should prefer to customize the face\n`ement-room-wrap-prefix' rather than this option, because this\noption's default value has that face applied to it where\nappropriate; if users customize this option, they will need to\napply the face to the string themselves, if desired." string custom-declare-group ement-room-prism "Colorize usernames and messages in rooms." :group #[0 "\300\207" [name] 1 #1#] "Display users' names and messages in unique colors." (choice (const :tag "Name only" name) (const :tag "Name and message" both) (const :tag "Neither" nil)) ement-room-prism-addressee #[0 "\300\207" [t] 1 #1#] "Show addressees' names in their respective colors.\nApplies to room member names at the beginning of messages,\npreceded by a colon or comma.\n\nNote that a limitation applies to the current implementation: if\na message from the addressee is not yet visible in a room at the\ntime the addressed message is formatted, the color may not be\napplied." ement-room-prism-color-adjustment #[0 "\300\207" [0] 1 #1#] "Number used to tweak computed username colors.\nThis may be used to adjust your favorite users' colors if you\ndon't like the default ones.  (The only way to do it is by\nexperimentation--there is no direct mapping available, nor a\nper-user setting.)\n\nThe number is added to the hashed user ID before converting it to\na color.  Note that, since user ID hashes are ratioed against\n`most-positive-fixnum', this number must be very large in order\nto have any effect; it should be at least 1e13.\n\nAfter changing this option, a room's buffer must be killed and\nrecreated to see the effect." number #[514 "\211\300U\204 \211\301Y\204 \302\303!\210\304\"\207" [0 10000000000000.0 user-error "This option must be a very large number, at least 1e13" set-default] 5 "\n\n(fn OPTION VALUE)"] ement-room-prism-minimum-contrast #[0 "\300\207" [6] 1 #1#] "Attempt to enforce this minimum contrast ratio for user faces.\nThis should be a reasonable number from, e.g. 0-7 or so."] 12)
(byte-code "\300\301\302\303\304DD\305\306\307%\210\300\310\302\303\311DD\312\306\307%\207" [custom-declare-variable ement-room-prism-message-desaturation funcall function #[0 "\300\207" [25] 1 #1=""] "Desaturate user colors by this percent for message bodies.\nMakes message bodies a bit less intense." :type integer ement-room-prism-message-lightening #[0 "\300\207" [10] 1 #1#] "Lighten user colors by this percent for message bodies.\nMakes message bodies a bit less intense.\n\nWhen using a light theme, it may be necessary to use a negative\nnumber (to darken rather than lighten)."] 6)#@78 Highlight event at POSITION while evaluating BODY.

(fn POSITION &rest BODY)
(defalias 'ement-room-with-highlighted-event-at '(macro . #[385 "\300\301\302\303\304DBB\305BBE\207" [let (ement-room-replying-to-overlay) unwind-protect progn ement-room-highlight-event-at ((ement-room-unhighlight-event))] 8 (#$ . 45976)]))
(byte-code "\300\301\302\303#\300\207" [function-put ement-room-with-highlighted-event-at lisp-indent-function 1] 4)#@275 Send typing notifications around BODY.
When `ement-room-send-typing' is enabled, typing notifications
are sent while BODY is executing.  BODY is wrapped in an
`unwind-protect' form that cancels `ement-room-typing-timer' and
sends a not-typing notification.

(fn &rest BODY)
(defalias 'ement-room-with-typing '(macro . #[128 "\300\301\302BB\303BB\207" [unwind-protect progn (when ement-room-send-typing (when ement-room-typing-timer (cancel-timer ement-room-typing-timer)) (setf ement-room-typing-timer (run-at-time nil 15 #'ement-room--send-typing ement-session ement-room))) ((when ement-room-send-typing (when ement-room-typing-timer (cancel-timer ement-room-typing-timer) (setf ement-room-typing-timer nil)) (ement-room--send-typing ement-session ement-room :typing nil)))] 5 (#$ . 46421)]))
(byte-code "\300\301\302\303#\300\207" [function-put ement-room-with-typing lisp-indent-function defun] 4)#@208 Wrap STRING-FORM with `ement-room-wrap-prefix'.
Concats `ement-room-wrap-prefix' to STRING-FORM and applies it as
the `wrap-prefix' property.  Also applies any PROPERTIES.

(fn STRING-FORM &rest PROPERTIES)
(defalias 'ement-room-wrap-prefix '(macro . #[385 "\300\301\302\303\301BBBBE\207" [concat ement-room-wrap-prefix propertize 'wrap-prefix] 9 (#$ . 47330)]))
(byte-code "\300\301\302\303#\300\207" [function-put ement-room-wrap-prefix lisp-indent-function defun] 4)#@194 Return STRING having concatted VALUE with PROPERTY on it.
If APPEND, append it; otherwise prepend.  Assumes PROPERTY is
constant throughout STRING.

(fn STRING PROPERTY VALUE &optional APPEND)
(defalias 'ement-room--concat-property #[1027 "\300\301#\203 \211P\202 P\302#\207" [get-text-property 0 propertize] 10 (#$ . 47809)])
(byte-code "\300\301\302\303#\300\301\304\305#\306\301\307\310#\207" [function-put ement-room--concat-property lisp-indent-function defun speed -1 put byte-optimizer byte-compile-inline-expand] 6)#@128 Highlight event at POSITION using `ement-room-replying-to-overlay'.
See `ement-room-with-highlighted-event-at'.

(fn POSITION)
(defalias 'ement-room-highlight-event-at #[257 "\303\"\211\304H\305!	>\203$ \305!	>\204 \306\307\310D\"\210\211\311H\204( \312\313!\210\314\315!\316\"\203= \315\316\"!\202> d\"\317\n\320\321#\207" [ement-ewoc cl-struct-ement-event-tags ement-room-replying-to-overlay ewoc-locate 2 type-of signal wrong-type-argument ement-event 1 error "No event at point" make-overlay ewoc-location ewoc-next overlay-put face highlight] 9 (#$ . 48353)])#@97 Delete overlay in `ement-room-replying-to-overlay'.
See `ement-room-with-highlighted-event-at'.
(defalias 'ement-room-unhighlight-event #[0 "\301!\203\n \302!\210\303\211\207" [ement-room-replying-to-overlay overlayp delete-overlay nil] 2 (#$ . 48936)])#@106 Make `ement-room-with-highlighted-event-at' persistent while COMPOSE-BUFFER exists.

(fn COMPOSE-BUFFER)
(defalias 'ement-room-compose-highlight #[257 "\211\205 \301\302\303\"rq\210\304\305\301\306$)\262\207" [ement-room-replying-to-overlay nil make-closure #[0 "\301\300!\205	 \302\300!\207" [V0 overlayp delete-overlay] 2] add-hook kill-buffer-hook :local] 8 (#$ . 49199)])#@189 Alist mapping characters to event-formatting functions.
Each function is called with three arguments: the event, the
room, and the session.  See macro
`ement-room-define-event-formatter'.
(defvar ement-room-event-formatters nil (#$ . 49588))#@41 Set by margin-related event formatters.
(defvar ement-room--format-message-margin-p nil (#$ . 49835))#@41 Set by margin-related event formatters.
(defvar ement-room--format-message-wrap-prefix nil (#$ . 49942))#@251 Define an event formatter for CHAR with DOCSTRING and BODY.
BODY is wrapped in a lambda form that binds `event', `room', and
`session', and the lambda is added to the variable
`ement-room-event-formatters', which see.

(fn CHAR DOCSTRING &rest BODY)
(defalias 'ement-room-define-event-formatter '(macro . #[642 "\300\301\302BB\303\304BBBE\207" [setf alist-get (ement-room-event-formatters nil nil #'equal) lambda (event room session)] 9 (#$ . 50053)]))
(byte-code "\301\302\303\304#\305\302\306\307#\210\310\311\312#\313\203 \241\266\202( \311B\211\262B\266\310\314\312#\315\203: \241\266\202E \314B\211\262B\266\310\316\312#\317\203W \241\266\202b \316B\211\262B\266\310\320\312#\321\203t \241\266\202 \320B\211\262B\266\310\322\312#\323\203\221 \241\266\202\234 \322B\211\262B\266\310\324\312#\325\203\256 \241\266\202\271 \324B\211\262B\266\310\326\312#\327\203\313 \241\266\202\326 \326B\211\262B\266\310\330\312#\331\203\350 \241\266\202\363 \330B\211\262B\266\310\332\312#\333\203\241\266\202\332B\211\262B\266\310\334\312#\335\203\"\241\266\202-\334B\211\262B\266\310\336\312#\337\203?\241\266\202J\336B\211\262B\266\310\340\312#\341\203Z\241\266\207\340B\211\262B\210\207" [ement-room-event-formatters function-put ement-room-define-event-formatter lisp-indent-function defun put edebug-form-spec (characterp stringp def-body) assoc 76 equal #[771 "\301\302\303\304\301#\207" [ement-room--format-message-margin-p t propertize " " left-margin-end] 7 "Text before this is shown in the left margin.\n\n(fn EVENT ROOM SESSION)"] 82 #[771 "\301\302\303\304\301#\207" [ement-room--format-message-margin-p t propertize " " right-margin-start] 7 "Text after this is shown in the right margin.\n\n(fn EVENT ROOM SESSION)"] 87 #[771 "\301\302\303\304\301#\207" [ement-room--format-message-wrap-prefix t propertize " " wrap-prefix-end] 7 "Text before this is the length of the event's wrap-prefix.\nThis emulates the effect of using the left margin (the \"%L\"\nspec) without requiring all events to use the same margin width.\n\n(fn EVENT ROOM SESSION)"] 98 #[771 "\301 \302\303\"\216\304\305\306$)\262\211G\307#\310\311\312#\211\205& \313\311\314#\315\206, \316\317	%\210\203= \320\"\210\207" [ement-room-prism-addressee match-data make-closure #[0 "\301\300\302\"\207" [V0 set-match-data t] 3] ement-room--format-message-body :formatted-p nil ement-room--event-body-face ement--text-property-search-forward face #[257 "\211\300=\203 \301\207\211<\205 \300>\207" [ement-room-quote t] 3 "\n\n(fn VALUE)"] ement--text-property-search-backward #[257 "\211\300=\203 \301\207\211<\205 \300>\207" [ement-room-quote t] 3 "\n\n(fn VALUE)"] add-face-text-property 0 append ement-room--add-member-face] 14 "Plain-text body content.\n\n(fn EVENT ROOM SESSION)"] 66 #[771 "\301 \302\303\"\216\304\")\262\211G\305#\306\307\310#\211\205( \311\307\312\313G%\314\206. \315\316	%\210\203? \317\"\210\207" [ement-room-prism-addressee match-data make-closure #[0 "\301\300\302\"\207" [V0 set-match-data t] 3] ement-room--format-message-body ement-room--event-body-face ement--text-property-search-forward face #[257 "\211\300=\203 \301\207\211<\205 \300>\207" [ement-room-quote t] 3 "\n\n(fn VALUE)"] ement--text-property-search-backward #[257 "\211\300=\203 \301\207\211<\205 \300>\207" [ement-room-quote t] 3 "\n\n(fn VALUE)"] :start add-face-text-property 0 append ement-room--add-member-face] 14 "Formatted body content (i.e. rendered HTML).\n\n(fn EVENT ROOM SESSION)"] 105 #[771 "\301!>\204 \302\303\304D\"\210\305H\207" [cl-struct-ement-event-tags type-of signal wrong-type-argument ement-event 1] 7 "Event ID.\n\n(fn EVENT ROOM SESSION)"] 111 #[771 "\301\302\303!>\204 \304\305\306D\"\210\307H\"\206 \310\207" [cl-struct-ement-room-tags alist-get room-list-avatar type-of signal wrong-type-argument ement-room 18 ""] 9 "Room avatar.\n\n(fn EVENT ROOM SESSION)"] 79 #[771 "\303\304!>\204 \305\306\307D\"\210\310H\206 \311!\312\313\314\304!>\204- \305\306\307	D\"\210\315H\206I \304!>\204E \305\306\307	D\"\210\316H%	\203W \317	\320\211\n%\262\207" [cl-struct-ement-room-tags ement-notify-limit-room-name-width ement-room-ellipsis propertize type-of signal wrong-type-argument ement-room 2 ement--room-display-name face ement-room-name help-echo 12 1 truncate-string-to-width nil] 12 "Room display name.\n\n(fn EVENT ROOM SESSION)"] 115 #[771 "\302\303\211!>\204 \304\305\306D\"\210\307H!	>\2046 \304\305\310\303!>\204/ \304\305\306	D\"\210\307HD\"\210\303!>\204F \304\305\306D\"\210\307H\311H\312\313#\314P\207" [cl-struct-ement-event-tags cl-struct-ement-user-tags propertize type-of signal wrong-type-argument ement-event 2 ement-user 1 face ement-room-user "​"] 11 "Sender MXID.\n\n(fn EVENT ROOM SESSION)"] 83 #[771 "\304\305!>\204 \306\307\310D\"\210\311H\"\305!	>\210\312H\313!\210\314\315\"r\211\206- pq\210\n\203r \316!W\203H \317\316!Z\320\"P\202p \321\322\211\323%\324\325P\322\326\327#\203d \211P\202g P\330#\266\206\262)\331P\207" [cl-struct-ement-event-tags cl-struct-ement-room-tags ement-room-sender-in-left-margin ement-room-left-margin-width ement--format-user type-of signal wrong-type-argument ement-event 2 18 mapp map-elt buffer string-width make-string 32 truncate-string-to-width nil "…" help-echo " " get-text-property 0 propertize "​"] 16 "Sender display name.\n\n(fn EVENT ROOM SESSION)"] 114 #[771 "\300\"\207" [ement-room--format-reactions] 6 "Reactions.\n\n(fn EVENT ROOM SESSION)"] 116 #[771 "\302\303\304!	>\204 \305\306\307D\"\210\310H\311\245\"\312\313\314\303\315\304\n!	>\2040 \305\306\307\fD\"\210	\310H\311\245\"%\207" [ement-room-timestamp-format cl-struct-ement-event-tags propertize format-time-string type-of signal wrong-type-argument ement-event 4 1000 face ement-room-timestamp help-echo "%Y-%m-%d %H:%M:%S"] 14 "Timestamp.\n\n(fn EVENT ROOM SESSION)"]] 5)#@371 May be used when formatting plain-text messages.

If user option `ement-room-use-variable-pitch' is non-nil, this
face is applied to plain-text messages for visual consistency
with HTML messages (which will be rendered by shr.el with
`shr-use-fonts' enabled).

The `shr-text' face was added in Emacs 29.1.  Prior to that,
shr.el used the `variable-pitch' face directly.
(defconst ement-room-variable-pitch-face (byte-code "\300\301!\203 \301\207\302\207" [facep shr-text variable-pitch] 2) (#$ . 56136))#@79 Return face definition for EVENT in ROOM on SESSION.

(fn EVENT ROOM SESSION)
(defalias 'ement-room--event-body-face #[771 "\306!>\210\307H\310H\311!\210\312\313\"\312\314\"\312\315\"\316H\311!\210\312\317\"	\320H\311!\210\312\321\"\306	!	>\210\322H\306!\n>\210\n\322H\306!	>\210\211\322H\232\n\323\232\203a \324\202b \325\203j \326\202z \327\"\204y \330!\205z \331?\205\f\332=\205\f\306!	>\204\226 \333\334\335D\"\210\336H\206\f\306!	>\204\256 \333\334\335D\"\210\336\337\306!	>\204\303 \333\334\335D\"\210\211\340H\206\360 \306!	>\204\330 \333\334\335D\"\210\211\340\341\306!	>\204\353 \333\334\335D\"\210\322H!I\262\f\"\342\343\344\345!!!\203\346\"\202	\347\"\262I\204	\205\3500\205.\206&\351\314\"\352\232?\205.1\353\354\355	F\"D\203F\356\357#\207\207" [cl-struct-ement-event-tags cl-struct-ement-user-tags cl-struct-ement-session-tags ement-room-prism ement-room-prism-message-desaturation ement-room-prism-message-lightening type-of 2 3 mapp map-elt msgtype format m.new_content 6 redacted_by 9 redacted-by 1 "m.emote" ement-room-message-emote ement-room-message-text ement-room-self-message ement-room--event-mentions-user-p ement--event-mentions-room-p ement-room-mention both signal wrong-type-argument ement-user 5 color-desaturate-name 4 ement--prism-color ement--color-dark-p color-name-to-rgb face-background default color-lighten-name color-darken-name ement-room-redacted alist-get "org.matrix.custom.html" :inherit delq nil plist-put :foreground ement-room-use-variable-pitch ement-room-variable-pitch-face] 29 (#$ . 56646)])#@323 Add member faces in ROOM to STRING.
If STRING begins with the name of a member in ROOM followed by a
colon or comma (as if STRING is a message addressing that
member), apply that member's displayname color face to that part
of the string.

Note that, if ROOM has no buffer, STRING is returned unchanged.

(fn STRING ROOM)
(defalias 'ement-room--add-member-face #[514 "\304!>\210\211\305H\306!\210\307\310\"\311!\203\322 \312 \313\314\"\216\315\316\"\205\320 \317\320\"\211\205\220 \312 \313\321\"\216rq\210\212eb\210\322\323!\324\211\211\211\325\324\326#\203\211 \327	!\211\330H\262\262\f	#\203 \304!\n>\204s \331\332\333D\"\210\330H\262\324\211\262\202\200 \326\203\211 \324\262\202F \266\204+\262\262\211\205\276 \304!>\204\243 \331\332\334D\"\210\211\335H\206\276 \304!>\204\270 \331\332\334D\"\210\211\335\336!I\211\205\316 \337\320\224\320\225\340D\324\f%\266\203)\207\207" [cl-struct-ement-room-tags ement-ewoc cl-struct-ement-event-tags cl-struct-ement-user-tags type-of 18 mapp map-elt buffer buffer-live-p match-data make-closure #[0 "\301\300\302\"\207" [V0 set-match-data t] 3] string-match "\\`\\([^[:blank:]]+\\)[,:][[:blank:]]+" match-string 1 #[0 "\301\300\302\"\207" [V0 set-match-data t] 3] #[771 "\302!>\2052 \303\302!>\204 \304\305\306D\"\210\307H\302!	>\204- \304\305\310D\"\210\311H\"\232\207" [cl-struct-ement-event-tags cl-struct-ement-room-tags type-of gethash signal wrong-type-argument ement-event 2 ement-room 20] 10 "\n\n(fn ROOM MEMBER-NAME EWOC-DATA)"] regexp-quote nil re-search-forward t ewoc-locate 2 signal wrong-type-argument ement-event ement-user 4 ement-room--user-color add-face-text-property :foreground] 17 (#$ . 58288)])
(require 'bookmark)#@63 Return a bookmark record for the current `ement-room' buffer.
(defalias 'ement-room-bookmark-make-record #[0 "\305!	>\210\306H\307H\310H\305\n!>\210\n\306H\305!\f>\210\211\306H\311\312\313\260\314B\315B\316\317BF\207" [ement-room cl-struct-ement-room-tags ement-session cl-struct-ement-session-tags cl-struct-ement-user-tags type-of 1 12 2 "Ement room: " " (" ")" session-id room-id handler ement-room-bookmark-handler] 10 (#$ . 60030)])#@53 Show Ement room buffer for BOOKMARK.

(fn BOOKMARK)
(defalias 'ement-room-bookmark-handler #[257 "\211\242\243\303!\210\304\305\"\304\306\"\307\310\307\211\311%\211\204! \312\313\"\210\211\262\3142k \315!	>\2047 \316\317\320D\"\210\211\321H\307:\203g @\262\315!\n>\204T \316\317\322D\"\210\323H\232\203` \324\314\"\210A\262\202; \266\3070\211\204z \325\326\327\307	D$\210\211\262\330\"\210\331\307\211\332#\207" [ement-sessions cl-struct-ement-session-tags cl-struct-ement-room-tags mapp map-elt session-id room-id nil alist-get equal user-error "Session %s not connected: call `ement-connect' first" --cl-block-nil-- type-of signal wrong-type-argument ement-session 5 ement-room 1 throw cl--assertion-failed it "Room %S not found on session %S" ement-view-room run-at-time #[0 "db\207" [] 1]] 14 (#$ . 60486)])#@450 Set display NAME override for ROOM on SESSION.
Interactively, with prefix, prompt for room and session,
otherwise use current room.  If NAME is the empty string, remove
the override.

Sets account-data event of type
"org.matrix.msc3015.m.room.name.override".  This name is only
used by clients that respect this proposed override.  See
<https://github.com/matrix-org/matrix-spec-proposals/pull/3015#issuecomment-1451017296>.

(fn NAME ROOM SESSION)
(defalias 'ement-room-override-name #[771 "\300\301\211\302\230\262\203 \303 \202 \304BC\305%\207" [ement-put-account-data "org.matrix.msc3015.m.room.name.override" "" make-hash-table "name" :room] 9 (#$ . 61331) (byte-code "\305=\203 \306\307 \310\"\202 \311\312!\210\211G\313H\314H\206  	\211\206& \n\204/ 	\204A \315\316\317\"\211\242\243\211\242\243\266\320\321\322	!\"\323\324\211\325	!\f>\204Z \326\327\301	D\"\210	\330H$\211	\nE\266\202*\207" [major-mode ement-room ement-session current-prefix-arg cl-struct-ement-room-tags ement-room-list-mode eieio-oref magit-current-section value [nil nil] vectorp 0 1 ement-complete-room :suggest t format "Set name override (%s): " ement--format-room read-string nil type-of signal wrong-type-argument 2] 13)])#@228 Flush generated username/message colors.
Also, redisplay events in all open buffers.  The colors will be
regenerated according to the current background color.  Helpful
when switching themes or adjusting `ement-prism' options.
(defalias 'ement-room-flush-colors #[0 "\305\306\"\210\307 \211\203A \211@\310\311\"\312=\203: r\211q\210\313!\205% \314\313!!\212\315	!)\210\211\2038 \313!\316\"\266)\210A\266\202\202 \210\n\317\211:\203\260 @\262\211A\262\242\262\320!>\204e \321\322\323D\"\210\324H\317:\203\247 @\262\320!\f>\204\201 \321\322\325D\"\210\326\327H\236\211\203\222 \211\317\241\266\202\240 \327\326C\211\262\327HBI\266A\262\202i \266A\262\202E \317\207" [ement-users ement-ewoc ement-sessions cl-struct-ement-session-tags cl-struct-ement-room-tags maphash #[514 "\301!>\204 \302\303\304D\"\210\211\305\306I\210\301!>\204# \302\303\304D\"\210\211\307\306I\207" [cl-struct-ement-user-tags type-of signal wrong-type-argument ement-user 4 nil 5] 6 "\n\n(fn --CL-VAR-- USER)"] buffer-list buffer-local-value major-mode ement-room-mode get-buffer-window window-start ewoc-refresh set-window-start nil type-of signal wrong-type-argument ement-session 5 ement-room notify-background-color 18] 11 (#$ . 62571) nil])#@301 Browse URL, using Ement for matrix.to URLs when possible.
Otherwise, fall back to `browse-url'.  When called outside of an
`ement-room' buffer, the variable `ement-session' must be bound
to the session in which to look for URL's room and event.  ARGS
are passed to `browse-url'.

(fn URL &rest ARGS)
(defalias 'ement-room-browse-url #[385 "\306\"\205\307\310\311\312\"\"\205 \311\312\"\307\313\311\312\"\"\205$ \311\312\"\311\314\"\203C \315	!\n>\204< \316\317\301	D\"\210	\312H\232\204\232 \203^ \315	!\n>\204W \316\317\301	D\"\210	\320H\232\204\232 \203| \321\315!\f>\204s \316\317\303D\"\210\322H\323\324$\204\232 \205\233 \321\315!\f>\204\221 \316\317\303D\"\210\322H\323\325$\205\233 	\211\203\254 \326\"\210\205\327!\207\330\331\332\206\265 \"\333\334#A@\211\335\267\202\336\206\307 \337\205\323 \340\341\"$\202\342B\343\305!\203\360 \344\"\345\346		#)\202):\203\344)\")\345\346		#)\202\345\346		#\262\202\347\350\"\262\266\204\207" [ement-room-matrix.to-url-regexp ement-room cl-struct-ement-room-tags ement-session cl-struct-ement-session-tags browse-url-handlers string-match string-prefix-p "!" match-string 1 "#" 2 type-of signal wrong-type-argument 12 cl-find 5 :key ement-room-id ement-room-canonical-alias ement-view-room ement-room-find-event ement--read-multiple-choice format "Room <%s> not joined on current session.  Join it, or load link with browser?" ((106 "join" "Join room in ement.el") (119 "web browser" "Open URL in web browser")) "You are not currently joined to that room.  You can either join the room\nin ement.el, or visit the link URL in your web browser." #s(hash-table size 2 test equal rehash-size 1.5 rehash-threshold 0.8125 purecopy t data ("join" 193 "web browser" 215)) ement-join-room :then make-closure #[514 "\301\"\210\302\300!\207" [V0 ement-view-room ement-room-find-event] 5 "\n\n(fn ROOM SESSION)"] ement-room-browse-url boundp remove apply browse-url error "No clause matching `%S'" browse-url-browser-function] 14 (#$ . 63837) nil])#@50 Go to EVENT-ID in current buffer.

(fn EVENT-ID)
(defalias 'ement-room-find-event #[257 "\303\304\305!	>\204 \306\307\300D\"\210\310H\311\312\313\314&\204; \304\305!	>\204/ \306\307\300D\"\210\315H\311\312\313\314&\203? \211!\207\316\317\"\210\320\n\321\322\323	$%\207" [ement-room cl-struct-ement-room-tags ement-session #[257 "\301 \210\302\303\304\305\"\"!b\207" [ement-ewoc push-mark ewoc-location ement-room--ewoc-last-matching make-closure #[257 "\302!	>\205 \300\302!	>\204 \303\304\305D\"\210\306H\232\207" [V0 cl-struct-ement-event-tags type-of signal wrong-type-argument ement-event 1] 6 "\n\n(fn DATA)"]] 7 "\n\n(fn EVENT-ID)"] cl-find type-of signal wrong-type-argument 6 :key ement-event-id :test equal 5 message "Event %s not seen in current room.  Looking in history..." ement-room-retro-to :then make-closure #[0 "r\304\305\306\300!>\204 \307\310\311\300D\"\210\300\312H\"q\210\301\302!)\207" [V0 V1 V2 cl-struct-ement-room-tags alist-get buffer type-of signal wrong-type-argument ement-room 18] 6]] 13 (#$ . 65897) nil])#@166 Set message composition format.
If LOCALP (interactively, with prefix), set in current room's
buffer.  Sets `ement-room-send-message-filter'.

(fn &optional LOCALP)
(defalias 'ement-room-set-composition-format #[256 "\301C\302\303BD\304\305\306\307\306\211&\310\306\211\311%\203# \312\300!\210\211\211\207\211\211\207" [ement-room-send-message-filter "Plain-text" "Org-mode" ement-room-send-org-filter completing-read "Composition format: " nil require-match alist-get equal make-local-variable] 10 (#$ . 66972) (list current-prefix-arg)])#@164 Set `ement-room-message-format-spec' in current buffer to FORMAT-SPEC.
Interactively, prompts for the spec using suggested values of the
option.

(fn FORMAT-SPEC)
(defalias 'ement-room-set-message-format #[257 "\204 \306\300!\210\307\310\311#\210	\312\313\n\f#\210\203# \314!\210\202( \315\316\"\210\317!\207" [ement-ewoc ement-room-left-margin-width left-margin-width ement-room-right-margin-width right-margin-width ement-room-sender-in-headers cl--assertion-failed ement-room-message-format-spec-setter ement-room-message-format-spec local set-window-margins nil ement-room--insert-sender-headers ewoc-filter #[257 "\301!>\205	 \302?\207" [cl-struct-ement-user-tags type-of t] 3 "\n\n(fn NODE-DATA)"] ewoc-refresh] 5 (#$ . 67526) (byte-code "\300\301\302\303\304\305NA\"\"\306\307\300\310\"\"\311\312\211\313%\206 \211\266\202C\207" [mapcar #[257 "\3008\3018B\207" [2 3] 4 "\n\n(fn IT)"] seq-filter #[257 "\211@\300=\207" [const] 3 "\n\n(fn IT)"] ement-room-message-format-spec custom-type completing-read "Format: " car alist-get nil equal] 8)])#@140 Set ROOM's TOPIC on SESSION.
Interactively, with prefix, prompt for room and session,
otherwise use current room.

(fn SESSION ROOM TOPIC)
(defalias 'ement-room-set-topic #[771 "\301!>\210\302H\303H\211\304\305\306!\"\307BC\310\311\312\313\314!\315\316\317\f#&\207" [cl-struct-ement-room-tags type-of 1 2 format "rooms/%s/state/m.room.topic" url-hexify-string "topic" ement-api :method put :data json-encode :then make-closure #[257 "\302\303\300\301#\207" [V0 V1 message "Topic set (%s): %s"] 5 "\n\n(fn DATA)"]] 20 (#$ . 68600) (byte-code "\305=\203 \306\307 \310\"\202 \311\312!\210\211G\313H\314H\206  	\211\206& \n\204/ 	\204A \315\316\317\"\211\242\243\211\242\243\266\n	\320\321\322\323	!\f>\204U \324\325\301	D\"\210	\326H\"\323	!\f>\204h \324\325\301	D\"\210	\327H\330\211\331%*E\207" [major-mode ement-room ement-session current-prefix-arg cl-struct-ement-room-tags ement-room-list-mode eieio-oref magit-current-section value [nil nil] vectorp 0 1 ement-complete-room :suggest t read-string format "New topic (%s): " type-of signal wrong-type-argument 2 11 nil inherit-input-method] 13)])#@201 Send FILE to ROOM on SESSION, using message BODY and MSGTYPE.
Interactively, with prefix, prompt for room and session,
otherwise use current room.

(fn FILE BODY ROOM SESSION &key (MSGTYPE "m.file"))
(defalias 'ement-room-send-file #[1156 "\301\302\"\206 \303A@\211\203@ \211@\304>\203) \211A\204! \305\306@\"\210\211AA\262\202 \307>A@\2037 \310\262\202 \305\311@\"\210\202 \210\312\313\314\315!>\204W \316\317\320\nD\"\210\321H#!\205\240 \322!\323!\206l \324\325!\326	D\327\n!\3308\262\331\332\333	\334	\335\336\337&	&	\266\205\207" [cl-struct-ement-room-tags plist-member :msgtype (nil "m.file") (:msgtype :allow-other-keys) error "Missing argument for %s" :allow-other-keys nil "Keyword argument %s not one of (:msgtype)" yes-or-no-p format "Upload file %S to room %S? " type-of signal wrong-type-argument ement-room 2 file-name-nondirectory file-name-extension "" mailcap-extension-to-mime file file-attributes 7 ement-upload :data :filename :content-type :then make-closure #[257 "\310\311\307\"\210\312!\210\313\314\"\315\305!&>\210\305\316H\317\320\321!\322\323\304!$\324\303B\325B\326\306B\327\302B\330\331\301B\332\300BE\257\333\304\334\335\336\337!\340\341\342\343\305\344\304\345\336&&\207" [V0 V1 V2 V3 V4 V5 V6 V7 message "Uploaded file %S.  Sending message..." mapp map-elt content_uri type-of 1 format "rooms/%s/send/%s/%s" url-hexify-string "m.room.message" ement--update-transaction-id "msgtype" "url" "body" "filename" "info" "mimetype" "size" ement-api :method put :data json-encode :then apply-partially ement-room-send-event-callback :room :session :content cl-struct-ement-room-tags] 22 "\n\n(fn DATA)"]] 30 (#$ . 69737) (byte-code "\306=\203 \307\310 \311\"\202 \312\313!\210\211G\314H\315H\206  	\211\206& \n\204/ 	\204A \316\317\320\"\211\242\243\211\242\243\266\321\216\f\203W \203O \322!\210\323\324\325\326\n	%\327\330\331\332	!$>\204j \333\334\301	D\"\210	\335H\"\324\211\336$\337\330\340\332	!$>\204\205 \333\334\301	D\"\210	\335H\"\341!\342\324\343%	\nF\266\202+\207" [major-mode ement-room ement-session current-prefix-arg ement-room-send-typing ement-room-typing-timer ement-room-list-mode eieio-oref magit-current-section value [nil nil] vectorp 0 1 ement-complete-room :suggest t #[0 "\205 	\203 \304	!\210\305\306\n\307\305$\207" [ement-room-send-typing ement-room-typing-timer ement-session ement-room cancel-timer nil ement-room--send-typing :typing] 5] cancel-timer run-at-time nil 15 ement-room--send-typing read-file-name format "Send file (%s): " type-of signal wrong-type-argument 2 confirm ement-room-read-string "Message body (%s): " file-name-nondirectory file-name-history inherit-input-method cl-struct-ement-room-tags] 12)])#@171 Send image FILE to ROOM on SESSION, using message BODY.
Interactively, with prefix, prompt for room and session,
otherwise use current room.

(fn FILE BODY ROOM SESSION)
(defalias 'ement-room-send-image #[1028 "\300\301\302&\207" [ement-room-send-file :msgtype "m.image"] 11 (#$ . 72509) (byte-code "\306=\203 \307\310 \311\"\202 \312\313!\210\211G\314H\315H\206  	\211\206& \n\204/ 	\204A \316\317\320\"\211\242\243\211\242\243\266\321\216\f\203W \203O \322!\210\323\324\325\326\n	%\327\330\331\332	!$>\204j \333\334\301	D\"\210	\335H\"\324\211\336$\337\330\340\332	!$>\204\205 \333\334\301	D\"\210	\335H\"\341!\342\324\343%	\nF\266\202+\207" [major-mode ement-room ement-session current-prefix-arg ement-room-send-typing ement-room-typing-timer ement-room-list-mode eieio-oref magit-current-section value [nil nil] vectorp 0 1 ement-complete-room :suggest t #[0 "\205 	\203 \304	!\210\305\306\n\307\305$\207" [ement-room-send-typing ement-room-typing-timer ement-session ement-room cancel-timer nil ement-room--send-typing :typing] 5] cancel-timer run-at-time nil 15 ement-room--send-typing read-file-name format "Send image file (%s): " type-of signal wrong-type-argument 2 confirm ement-room-read-string "Message body (%s): " file-name-nondirectory file-name-history inherit-input-method cl-struct-ement-room-tags] 12)])#@75 Upload the file as specified by URI to the current room.

(fn URI ACTION)
(defalias 'ement-room-dnd-upload-file #[514 "\302\303\"\211\205! \304\305!	\306\307\310\311	!\"\203 \312\202 \313&\207" [ement-room ement-session dnd-get-local-file-name t ement-room-send-file file-name-nondirectory :msgtype string-prefix-p "image/" mailcap-file-name-to-mime-type "m.image" "m.file"] 13 (#$ . 73874)])#@266 Join room by ID-OR-ALIAS on SESSION.
THEN may be a function to call after joining the room (and when
`ement-room-join-view-buffer' is non-nil, after viewing the room
buffer).  It receives two arguments, the room and the session.

(fn ID-OR-ALIAS SESSION &key THEN)
(defalias 'ement-room-join #[642 "\300\301\"A@\211\203< \211@\302>\203% \211A\204 \303\304@\"\210\211AA\262\202 \305>A@\2033 \306\262\202 \303\307@\"\210\202 \210\204E \310\311!\210\204M \310\312!\210\313\306\314\315$\266\203\204_ \316\317!\210\320\321\322!\"\323\324\325\326\327\301\330\331#\332\330\333\"&\n\207" [plist-member :then (:then :allow-other-keys) error "Missing argument for %s" :allow-other-keys nil "Keyword argument %s not one of (:then)" cl--assertion-failed id-or-alias session "\\`[!#][^:]+:\\(?:[[:alnum:]]\\|[.-]\\)+" string-match t user-error "Invalid room ID or alias (use, e.g. \"#ROOM-ALIAS:SERVER\")" format "join/%s" url-hexify-string ement-api :method post :data "" make-closure #[257 "\303!\210\304\305\"\211\306\307\n\205 \310\300D\"\311\312\313\301\"!\314\315$M\210\316\317\"\210\320\321\"\207" [V0 V1 ement-room-join-view-buffer mapp map-elt room_id delq nil #[514 "\300\"\207" [ement-view-room] 5 "\n\n(fn ROOM SESSION)"] gensym format "ement-join-%s" make-closure #[257 "\305!>\204 \306\307\310D\"\210\211\311H\312\211\211:\203K @\262\302\305!\f>\204/ \306\307\313D\"\210\314H\232\203@ \262\312\211\262\202A \315\203K A\262\202 \266\203\211\205k \316\317\300\"\210\301\211\205i \211@\211\"\210A\266\202\202W \262\207" [V0 V1 V2 cl-struct-ement-session-tags cl-struct-ement-room-tags type-of signal wrong-type-argument ement-session 5 nil ement-room 1 t remove-hook ement-sync-callback-hook] 10 "\n\n(fn SESSION)"] add-hook ement-sync-callback-hook message "Joined room: %s"] 10 "\n\n(fn DATA)"] :else #[257 "\303!	>\210\211\304H\303!\n>\210\211\304H\305H\306!\307!\210\310\311\"\312>\203, \311\313\300#\207\311\314\300	$\207" [V0 cl-struct-plz-error-tags cl-struct-plz-response-tags type-of 2 4 json-read-from-string mapp map-elt error (429 403) "Unable to join room %s: %s" "Unable to join room %s: %s %S"] 11 "\n\n(fn PLZ-ERROR)"]] 18 (#$ . 74281) (byte-code "\301\302!\206	 \303 D\207" [ement-session read-string "Join room (ID or alias): " ement-complete-session] 2)])
(defalias 'ement-join-room 'ement-room-join)#@39 Go to the previous message in buffer.
(defalias 'ement-room-goto-prev #[0 "`d\301ZY\203 \302\303\304\"\"\207\305\306\307\"\207" [ement-ewoc 2 ewoc-goto-node ement-room--ewoc-last-matching ement-event-p ement-room-goto-next :next-fn ewoc-prev] 5 (#$ . 76678) nil])#@136 Go to the next message in buffer.
NEXT-FN is passed to `ement-room--ewoc-next-matching', which
see.

(fn &key (NEXT-FN #\='ewoc-next))
(defalias 'ement-room-goto-next #[128 "\301\302\"\206 \303A@\211\203@ \211@\304>\203) \211A\204! \305\306@\"\210\211AA\262\202 \307>A@\2037 \310\262\202 \305\311@\"\210\202 \210\312\313!\314$\211\203R \315\"\207`dU\203\\ \316\317!\207db\207" [ement-ewoc plist-member :next-fn (nil ewoc-next) (:next-fn :allow-other-keys) error "Missing argument for %s" :allow-other-keys nil "Keyword argument %s not one of (:next-fn)" ement-room--ewoc-next-matching ewoc-locate ement-event-p ewoc-goto-node user-error "End of events"] 7 (#$ . 76951) nil])#@60 Scroll down, and load NUMBER earlier messages when at top.
(defalias 'ement-room-scroll-down-command #[0 "\3001	 \301\302!0\207\303\304!\207" [(beginning-of-buffer) scroll-down nil call-interactively ement-room-retro] 3 (#$ . 77647) nil])#@78 Scroll according to EVENT, loading earlier messages when at top.

(fn EVENT)
(defalias 'ement-room-mwheel-scroll #[257 "\300\301!\211@\262!r\302\303\"\216\304@\305\"\210\306!\210e\307 U\205# \310\311!*\207" [internal--before-with-selected-window event-start make-closure #[0 "\301\300!\207" [V0 internal--after-with-selected-window] 2] select-window norecord mwheel-scroll window-start call-interactively ement-room-retro] 5 (#$ . 77891) "e"])#@158 Retrieve NUMBER older messages in ROOM on SESSION.

(fn ROOM SESSION NUMBER &key BUFFER (THEN (apply-partially #\='ement-room-retro-callback room session)))
(defalias 'ement-room-retro #[899 "\303\304\"A@\303\305\"\206 \306\307\310#DA@\211\203N \211@\311>\2037 \211A\204/ \312\313@\"\210\211AA\262\202 \314>A@\203E \306\262\202 \312\315@\"\210\202 \210?\205\245 \316!	>\210\317H\320H\321\322\323!\"\324\325\326\327\330\306	\205z \331\nD\332\333D\334\335!D\336\337\n!DF\"\305\340\341\342#&\n\210\343\344\"\210\345\211\262\266\202\207" [ement-room-retro-loading cl-struct-ement-room-tags ement-room-messages-filter plist-member :buffer :then nil apply-partially ement-room-retro-callback (:buffer :then :allow-other-keys) error "Missing argument for %s" :allow-other-keys "Keyword argument %s not one of (:buffer :then)" type-of 1 3 format "rooms/%s/messages" url-hexify-string ement-api :timeout 30 :params remq "from" "dir" "b" "limit" number-to-string "filter" json-encode :else make-closure #[257 "\300\203 r\300q\210\303)\304\305\306\307\301\"D\"\207" [V0 V1 ement-room-retro-loading nil signal ement-api-error format "Loading %s earlier messages failed"] 6 "\n\n(fn PLZ-ERROR)"] message "Loading %s earlier messages..." t] 23 (#$ . 78346) (byte-code "	\n\204\n \202 \n<\203 \304\305!\202 \n\247\205 \n\306p\257\207" [ement-room ement-session current-prefix-arg ement-room-retro-messages-number read-number "Number of messages: " :buffer] 5)])#@229 Retrieve messages in ROOM on SESSION back to EVENT-ID.
When event is found, call function THEN.  Search in batches of
BATCH-SIZE events up to a total of LIMIT.

(fn ROOM SESSION EVENT-ID &key THEN (BATCH-SIZE 100) (LIMIT 1000))
(defalias 'ement-room-retro-to #[899 "\302\303\"A@\302\304\"\206 \305A@\302\306\"\206 \307A@\211\203P \211@\310>\2039 \211A\2041 \311\312@\"\210\211AA\262\202 \313>A@\203G \314\262\202 \311\315@\"\210\202 \210\316\317!>\204d \320\321\322\nD\"\210\323H\"\203p \324\325!\210\326C\327\330!\331\332\n&	M\210\333\n\n\334\335\336\317!	>\204\246 \320\321\337D\"\210\340H\"\303&\207" [cl-struct-ement-session-tags cl-struct-ement-room-tags plist-member :then :batch-size (nil 100) :limit (nil 1000) (:then :batch-size :limit :allow-other-keys) error "Missing argument for %s" :allow-other-keys nil "Keyword argument %s not one of (:then :batch-size :limit)" gethash type-of signal wrong-type-argument ement-session 11 cl--assertion-failed (not (gethash event-id (ement-session-events session))) 0 gensym "ement-room-retro-to-callback-" make-closure #[257 "\310\307\306#\210\311\305\312\306!>\204 \313\314\315\306D\"\210\306\316H\"\203+ \317\320\305\"\210\304\205c \304 \207\301\211\242\303\\\240\302Y\203< \317\321\302\305#\207\317\322\305\301\242\302$\210\323\307\306\303\324\325\326\312\307!>\204[ \313\314\327\307D\"\210\307\330H\"\331\300&\207" [V0 V1 V2 V3 V4 V5 V6 V7 ement-room-retro-callback gethash type-of signal wrong-type-argument ement-session 11 message "Found event %S" "%s older events retrieved without finding event %S" "Looking back for event %S (%s/%s events retrieved)" ement-room-retro :buffer alist-get buffer ement-room 18 :then cl-struct-ement-session-tags cl-struct-ement-room-tags] 12 "\n\n(fn DATA)"] ement-room-retro :buffer alist-get buffer ement-room 18] 21 (#$ . 79849)])
(byte-code "\300\301\302\303#\300\207" [function-put ement-room-retro-to lisp-indent-function defun] 4)#@266 Retrieve messages in ROOM on SESSION back from FROM to TO.
Retrieve batches of BATCH-SIZE up to total LIMIT.  FROM and TO
are sync batch tokens.  Used for, e.g. filling gaps in
"limited" sync responses.

(fn ROOM SESSION FROM TO &key (BATCH-SIZE 100) (LIMIT 1000))
(defalias 'ement-room-retro-to-token #[1156 "\302\303\"\206 \304A@\302\305\"\206 \306A@\211\203J \211@\307>\2033 \211A\204+ \310\311@\"\210\211AA\262\202 \312>A@\203A \313\262\202 \310\314@\"\210\202 \210\315!>\210\316H\317\320\321!\"\322\323	\f&\324\325\315\f!>\204| \326\327\330D\"\210\331H\315!>\204\221 \326\327\330D\"\210\f\332H\206\255 \315!>\204\251 \326\327\330D\"\210\f\316H#\210\333	\334\335\336\337D\340D\341\342D\343\344!D\345\346	!D\257\347\350\322\351\"&\n\207" [cl-struct-ement-room-tags ement-room-messages-filter plist-member :batch-size (nil 100) :limit (nil 1000) (:batch-size :limit :allow-other-keys) error "Missing argument for %s" :allow-other-keys nil "Keyword argument %s not one of (:batch-size :limit)" type-of 1 format "rooms/%s/messages" url-hexify-string make-closure #[257 "\306\304\303\307\310%\210\311!\210\312\313\"\312\314\"\211G\301W?\205\261 \300\301Z\211\315V\204g \316\317\320\321\322\304!>\2048 \323\324\325\304D\"\210\304\326H\322\304!>\204J \323\324\325\304D\"\210\304\327H\206b \322\304!>\204_ \323\324\325\304D\"\210\304\330H#\"\202\257 \331\332\322\304!>\204x \323\324\325\304D\"\210\304\326H\322\304!>\204\212 \323\324\325\304D\"\210\304\327H\206\242 \322\304!>\204\237 \323\324\325\304D\"\210\304\330H$\210\317\304\303\302\333&\262\207" [V0 V1 V2 V3 V4 cl-struct-ement-room-tags ement-room-retro-callback :set-prev-batch nil mapp map-elt end chunk 0 display-warning ement-room-retro-to-token format "Loaded events in %S (%S) without filling gap; not filling further" type-of signal wrong-type-argument ement-room 2 12 1 message "Ement: Continuing to fill gap in %S (%S) (remaining limit: %s)" :limit] 13 "\n\n(fn DATA)"] message "Ement: Filling gap in %S (%S)" signal wrong-type-argument ement-room 2 12 ement-api :timeout 30 :params "from" "to" "dir" "b" "limit" number-to-string "filter" json-encode :then :else #[257 "\302\303\304\305\306\300!	>\204 \302\307\310\300D\"\210\300\311H\306\300!	>\204% \302\307\310\300D\"\210\300\312H\206= \306\300!	>\204: \302\307\310\300D\"\210\300\313H#D\"\207" [V0 cl-struct-ement-room-tags signal ement-api-error format "Filling gap in %S (%S) failed" type-of wrong-type-argument ement-room 2 12 1] 10 "\n\n(fn PLZ-ERROR)"]] 23 (#$ . 81839)])#@193 Sync SESSION (interactively, current buffer's).
If FORCE (interactively, with prefix), cancel any outstanding
sync requests.  Also, update any room list buffers.

(fn SESSION &optional FORCE)
(defalias 'ement-room-sync #[513 "\300\301#\210\302 \303:\203* @\262\304\305\"\306>\203# r\211q\210\307 )\210A\262\202	 \303\207" [ement--sync :force buffer-list nil buffer-local-value major-mode (ement-room-list-mode ement-tabulated-room-list-mode) revert-buffer] 7 (#$ . 84415) (list ement-session current-prefix-arg)])#@162 Pop up buffer showing details of EVENT (interactively, the one at point).
EVENT should be an `ement-event' or `ement-room-membership-events' struct.

(fn EVENT)
(defalias 'ement-room-view-event #[257 "\303\304!\210\305\306\307\310!>\203 \311\202. \310!	>\205. \310!	>\204+ \312\313\314D\"\210\315H\"\310!>\203P \316\310!>\204I \312\313\317D\"\210\315H\"\202[ \310!	>\205[ !\320r\321!q\210\322 \210\304p\"\210\323 \210\324p!*\207" [cl-struct-ement-room-membership-events-tags cl-struct-ement-event-tags inhibit-read-only require pp #[257 "\302\303!>\204 \304\305\306D\"\210\307HB\310\303\211!>\204& \304\305\306D\"\210\311H!	>\204I \304\305\312\303!>\204C \304\305\306D\"\210\311HD\"\210\303!>\204X \304\305\306D\"\210\311H\307HB\313\303!>\204o \304\305\306D\"\210\314HB\315\303!>\204\204 \304\305\306D\"\210\316HB\317\303!>\204\232 \304\305\306D\"\210\320HB\321\303!>\204\260 \304\305\306	D\"\210\322HB\323\303!>\204\307 \304\305\306\nD\"\210\324HB\325\303	!>\204\336 \304\305\306D\"\210\326HB\327\303\n!>\204\365 \304\305\306\fD\"\210	\330HB\257	\207" [cl-struct-ement-event-tags cl-struct-ement-user-tags :id type-of signal wrong-type-argument ement-event 1 :sender 2 ement-user :content 3 :origin-server-ts 4 :type 5 :state-key 7 :unsigned 6 :receipts 8 :local 9] 14 "\n\n(fn EVENT)"] format "*Ement event: %s*" type-of "[multiple events]" signal wrong-type-argument ement-event 1 mapcar ement-room-membership-events t get-buffer-create erase-buffer view-mode pop-to-buffer] 9 (#$ . 84943) (byte-code "\301!\211\302H\262C\207" [ement-ewoc ewoc-locate 2] 3)])#@69 Write a new message in accordance with `ement-room-compose-method'.
(defalias 'ement-room-dispatch-new-message #[0 "\301\302=\203 \303\202\f \304!\207" [ement-room-compose-method call-interactively compose-buffer ement-room-compose-message ement-room-send-message] 3 (#$ . 86592) nil])#@47 Inverse of `ement-room-dispatch-new-message'.
(defalias 'ement-room-dispatch-new-message-alt #[0 "\301\302=\203 \303\202\f \304!\207" [ement-room-compose-method call-interactively compose-buffer ement-room-send-message ement-room-compose-message] 3 (#$ . 86885) nil])#@64 Edit a message in accordance with `ement-room-compose-method'.
(defalias 'ement-room-dispatch-edit-message #[0 "\301\302=\203 \303\202\f \304!\207" [ement-room-compose-method call-interactively compose-buffer ement-room-compose-edit ement-room-edit-message] 3 (#$ . 87160) nil])#@68 Reply to a message in accordance with `ement-room-compose-method'.
(defalias 'ement-room-dispatch-reply-to-message #[0 "\301\302=\203 \303\202\f \304!\207" [ement-room-compose-method call-interactively compose-buffer ement-room-compose-reply ement-room-write-reply] 3 (#$ . 87446) nil])#@64 Send a message in accordance with `ement-room-compose-method'.
(defalias 'ement-room-dispatch-send-message #[0 "\301\302=\203 \303\202\f \304!\207" [ement-room-compose-method call-interactively compose-buffer ement-room-compose-send-direct ement-room-compose-send] 3 (#$ . 87740) nil])#@563 Send message to ROOM on SESSION with BODY and FORMATTED-BODY.
Interactively, with prefix, prompt for room and session,
otherwise use current room.

REPLYING-TO-EVENT may be an event the message is in reply to; the
message will reference it appropriately.

If `ement-room-send-message-filter' is non-nil, the message's
content alist is passed through it before sending.  This may be
used to, e.g. process the BODY into another format and add it to
the content (e.g. see `ement-room-send-org-filter').

(fn ROOM SESSION &key BODY FORMATTED-BODY REPLYING-TO-EVENT)
(defalias 'ement-room-send-message #[642 "\303\304\"A@\303\305\"A@\303\306\"A@\211\203H \211@\307>\2031 \211A\204) \310\311@\"\210\211AA\262\202 \312>A@\203? \313\262\202 \310\314@\"\210\202 \210\315\304\305\306\316\317\320&\f\210\321\322\323!	>\204q \324\325\326\nD\"\210\327H\"\211\205} \330!\211\205\243 \331!r\332\333\"\216\334@\335\"\210\336 \337\340\n\341\"!Y\205\240 \342\313d\"*\262\207" [ement-room-send-message-filter cl-struct-ement-room-tags ement-ewoc plist-member :body :formatted-body :replying-to-event (:body :formatted-body :replying-to-event :allow-other-keys) error "Missing argument for %s" :allow-other-keys nil "Keyword argument %s not one of (:body :formatted-body :replying-to-event)" ement-send-message :filter :then ement-room-send-event-callback alist-get buffer type-of signal wrong-type-argument ement-room 18 get-buffer-window internal--before-with-selected-window make-closure #[0 "\301\300!\207" [V0 internal--after-with-selected-window] 2] select-window norecord window-point ewoc-location ewoc-nth -1 set-window-point] 19 (#$ . 88034) (byte-code "\306=\203 \307\310 \311\"\202 \312\313!\210\211G\314H\315H\206  	\211\206& \n\204/ 	\204A \316\317\320\"\211\242\243\211\242\243\266\321\322\323	!\f>\204R \324\325\301	D\"\210	\326H\"\327\216\203o !\203f \330!!\210\331\332\333\334\n	%!\335\332\336\332\337%)	\n\340F\266\202*\207" [major-mode ement-room ement-session current-prefix-arg cl-struct-ement-room-tags ement-room-send-typing ement-room-list-mode eieio-oref magit-current-section value [nil nil] vectorp 0 1 ement-complete-room :suggest t format "Send message (%s): " type-of signal wrong-type-argument 2 #[0 "\205 	\203 \304	!\210\305\306\n\307\305$\207" [ement-room-send-typing ement-room-typing-timer ement-session ement-room cancel-timer nil ement-room--send-typing :typing] 5] cancel-timer run-at-time nil 15 ement-room--send-typing ement-room-read-string ement-room-message-history inherit-input-method :body ement-room-typing-timer] 11)])#@401 Send emote to ROOM on SESSION with BODY.
Interactively, with prefix, prompt for room and session,
otherwise use current room.

If `ement-room-send-message-filter' is non-nil, the message's
content alist is passed through it before sending.  This may be
used to, e.g. process the BODY into another format and add it to
the content (e.g. see `ement-room-send-org-filter').

(fn ROOM SESSION &key BODY)
(defalias 'ement-room-send-emote #[642 "\303\304\"A@\211\203< \211@\305>\203% \211A\204 \306\307@\"\210\211AA\262\202 \310>A@\2033 \311\262\202 \306\312@\"\210\202 \210\211\211\313\230\262\203J \314\315!\210\316!>\210\317H\320H\321!\210\322\323\"\211\205e \324!\325\326\327!\330\n!#\331\332B\333BD	\203\203 	\"\262\334	\335\336\337\340!\341\342\343\344\345\346\337&&\210\205\306 \347!r\350\351\"\216\352@\353\"\210\354 \355\356\n\357\"!Y\205\303 \360\311d\"*\262\207" [cl-struct-ement-room-tags ement-room-send-message-filter ement-ewoc plist-member :body (:body :allow-other-keys) error "Missing argument for %s" :allow-other-keys nil "Keyword argument %s not one of (:body)" "" cl--assertion-failed (not (string-empty-p body)) type-of 1 18 mapp map-elt buffer get-buffer-window format "rooms/%s/send/m.room.message/%s" url-hexify-string ement--update-transaction-id "msgtype" "m.emote" "body" ement-api :method put :data json-encode :then apply-partially ement-room-send-event-callback :room :session :content internal--before-with-selected-window make-closure #[0 "\301\300!\207" [V0 internal--after-with-selected-window] 2] select-window norecord window-point ewoc-location ewoc-nth -1 set-window-point] 27 (#$ . 90650) (byte-code "\306=\203 \307\310 \311\"\202 \312\313!\210\211G\314H\315H\206  	\211\206& \n\204/ 	\204A \316\317\320\"\211\242\243\211\242\243\266\321\322\323	!\f>\204R \324\325\301	D\"\210	\326H\"\327\216\203o !\203f \330!!\210\331\332\333\334\n	%!\335\332\336\332\337%)	\n\340F\266\202*\207" [major-mode ement-room ement-session current-prefix-arg cl-struct-ement-room-tags ement-room-send-typing ement-room-list-mode eieio-oref magit-current-section value [nil nil] vectorp 0 1 ement-complete-room :suggest t format "Send emote (%s): " type-of signal wrong-type-argument 2 #[0 "\205 	\203 \304	!\210\305\306\n\307\305$\207" [ement-room-send-typing ement-room-typing-timer ement-session ement-room cancel-timer nil ement-room--send-typing :typing] 5] cancel-timer run-at-time nil 15 ement-room--send-typing ement-room-read-string ement-room-emote-history inherit-input-method :body ement-room-typing-timer] 11)])#@235 Callback for event-sending functions.
DATA is the parsed JSON object.  If DATA's event ID is already
present in SESSION's events table, show an appropriate warning
mentioning the ROOM and CONTENT.

(fn &key DATA ROOM SESSION CONTENT)
(defalias 'ement-room-send-event-callback #[128 "\306\307\"A@\306\310\"A@\306\311\"A@\306\312\"A@\211\203O \211@\313>\2037 \211A\204/ \314\315@\"\210\211AA\262\202 \316>A@\203F \317\262\202 \314\320@\"\210\202 \210\321!\210\322\323\"\203\355 \324\325!	>\204n \326\327\330D\"\210\331H\"\203\355 \332\333\325\211!	>\204\212 \326\327\330	D\"\210\334H!\n>\204\257 \326\327\335\325	!	>\204\250 \326\327\330D\"\210\334HD\"\210\325!	>\204\300 \326\327\330D\"\210\334H\334H\325!>\204\326 \326\327\336\nD\"\210\337H$\203\347 \211\332\340\"P\262\341\342\"\266\f\343=\205!\344\345\325!>\204\326\327\336D\"\210\346H\"\211\205r\211q\210\212\347\350\351\"!b\210\352\353!*\262\207" [ement-room-warn-for-already-seen-messages cl-struct-ement-session-tags cl-struct-ement-user-tags cl-struct-ement-room-tags ement-room-mark-rooms-read ement-ewoc plist-member :data :room :session :content (:data :room :session :content :allow-other-keys) error "Missing argument for %s" :allow-other-keys nil "Keyword argument %s not one of (:data :room :session :content)" mapp map-elt event_id gethash type-of signal wrong-type-argument ement-session 11 format "Event ID %S already seen in session %S.  This may indicate a reused transaction ID, which could mean that the event was not sent to the room (%S).  You may need to disconnect, delete the `ement-sessions-file', and connect again to start a new session.  Alternatively, this can happen if the event's sent-confirmation is received after the event itself is received in the next sync response, in which case no action is needed." 1 ement-user ement-room 2 " Event content: %S" display-warning ement-room-send-event-callback send alist-get buffer 18 ewoc-location ement-room--ewoc-last-matching ement-event-p call-interactively ement-room-mark-read] 16 (#$ . 93266)])#@71 Bindings for `ement-room-edit-message' and `ement-room-compose-edit'.
(defalias 'ement-room-edit-message-prepare #[0 "\204 \305\300!\210	\204 \305\301!\210\306!\211\307H\262\310	!\n>\210	\311H\310!>\210\307H\312H\313!\210\314\315\"\211\310!\f>\204F \316\317\320D\"\210\311H\310!\f>\204Z \316\317\320D\"\210\311H\232\204e \321\322!\210\323\324\325\326\211%\262D\207" [ement-ewoc ement-session cl-struct-ement-session-tags cl-struct-ement-event-tags cl-struct-ement-user-tags cl--assertion-failed ewoc-locate 2 type-of 1 3 mapp map-elt body signal wrong-type-argument ement-user user-error "You may only edit your own messages" replace-regexp-in-string "\\`\\*[[:space:]]+" "" t] 12 (#$ . 95362)])#@203 Edit EVENT in ROOM on SESSION to have new BODY.
The message must be one sent by the local user.  If EVENT is
itself an edit of another event, the original event is edited.

(fn EVENT ROOM SESSION BODY)
(defalias 'ement-room-edit-message #[1028 "\303\304\305\306!>\204 \307\310\311D\"\210\312H!\313\314!$\315B\316\317BD	\2030 	\"\262\320\321\"\316\317B\315B\322B\323\324\325B\326\306!\n>\204W \307\310\327	D\"\210\312HBEF\330P\262\331\332\333\334\335!\336\337\340\341\342\343\334&&\207" [cl-struct-ement-room-tags ement-room-send-message-filter cl-struct-ement-event-tags format "rooms/%s/send/%s/%s" url-hexify-string type-of signal wrong-type-argument ement-room 1 "m.room.message" ement--update-transaction-id "body" "msgtype" "m.text" nil ement--original-event-for "m.new_content" "m.relates_to" "rel_type" "m.replace" "event_id" ement-event "* " ement-api :method put :data json-encode :then apply-partially ement-room-send-event-callback :room :session :content] 26 (#$ . 96088) (byte-code "\306\307\216\310`!\210\311 \211G\312U\203 \211A\262\242\202! \313\314\315GD\"\211\242\316\216\n\203: \2032 \317!\210\320\306\321\322\f%\323\324\325!>\204L \313\326\305D\"\210\312H\"\327\330\306\331%\211\211\332\230\262\203d \333\334!\210\335\323\336\"!\205r 	\fF\266\202*\266\202*\207" [ement-room-replying-to-overlay ement-room-editing-event ement-room-send-typing ement-room-typing-timer ement-session ement-room nil #[0 "\300 \207" [ement-room-unhighlight-event] 1] ement-room-highlight-event-at ement-room-edit-message-prepare 2 signal wrong-number-of-arguments (ement-room-editing-event body) #[0 "\205 	\203 \304	!\210\305\306\n\307\305$\207" [ement-room-send-typing ement-room-typing-timer ement-session ement-room cancel-timer nil ement-room--send-typing :typing] 5] cancel-timer run-at-time 15 ement-room--send-typing format "Edit message (%s): " type-of wrong-type-argument ement-room-read-string ement-room-message-history inherit-input-method "" user-error "To delete a message, use command `ement-room-delete-message'" yes-or-no-p "Edit message to: %S? " cl-struct-ement-room-tags] 9)])#@100 Delete EVENT in ROOM on SESSION, optionally with REASON.

(fn EVENT ROOM SESSION &optional REASON)
(defalias 'ement-room-delete-message #[1027 "\300\301\"$\207" [ement-redact ement--original-event-for] 9 (#$ . 98259) (byte-code "\304\305\216\306`!\210\307\310!\203# \311	!\211\312H\262\n\313\314\304\211\211\315%F\202& \316\317!*\207" [ement-room-replying-to-overlay ement-ewoc ement-room ement-session nil #[0 "\300 \207" [ement-room-unhighlight-event] 1] ement-room-highlight-event-at yes-or-no-p "Delete this event? " ewoc-locate 2 read-string "Reason (optional): " inherit-input-method user-error "Message not deleted"] 9)])#@80 Write and send a reply to EVENT.
Interactively, to event at point.

(fn EVENT)
(defalias 'ement-room-write-reply #[257 "\204 \306\300!\210	\204 \306\301!\210\307!\n>\204 \306\310!\210\211\311\312\216\313`!\210	\314\315\307!>\204: \316\317\300D\"\210\320H\"\321\322\"\323\216\203^  \203U \324 !\210\325\311\326\327	% \330\311\331\311\332%)\333\334\335\n&)\266\204+\207" [ement-room ement-session cl-struct-ement-event-tags ement-room-replying-to-event ement-room-replying-to-overlay cl-struct-ement-room-tags cl--assertion-failed type-of (ement-event-p event) nil #[0 "\300 \207" [ement-room-unhighlight-event] 1] ement-room-highlight-event-at format "Send reply (%s): " signal wrong-type-argument 2 make-closure #[0 "\302\301!\210\300\211\207" [V0 ement-room-replying-to-event make-local-variable] 2] #[0 "\205 	\203 \304	!\210\305\306\n\307\305$\207" [ement-room-send-typing ement-room-typing-timer ement-session ement-room cancel-timer nil ement-room--send-typing :typing] 5] cancel-timer run-at-time 15 ement-room--send-typing ement-room-read-string ement-room-message-history inherit-input-method ement-room-send-message :body :replying-to-event ement-room-read-string-setup-hook ement-room-send-typing ement-room-typing-timer] 12 (#$ . 98901) (byte-code "\204 \301\300!\210\302!\211\303H\262C\207" [ement-ewoc cl--assertion-failed ewoc-locate 2] 3)])
(byte-code "\301\302\"\203\f \303\304\305\"\210\301\207" [input-method-alist assoc "emoji" defalias ement-room-use-emoji-input-method #[0 "\300\301!\207" [set-input-method "emoji"] 2 "Activate the emoji input method in the current buffer." nil]] 3)#@569 Send reaction of KEY to event at POSITION.
KEY should be a reaction string, e.g. "👍".

Interactively, send reaction to event at point.  The user option
`ement-room-reaction-picker' controls how the reaction string
is selected, or rather controls the initial mechanism, since the
user can always cancel that command with \[keyboard-quit] and
choose a different one using the key bindings in
`ement-room-reaction-map' (note that other than `insert-char',
these all require at least version 29 of Emacs):

\{ement-room-reaction-map}

(fn KEY POSITION &optional EVENT)
(defalias 'ement-room-send-reaction #[770 "\306\307\216\310!\210\211\206 \311	\"\211\312H\262\206 \313\314!\315!\n>\210\211\316H\315!\f>\210\316H\317\320\321!\322!#\323\324\325B\326B\327\nBFC\330\331\332\333\334!\335\336\337\340\341\342\333&&\266\202*\207" [ement-room-replying-to-overlay ement-ewoc cl-struct-ement-event-tags ement-room cl-struct-ement-room-tags ement-session nil #[0 "\300 \207" [ement-room-unhighlight-event] 1] ement-room-highlight-event-at ewoc-locate 2 user-error "No event at point" type-of 1 format "rooms/%s/send/m.reaction/%s" url-hexify-string ement--update-transaction-id "m.relates_to" "rel_type" "m.annotation" "event_id" "key" ement-api :method put :data json-encode :then apply-partially ement-room-send-event-callback :room :session :content] 25 (#$ . 100551) (byte-code "\302!\211\303H\262\304!	>\204 \305\306!\210\307\310\311!\211\312\313#M\210\312\314\"\216\315\316\"\210\31722 \320\321!0)\266\202`D\207" [ement-ewoc cl-struct-ement-event-tags ewoc-locate 2 type-of user-error "No event at point" #[0 "\304\300!\210\305C\306\307	\310 \"!\210\311\312!)\207" [after-change-functions ement-room-reaction-map enable-recursive-minibuffers ement-room-reaction-picker make-local-variable #[128 "\3002 \301 0\210\302\303\304 \"\207" [exit exit-minibuffer throw selected minibuffer-contents] 4 "\n\n(fn &rest _)"] use-local-map make-composed-keymap current-local-map t call-interactively] 4] make-symbol "minibuffer-setup" make-closure #[0 "\302\303\300\"\210\301 \207" [V0 V1 remove-hook minibuffer-setup-hook] 3] #[0 "\301\302\300\"\207" [V0 remove-hook minibuffer-setup-hook] 3] add-hook minibuffer-setup-hook selected read-string "Reaction: "] 8)])#@82 Toggle reaction of KEY to EVENT in ROOM on SESSION.

(fn KEY EVENT ROOM SESSION)
(defalias 'ement-room-toggle-reaction #[1028 "\303!>\210\304H\305!\210\306\307\"\303!	>\210\310H\303!\n>\210\211\310H\211\311\312\313\f#\"\211\2039 \314		#\207\315\n`\"\207" [cl-struct-ement-event-tags cl-struct-ement-session-tags cl-struct-ement-user-tags type-of 9 mapp map-elt reactions 1 cl-find-if make-closure #[257 "\300\304\211!\n>\204 \305\306\307D\"\210\310H!>\2043 \305\306\311\304!\n>\204- \305\306\307D\"\210\310HD\"\210\304!\n>\204B \305\306\307D\"\210\310H\312H\232\205b \301\313\304!\n>\204\\ \305\306\307D\"\210\314H\315\"\232\207" [V0 V1 cl-struct-ement-event-tags cl-struct-ement-user-tags type-of signal wrong-type-argument ement-event 2 ement-user 1 map-nested-elt 3 (m.relates_to key)] 9 "\n\n(fn EVENT)"] ement-redact ement-room-send-reaction] 14 (#$ . 102840) (byte-code "\303\304\305\211`#\206 \306\307\310!!\311!\211\312H\262	\nF\207" [ement-ewoc ement-room ement-session #[257 "\300`\301\"=\206 \211<\205 \235\207" [get-text-property face] 4 "\n\n(fn FACE)"] #[642 "\300\301\"\206 \302A@\211\203@ \211@\303>\203) \211A\204! \304\305@\"\210\211AA\262\202 \306>A@\2037 \307\262\202 \304\310@\"\210\202 \210\212b\210 \203P \211 \210\202E \311`\")\207" [plist-member :forward-fn (nil forward-char) (:forward-fn :allow-other-keys) error "Missing argument for %s" :allow-other-keys nil "Keyword argument %s not one of (:forward-fn)" buffer-substring-no-properties] 8 "Return substring of current buffer from BEG while PRED is true.\n\n(fn BEG PRED &key (FORWARD-FN #\\='forward-char))"] #[771 "\300!\203 \301\302\"\"\207\303!\205! \304\305!!\301\306\"\"\207" [ement-room-reactions-key make-closure #[0 "\300\301!\207" [V0 ement-room-reactions-key] 2] ement-room-reactions button-start button-at #[0 "\300\301!\207" [V0 ement-room-reactions-key] 2]] 8 "\n\n(fn --CL-FACE-AT-POINT-P-- --CL-BUFFER-SUBSTRING-WHILE-- POS)"] char-to-string read-char-by-name "Reaction (prepend \"*\" for substring search): " ewoc-locate 2] 7)])#@45 Push reaction BUTTON at point.

(fn BUTTON)
(defalias 'ement-room-reaction-button-action #[257 "\212\300!b\210\301\302!)\207" [button-start call-interactively ement-room-toggle-reaction] 3 (#$ . 104936)])#@72 Toggle ROOM's membership in SPACE on SESSION.

(fn ROOM SPACE SESSION)
(defalias 'ement-room-toggle-space #[771 "\301!>\210\302H\303\304\"\210\305\302\"\306\"\203 \307\202 \310\211\311\267\2022 \312\313!BC\2023 \314 \2023 \315\316\317	\320\321\322	&&\207" [cl-struct-ement-room-tags type-of 1 string-match "[^:]+:\\([^z-a]+\\)" match-string ement--room-in-space-p remove add #s(hash-table size 2 test eq rehash-size 1.5 rehash-threshold 0.8125 purecopy t data (add 36 remove 45)) "via" vector make-hash-table nil ement-put-state "m.space.child" :then make-closure #[257 "\306!\210\307\310\"\311\302!>\210\302\312H\311\304!!>\210\304\312H\313\314\315\316\317\320\321\322\323\300!!&\n\311\303!!>\204> \324\325\326\303D\"\210\303\327\303\327HBI\210\330\331\303\302$\266\332\333\334\304!\301\335=\203^ \336\202e \301\337=\205e \340\334\303!$\207" [V0 V1 V2 V3 V4 cl-struct-ement-session-tags mapp map-elt event_id type-of 1 make-ement-event :id :type "m.space.child" :sender :state-key :content json-read-from-string json-encode signal wrong-type-argument ement-room 6 run-hook-with-args ement-event-hook ement-message "Room %S %s space %S" ement--format-room add "added to" remove "removed from" cl-struct-ement-room-tags] 17 "\n\n(fn RESPONSE-DATA)"]] 21 (#$ . 105147) (byte-code "\304=\203 \305\306 \307\"\202 \310\311!\210\211G\312H\313H\206  	\211\206& \n\204/ 	\204C \314\315\n\316\317$\211\242\243\211\242\243\266\320\321\322	!\"\314\315\n\323\324\325\316\326&\211\242\243\211\242\243\325	\nE\262\266\206*\207" [major-mode ement-room ement-session current-prefix-arg ement-room-list-mode eieio-oref magit-current-section value [nil nil] vectorp 0 1 ement-complete-room :session :predicate #[257 "\300!?\207" [ement--space-p] 3 "\n\n(fn ROOM)"] format "Toggle room %S's membership in space: " ement--format-room :prompt :suggest nil ement--space-p] 14)])#@128 Switch to a buffer showing ROOM on SESSION.
Uses action `ement-view-room-display-buffer-action', which see.

(fn ROOM SESSION)
(defalias 'ement-room-view #[514 "\302!>\210\303H\304!\210\305\306\"\211\307!\204T \310\311!#\262\302!>\2043 \312\313\314D\"\210\306\303H\236\211\203D \211\241\266\202T \303\306B\211\262\303HBI\266\315	\"\210\316\317#\207" [cl-struct-ement-room-tags ement-view-room-display-buffer-action type-of 18 mapp map-elt buffer buffer-live-p ement-room--buffer ement-room--buffer-name signal wrong-type-argument ement-room pop-to-buffer run-hook-with-args ement-room-view-hook] 11 (#$ . 107074) (byte-code "\300\301\302 \303\304\305\306&\207" [ement-complete-room :session ement-complete-session :suggest nil :predicate #[257 "\300!?\207" [ement--space-p] 3 "\n\n(fn ROOM)"]] 7)])
(defalias 'ement-view-room 'ement-room-view)#@118 Call `ement-room-list-auto-update' with SESSION.
To be used in `ement-room-view-hook', which see.

(fn ROOM SESSION)
(defalias 'ement-room-view-hook-room-list-auto-update #[514 "\300!\207" [ement-room-list-auto-update] 4 (#$ . 107956)])#@43 Return name for ROOM's buffer.

(fn ROOM)
(defalias 'ement-room--buffer-name #[257 "\303!	>\204 \304\305\306D\"\210\307H\206+ \303!	>\204% \304\305\306D\"\210\307\310!I\nQ\207" [ement-room-buffer-name-prefix cl-struct-ement-room-tags ement-room-buffer-name-suffix type-of signal wrong-type-argument ement-room 2 ement--room-display-name] 6 (#$ . 108199)])#@44 Go to EVENT in current buffer.

(fn EVENT)
(defalias 'ement-room-goto-event #[257 "\302\303\304\"\"\211\203 \305!b\207\306\307\310!	>\204\" \311\312\313D\"\210\314H\"\207" [ement-ewoc cl-struct-ement-event-tags ement-room--ewoc-last-matching make-closure #[257 "\302!	>\205- \302\300!	>\204 \303\304\305\300D\"\210\300\306H\302!	>\204) \303\304\305D\"\210\306H\232\207" [V0 cl-struct-ement-event-tags type-of signal wrong-type-argument ement-event 1] 6 "\n\n(fn DATA)"] ewoc-location error "Event not found in buffer: %S" type-of signal wrong-type-argument ement-event 1] 8 (#$ . 108569)])#@51 Return event at POS or signal an error.

(fn POS)
(defalias 'ement-room--event-at #[257 "\212\211b\210\204\f \302\300!\210\303!\211\304H\262\305!	>\203  \211\202# \306\307!)\207" [ement-ewoc cl-struct-ement-event-tags cl--assertion-failed ewoc-locate 2 type-of user-error "No event at point"] 4 (#$ . 109177)])#@337 Push new DATA to ROOM on SESSION and add events to room buffer.
If SET-PREV-BATCH is nil, don't set ROOM's prev-batch slot to the
"prev_batch" token in response DATA (this should be set,
e.g. when filling timeline gaps as opposed to retrieving messages
before the earliest-seen message).

(fn ROOM SESSION DATA &key (SET-PREV-BATCH t))
(defalias 'ement-room-retro-callback #[899 "\303\304\"\206 \305A@\211\203@ \211@\306>\203) \211A\204! \307\310@\"\210\211AA\262\202 \311>A@\2037 \312\262\202 \307\313@\"\210\202 \210\314!>\210\315H\316!\210\317\320\"\317\321\"\317\322\"\317\323\"\312\316!\210\317\324\"G\325_\237\262\237\262\326\211T\262\211GW\203\225 \327H!I\210\202} \314!>\204\246 \330\331\332D\"\210\333\334\314!>\204\273 \330\331\332D\"\210\333H\312#I\266\335 \336C\337\340\336#\341\342#\343K\341\344\"\216\343M\210	\326\211T\262\211\fGW\2033\345\346\347H\"\314!	>\204\330\331\350D\"\210\351H\"\203\312I\210\202-\327H!I\210\352\fH\312#\210\343 \210\202\342 \353\354\"\262\f\314!>\204K\330\331\332D\"\210\355\334\314!>\204`\330\331\332D\"\210\355H\"I\266\203\263rq\210\356 \341\357\"\216\360	!\211\203\207\361!\210\210\362!\210\203\257\203\257\314!>\204\250\330\331\332D\"\210\325I\210\312*\210\363\364\365\366\335 	\"!\")\266\367\370\"\207" [cl-struct-ement-room-tags cl-struct-ement-session-tags ement-room-retro-loading plist-member :set-prev-batch (nil t) (:set-prev-batch :allow-other-keys) error "Missing argument for %s" :allow-other-keys nil "Keyword argument %s not one of (:set-prev-batch)" type-of 18 mapp map-elt _start end chunk state buffer 3 -1 ement--make-event signal wrong-type-argument ement-room 5 append current-time 0 make-progress-reporter "Ement: Processing earlier events..." make-closure #[128 "\211\203 \211A\262\242\202 \301\211\242T\240\203 \302\303\304GTD\"\210\300\304\247\203. @Y\2053 \305#\207" [V0 V1 signal wrong-number-of-arguments nil progress-reporter-do-update] 9 "\n\n(fn &optional (VALUE (cl-incf g2618)))"] ement-progress-update #[0 "\301\300M\207" [V0 ement-progress-update] 2] gethash alist-get event_id ement-session 11 ement--put-event seq-remove null 6 current-window-configuration #[0 "\301\300!\207" [V0 set-window-configuration] 2] get-buffer-window select-window ement-room--process-events format "Ement: Progress reporter done (took %.2f seconds)" float-time time-subtract message "Ement: Loaded %s earlier events."] 30 (#$ . 109498)])#@346 Insert EVENTS into current buffer.
Calls `ement-room--insert-event' for each event and inserts
timestamp headers into appropriate places while maintaining
point's position.  If RETRO is non-nil, assume EVENTS are earlier
than any existing events, and only insert timestamp headers up to
the previously oldest event.

(fn EVENTS &optional RETRO)
(defalias 'ement-room--insert-events #[513 "\302\211\211\211\303p!\203 \303p!\262`dU\262\203+ \203+ \304\305!\"\262\306\307\"\262\310 \311\312\"\216\203: \313!\210\307\302\203o :\204N GW\203o :\203\\ \211A\262\242\202_ H\262\314!\210\315 \210T\262\202> )\266\316\302\205z \"\210	\203\204 \317!\210\205\257 \203\247 \320!r\311\321\"\216\313@\322\"\210\323\324!\"\210\325y*\207\211\205\257 \326d\"\207" [ement-ewoc ement-room-sender-in-headers nil get-buffer-window ewoc-locate window-start ewoc-nth 0 current-window-configuration make-closure #[0 "\301\300!\207" [V0 set-window-configuration] 2] select-window ement-room--process-event ement-progress-update ement-room--insert-ts-headers ement-room--insert-sender-headers internal--before-with-selected-window #[0 "\301\300!\207" [V0 internal--after-with-selected-window] 2] norecord set-window-start ewoc-location -1 set-window-point] 12 (#$ . 112060)])#@84 Send a typing notification for ROOM on SESSION.

(fn SESSION ROOM &key (TYPING t))
(defalias 'ement-room--send-typing #[642 "\303\304\"\206 \305A@\211\203@ \211@\306>\203) \211A\204! \307\310@\"\210\211AA\262\202 \311>A@\2037 \312\262\202 \307\313@\"\210\202 \210\314!>\210\315H\314!	>\210\211\315H\314!\n>\210\315H\316\317\320!\320!#\321B\322\323BD\324	\325\326\327\330!\331\332&\207" [cl-struct-ement-session-tags cl-struct-ement-user-tags cl-struct-ement-room-tags plist-member :typing (nil t) (:typing :allow-other-keys) error "Missing argument for %s" :allow-other-keys nil "Keyword argument %s not one of (:typing)" type-of 1 format "rooms/%s/typing/%s" url-hexify-string "typing" "timeout" 20000 ement-api :method put :data json-encode :then ignore] 18 (#$ . 113357)])
(byte-code "\300\301\302\303\304DD\305\306\307\310\311\312\313&	\207" [custom-declare-variable ement-room-mode-hook funcall function #[0 "\300\207" [nil] 1 ""] "Hook run after entering `ement-room-mode'." :options (visual-line-mode) :type hook :group ement-room] 10)
(defvar ement-room-mode-hook nil)
(byte-code "\300\301N\204\f \302\300\301\303#\210\304\305!\204 \302\305\306\307#\210\300\207" [ement-room-mode-hook variable-documentation put "Hook run after entering `(Ement-Room (:eval (unless (map-elt ement-syncs ement-session) (propertize :Not-syncing 'face 'font-lock-warning-face 'help-echo Automatic syncing was interrupted; press \"g\" to resume)))) mode.\nNo problems result if this variable is not bound.\n`add-hook' automatically binds it.  (This is true for all hook variables.)" boundp ement-room-mode-map definition-name ement-room-mode] 4)
(defvar ement-room-mode-map (make-sparse-keymap))
(byte-code "\301\302N\204 \303\301\302\304\305!#\210\306\307!\204* \303\307\310\311#\210\312\307\306\307!\203& \313\202( \314 \"\210\307\302N\2048 \303\307\302\304\315!#\210\306\300!\204X \303\300\310\311#\210\312\300\306\300!\203P \313\202V \316\300\313\"\210\"\210\300\302N\204f \303\300\302\304\317!#\210\303\311\320\313#\207" [ement-room-mode-abbrev-table ement-room-mode-map variable-documentation put purecopy "Keymap for `ement-room-mode'." boundp ement-room-mode-syntax-table definition-name ement-room-mode defvar-1 nil make-syntax-table "Syntax table for `ement-room-mode'." define-abbrev-table "Abbrev table for `ement-room-mode'." derived-mode-parent] 5)#@331 Major mode for Ement room buffers.
This mode initializes a buffer to be used for showing events in
an Ement room.  It kills all local variables, removes overlays,
and erases the buffer.

\{ement-room-mode--advertised-keymap}

This mode runs the hook `ement-room-mode-hook', as the final or penultimate step during
initialization.
(defalias 'ement-room-mode #[0 "\306\300!\210\307\310 \210\311\312\313!\210\314\f!\210 \313!!\210\307\"\315 )\210\316 \210\307#$%&'\317(\320\321!)\306\322!\210\323*\324B\325\326!\203Y \306\326!\210\211B\210\202w \306\327!\210\211:\203i \202s \205s \330BCB\210\306\331!\210\332\306\333!\210\334\335\")\336\337!\207" [delay-mode-hooks major-mode mode-name ement-room-mode-map ement-room-mode-syntax-table ement-room-mode-abbrev-table make-local-variable t kill-all-local-variables ement-room-mode ("Ement-Room" (:eval (unless (map-elt ement-syncs ement-session) (propertize ":Not-syncing" 'face 'font-lock-warning-face 'help-echo "Automatic syncing was interrupted; press \"g\" to resume")))) use-local-map set-syntax-table erase-buffer remove-overlays ement-room--imenu-create-index-function ewoc-create ement-room--pp-thing filter-buffer-substring-function ement-room--buffer-substring-filter ement-room-browse-url boundp browse-url-handlers browse-url-browser-function "." completion-at-point-functions (ement-room--complete-members-at-point ement-room--complete-rooms-at-point) dnd-protocol-alist append (("^file:///" . ement-room-dnd-upload-file) ("^file:" . ement-room-dnd-upload-file)) run-mode-hooks ement-room-mode-hook local-abbrev-table ement-room-mode-effective-keymap inhibit-read-only buffer-read-only ement-room-left-margin-width left-margin-width ement-room-right-margin-width right-margin-width imenu-create-index-function ement-ewoc ement-room-matrix.to-url-regexp] 4 (#$ . 115741) nil])
(byte-code "\300\301\302\"\210\303\304\305\306\307DD\310\311\312\313\314\315\316\317\320&\207" [add-hook ement-room-mode-hook visual-line-mode custom-declare-variable ement-room-self-insert-mode funcall function #[0 "\300\207" [nil] 1 ""] "Non-nil if Ement-Room-Self-Insert mode is enabled.\nSee the `ement-room-self-insert-mode' command\nfor a description of this minor mode.\nSetting this variable directly does not take effect;\neither customize it (see the info node `Easy Customization')\nor call the function `ement-room-self-insert-mode'." :set custom-set-minor-mode :initialize custom-initialize-default :type boolean :group ement-room] 12)#@1473 When enabled, `self-insert-command' keys begin a new message.

The user options `ement-room-self-insert-chars' and
`ement-room-self-insert-commands' determine the specific keys and
commands which will have this effect.

When this mode is enabled, `ement-room-mode-self-insert-keymap'
takes precedence over `ement-room-mode-map', with the shadowed
key bindings in `ement-room-mode-map' becoming accessible via
`ement-room-mode-map-prefix-key'.

If you define custom key bindings in `ement-room-mode-map', you
should call `ement-room-self-insert-mode' after defining those
keys (rather than before).  Your bindings will be functional in
either case, but they may not appear in the help for
`ement-room-mode' if you define them afterwards.

If you bind keys in `ement-room-mode-self-insert-keymap', do so
via `ement-room-mode-self-insert-keymap-update-hook' (see which).

This is a global minor mode.  If called interactively, toggle the
`Ement-Room-Self-Insert mode' mode.  If the prefix argument is
positive, enable the mode, and if it is zero or negative, disable
the mode.

If called from Lisp, toggle the mode if ARG is `toggle'.  Enable
the mode if ARG is nil, omitted, or is a positive number.
Disable the mode if ARG is a negative number.

To check whether the minor mode is enabled in the current buffer,
evaluate `(default-value \='ement-room-self-insert-mode)'.

The mode's hook is called both when the mode is enabled and when
it is disabled.

(fn &optional ARG)
(defalias 'ement-room-self-insert-mode #[256 "\304 \305\301\306=\203 \307\301!?\202! \247\203  \310W\203  \311\202! \312\"\210\313\300!\2038 \314\301\"\307\301!\2038 \301B	\203B \315 \210\202D \n\316 \210\317\320\307\301!\203S \321\202T \322\"\210\323\324!\203} \325\301!\210\304 \203l \211\304 \232\203} \326\327\330\307\301!\203y \331\202z \332\333$\210\210\334 \210\307\301!\207" [global-minor-modes ement-room-self-insert-mode ement-room-mode-map ement-room-mode--advertised-keymap current-message set-default toggle default-value 1 nil t boundp delq ement-room-mode-self-insert-keymap-update ement-room-mode-effective-keymap-update run-hooks ement-room-self-insert-mode-hook ement-room-self-insert-mode-on-hook ement-room-self-insert-mode-off-hook called-interactively-p any customize-mark-as-set message "%s %sabled%s" "Ement-Room-Self-Insert mode" "en" "dis" "" force-mode-line-update] 7 (#$ . 118270) (byte-code "\203\n \301!\202 \302C\207" [current-prefix-arg prefix-numeric-value toggle] 2)])
(defvar ement-room-self-insert-mode-hook nil)
(byte-code "\301\302N\204\f \303\301\302\304#\210\303\301\305\306#\210\303\301\307\310C#\210\311\312\310\313\300!\205# \310\211%\207" [ement-room-self-insert-mode-map ement-room-self-insert-mode-hook variable-documentation put "Hook run after entering or leaving `ement-room-self-insert-mode'.\nNo problems result if this variable is not bound.\n`add-hook' automatically binds it.  (This is true for all hook variables.)" custom-type hook standard-value nil add-minor-mode ement-room-self-insert-mode boundp] 6)#@64 Compose a new message beginning with the just-typed character.
(defalias 'ement-room-self-insert-new-message #[0 "\300\301\302\303 !\"\210\304\305!\207" [seq-do #[257 "\211B\211\207" [unread-command-events] 3 "\n\n(fn KEY)"] reverse this-command-keys-vector call-interactively ement-room-dispatch-new-message] 4 (#$ . 121321) nil])#@340 Call `read-from-minibuffer', binding variables and keys for Ement.
Arguments PROMPT, INITIAL-INPUT, HISTORY, DEFAULT-VALUE, and
INHERIT-INPUT-METHOD are as those expected by `read-string',
which see.  Runs hook `ement-room-read-string-setup-hook', which
see.

(fn PROMPT &optional INITIAL-INPUT HISTORY DEFAULT-VALUE INHERIT-INPUT-METHOD)
(defalias 'ement-room-read-string #[1281 "	\303\304#\305\306!\211\303\307#M\210\303\310\"\216\311\312\"\210\313		\n\314&)\207" [ement-room ement-session ement-room-minibuffer-map make-closure #[0 "\305\302!\210\301\305\303!\210\300\305\304!\210\306\307\310!\210\311\312!\207" [V0 V1 ement-room ement-session completion-at-point-functions make-local-variable (ement-room--complete-members-at-point ement-room--complete-rooms-at-point) visual-line-mode 1 run-hooks ement-room-read-string-setup-hook] 2 "Bind keys and variables locally (to be called in minibuffer)."] make-symbol "minibuffer-setup" #[0 "\302\303\300\"\210\301 \207" [V0 V1 remove-hook minibuffer-setup-hook] 3] #[0 "\301\302\300\"\207" [V0 remove-hook minibuffer-setup-hook] 3] add-hook minibuffer-setup-hook read-from-minibuffer nil] 17 (#$ . 121661)])#@161 Return buffer named NAME showing ROOM's events on SESSION.
If ROOM has no buffer, one is made and stored in the room's local
data slot.

(fn SESSION ROOM NAME)
(defalias 'ement-room--buffer #[771 "\306\307!>\204 \310\311\304D\"\210\312H\313\"\206Z\314!r\211q\210\315 \210	\205' \301\307!>\204; \310\311\304D\"\210\316H\206S \307!>\204P \310\311\304D\"\210\317H\307!>\204c \310\311\304D\"\210p\3201v \321\312H\313\322$0\266\202\204 \210\312\323\312H\313#I\266\324\325\326\327\"\322\330$\210\331\332!\210\333\307\f!>\204\245 \310\311\304\fD\"\210\f\334H\307\f!>\204\267 \310\311\304\fD\"\210\f\335HD\322\211\211:\203\341 @\262\336\337\340\341\342\343&\211\262?\211\262\203\341 A\262\202\276 \266\203\203\356 \344\345\346\347#\202\357 \350\307\f!>\204\376 \310\311\304\fD\"\210\f\351H\211\352=\203\344\353\346\347#\344\354\355\356\357\360\361\362\363\364\365\366&P\202<\367!\203;\344\370\346\371#\344\372\355\373\357\360\361\362\363\364\365\374&P\202<\350\262\375@#\266\307!>\204U\310\311\304D\"\210\376\312H\236\211\203f\211\322\241\266\202u\312\376C\211\262\312HBI\266\307!>\204\204\310\311\304D\"\210\313\312H\236\211\203\225\211\241\266\202\245\312\313B\211\262\312HBI\266\377\201B \307!>\204\271\310\311\304D\"\210\334H!!\210\377\201B \307!>\204\323\310\311\304D\"\210\201C H!!\210\201D  \210A\203\354\201E @!\210\201F \201G \201H \201I \307!>\204\n\310\311\304\nD\"\210\201J H\322\211\341%\211\205 \201K \201L \"\262\201M \201H \201N \307\n!>\204<\310\311\304\fD\"\210	\201J H\322\211\341%\211\205R\201K \201O \"\262%)\210\211\262\207" [cl-struct-ement-room-tags ement-room-header-line-format header-line-format ement-session ement-room list-buffers-directory map-elt type-of signal wrong-type-argument 18 buffer generate-new-buffer ement-room-mode 12 1 (map-not-inplace) map-put! nil map-insert add-hook kill-buffer-hook make-closure #[0 "\302\300!	>\204 \303\304\305\300D\"\210\3061 \307\300\310H\311\312\211$0\207\210\300\310\313\300\310H\311\312#I\210\312\207" [V0 cl-struct-ement-room-tags type-of signal wrong-type-argument ement-room (map-not-inplace) map-put! 18 buffer nil map-insert] 6] local make-local-variable bookmark-make-record-function ement-room-bookmark-make-record 5 16 cl-find "m.room.encryption" :test equal :key ement-event-type propertize "This appears to be an encrypted room, which is not natively supported by Ement.el.  (See information about using Pantalaimon in Ement.el documentation.)" face font-lock-warning-face "" 14 invite "You've been invited to this room.  " "[Join this room]" button (t) category default-button mouse-face highlight follow-link t action #[257 "	\303 \210\304\305!\210\306\307!\n>\204 \310\311\300D\"\210\312H\"\207" [ement-room ement-session cl-struct-ement-room-tags kill-buffer message "Joining room... (buffer will be reopened after joining)" ement-room-join type-of signal wrong-type-argument 1] 8 "\n\n(fn BUTTON)"] ement--space-p "This room is a space.  It is not for messaging, but only a grouping of other rooms.  " font-lock-type-face "[View rooms in this space]" (t) #[257 "	\302 \210\303\304!\210\305\"\207" [ement-room ement-session kill-buffer message "Viewing space..." ement-view-space] 6 "\n\n(fn BUTTON)"] ewoc-set-hf new-events ement-room--process-events ement-ewoc ement-room-sender-in-headers reverse 6 ement-room--insert-ts-headers ement-room--insert-sender-headers ement-room-move-read-markers :read-event alist-get "m.read" 8 map-nested-elt (content event_id) :fully-read-event "m.fully_read" (content event_id)] 19 (#$ . 122843)])#@62 Return event struct for event ID in current buffer.

(fn ID)
(defalias 'ement-room--event-data #[257 "\302\303\"\304\211\211\211\203L \305H\262\306!	>\203; \306!	>\204* \307\310\311D\"\210\312H\232\203; \262\304\211\262\202< \313\203L \314\"\262\304\262\202 \207" [ement-ewoc cl-struct-ement-event-tags ewoc-nth -1 nil 2 type-of signal wrong-type-argument ement-event 1 t ewoc-prev] 11 (#$ . 126497)])#@91 Return STRING with "%" escaped.
Needed to display things in the header line.

(fn STRING)
(defalias 'ement-room--escape-% #[257 "\300\301\302\303\211%\207" [replace-regexp-in-string "%" "%%" t] 7 (#$ . 126923)])#@258 Value for `filter-buffer-substring-function' in Ement rooms.

Strips the `line-prefix' and `wrap-prefix' text properties which
are used when formatting certain Matrix events, but which should
not be copied into other buffers.

(fn BEG END &optional DELETE)
(defalias 'ement-room--buffer-substring-filter #[770 "\300\301!#\302\303G\304$\210\207" [default-value filter-buffer-substring-function remove-list-of-text-properties 0 (line-prefix wrap-prefix)] 9 (#$ . 127142)])#@48 Format string for timestamps in Imenu indexes.
(defconst ement-room-timestamp-header-imenu-format "%Y-%m-%d (%A) %H:%M" (#$ . 127623))#@86 Return Imenu index for the current buffer.
For use as `imenu-create-index-function'.
(defalias 'ement-room--imenu-create-index-function #[0 "\302\303\"\211\304\211:\203: @\262\305H\211\242\243\211\242\243\306	\"\211\307	!B\262\266\202\262\262\262B\262A\262\202 \211\237\207" [ement-ewoc ement-room-timestamp-header-imenu-format ement-room--ewoc-collect-nodes #[257 "\211\300H\211:\205 \211\242\211\301=??\262\207" [2 ts] 5 "\n\n(fn NODE)"] nil 2 format-time-string ewoc-location] 13 (#$ . 127763)])#@55 Predicate used to refresh `ement-room-occur' buffers.
(defvar ement-room-occur-pred nil (#$ . 128287))
(make-variable-buffer-local 'ement-room-occur-pred)
(defvar ement-room-occur-mode-hook nil)
(byte-code "\300\301N\204\f \302\300\301\303#\210\304\305!\204 \302\305\306\307#\210\300\207" [ement-room-occur-mode-hook variable-documentation put "Hook run after entering Ement-Room-Occur mode.\nNo problems result if this variable is not bound.\n`add-hook' automatically binds it.  (This is true for all hook variables.)" boundp ement-room-occur-mode-map definition-name ement-room-occur-mode] 4)
(defvar ement-room-occur-mode-map (make-sparse-keymap))
(byte-code "\301\302N\204 \303\301\302\304\305!#\210\306\307!\204* \303\307\310\311#\210\312\307\306\307!\203& \313\202( \314 \"\210\307\302N\2048 \303\307\302\304\315!#\210\306\300!\204X \303\300\310\311#\210\312\300\306\300!\203P \313\202V \316\300\313\"\210\"\210\300\302N\204f \303\300\302\304\317!#\210\303\311\320\321#\207" [ement-room-occur-mode-abbrev-table ement-room-occur-mode-map variable-documentation put purecopy "Keymap for `ement-room-occur-mode'." boundp ement-room-occur-mode-syntax-table definition-name ement-room-occur-mode defvar-1 nil make-syntax-table "Syntax table for `ement-room-occur-mode'." define-abbrev-table "Abbrev table for `ement-room-occur-mode'." derived-mode-parent ement-room-mode] 5)#@543 Major mode derived from `ement-room-mode' by `define-derived-mode'.
It inherits all of the parent's attributes, but has its own keymap,
abbrev table and syntax table:

  `ement-room-occur-mode-map', `ement-room-occur-mode-abbrev-table' and
`ement-room-occur-mode-syntax-table'

which more-or-less shadow ement-room-mode's corresponding tables.

In addition to any hooks its parent mode might have run, this mode runs the hook
`ement-room-occur-mode-hook', as the final or penultimate step during initialization.

\{ement-room-occur-mode-map}
(defalias 'ement-room-occur-mode #[0 "\306\300!\210\307\310 \210\311\312\310\313N\203 \314\311\313\310\313N#\210\315!\204' \316\317 \"\210\320\f!\211\2035 \211\321 =\203; \322\f\323 \"\210\210\324\325\"\204R =\204R \326\325C#\210\327!\210\330\f!\210)\331\332!\207" [delay-mode-hooks major-mode mode-name ement-room-occur-mode-map ement-room-occur-mode-syntax-table ement-room-occur-mode-abbrev-table make-local-variable t ement-room-mode ement-room-occur-mode "Ement-Room-Occur" mode-class put keymap-parent set-keymap-parent current-local-map char-table-parent standard-syntax-table set-char-table-parent syntax-table abbrev-table-get :parents abbrev-table-put use-local-map set-syntax-table run-mode-hooks ement-room-occur-mode-hook local-abbrev-table] 5 (#$ . 129672) nil])
(byte-code "\301\302\303#\210\301\304\305#\210\301\306\307#\210\301\310\311#\207" [ement-room-occur-mode-map define-key [remap ement-room-send-message] ement-room-occur-find-event "g" revert-buffer "n" ement-room-occur-next "p" ement-room-occur-prev] 4)#@313 Show known events in current buffer matching args in a new buffer.
If REGEXP, show events whose sender or body content match it.  Or
if USER-ID, show events from that user.  Or if PRED, show events
matching it.  HEADER is used if given, or set according to other
arguments.

(fn &key USER-ID REGEXP PRED HEADER)
(defalias 'ement-room-occur #[128 "\306\307\"A@\306\310\"A@\306\311\"A@\306\312\"A@\211\203O \211@\313>\2037 \211A\204/ \314\315@\"\210\211AA\262\202 \316>A@\203F \317\262\202 \314\320@\"\210\202 \210	\321\322\323\324!\n>\204e \325\326\301D\"\210\327H\"!\206\212 \211\330\230\262\204\200 \331\332#\202\212 \205\212 \331\333\"\206\322 \211\330\230\262\204\264 \322\334\324!\n>\204\255 \325\326\301D\"\210\327H#\202\322 \205\322 \322\335	\324!\n>\204\316 \325\326\301D\"\210\327H#rq\210\336\337 )\210\340 \210\211\341\305!\210\331\342$\343\344\324!\n>\204\325\326\301D\"\210\345H!!\210\343\344\324!\n>\204\325\326\301D\"\210\346H!!\210\347*\"\210\350 )\210\351!\207" [ement-session ement-room cl-struct-ement-room-tags inhibit-read-only header-line-format revert-buffer-function plist-member :user-id :regexp :pred :header (:user-id :regexp :pred :header :allow-other-keys) error "Missing argument for %s" :allow-other-keys nil "Keyword argument %s not one of (:user-id :regexp :pred :header)" get-buffer-create format "*Ement Room Occur: %s*" type-of signal wrong-type-argument 2 "" make-closure #[257 "\305!\n>\205\250 \306\301\305\211!\n>\204 \307\310\311D\"\210\312H!>\204> \307\310\313\305!\n>\2048 \307\310\311D\"\210\312HD\"\210\305!\n>\204M \307\310\311D\"\210\312H\314H\"\206\250 \315\305!\n>\204f \307\310\311D\"\210\312H\305\300!\f>\204x \307\310\316\300D\"\210\300\317H\"\211\205\204 \306\301\"\262\206\250 \320\321\305!\n>\204\232 \307\310\311D\"\210\322H\"\211\205\246 \306\301\"\262\207" [V0 V1 cl-struct-ement-event-tags cl-struct-ement-user-tags cl-struct-ement-room-tags type-of string-match signal wrong-type-argument ement-event 2 ement-user 1 gethash ement-room 20 alist-get body 3] 10 "\n\n(fn DATA)"] #[257 "\303!	>\205P \300\303\211!	>\204 \304\305\306D\"\210\307H!\n>\204; \304\305\310\303!	>\2045 \304\305\306D\"\210\307HD\"\210\303!	>\204J \304\305\306D\"\210\307H\311H\232\207" [V0 cl-struct-ement-event-tags cl-struct-ement-user-tags type-of signal wrong-type-argument ement-event 2 ement-user 1] 9 "\n\n(fn DATA)"] "Events matching %S in %s" "Events from %s in %s" t erase-buffer ement-room-occur-mode make-local-variable #[128 "\305!\211\306H\262r\307\310\311\302!\f>\204 \312\313\314\302D\"\210\302\315H\"q\210\316\317\301\320\300$\210\321\322\323\"\"\211\2056 \324\")\207" [V0 V1 V2 ement-ewoc cl-struct-ement-room-tags ewoc-locate 2 alist-get buffer type-of signal wrong-type-argument ement-room 18 ement-room-occur :pred :header ement-room--ewoc-last-matching make-closure #[257 "\300=\207" [V0] 3 "\n\n(fn DATA)"] ewoc-goto-node] 8 "\n\n(fn &rest _)" nil] ement-room--process-events reverse 5 6 ewoc-filter ement-room--insert-ts-headers pop-to-buffer ement-ewoc] 16 (#$ . 131272) (byte-code "\300\301!\211\211\302\230\262\205 \303 \304\305F\207" [read-regexp "Regexp (leave empty to select user instead)" "" ement-complete-user-id :regexp :user-id] 6)])#@47 Find EVENT in room's main buffer.

(fn EVENT)
(defalias 'ement-room-occur-find-event #[257 "\303!	>\210\304H\305!\210\306\307\"\303!\n>\210\310H\311!\210\312\313!!r\314\315\"\216\316@\317\"\210\320!*\207" [ement-room cl-struct-ement-room-tags cl-struct-ement-event-tags type-of 18 mapp map-elt buffer 1 display-buffer internal--before-with-selected-window get-buffer-window make-closure #[0 "\301\300!\207" [V0 internal--after-with-selected-window] 2] select-window norecord ement-room-find-event] 8 (#$ . 134603) (byte-code "\301!\211\302H\262C\207" [ement-ewoc ewoc-locate 2] 3)])#@45 Go to Nth next event.

(fn &optional (N 1))
(defalias 'ement-room-occur-next #[128 "\211\203 \211A\262\242\202 \301\203 \302\303\304GTD\"\210\211\305V\203% \306\202& \307\305\310!W\203; \311!\210T\262\202* \266\312\313!\211\314H\262!\207" [ement-ewoc 1 signal wrong-number-of-arguments ement-room-occur-next 0 ement-room-goto-next ement-room-goto-prev abs call-interactively ement-room-occur-find-event ewoc-locate 2] 7 (#$ . 135204) nil])#@49 Go to Nth previous event.

(fn &optional (N 1))
(defalias 'ement-room-occur-prev #[128 "\211\203 \211A\262\242\202 \300\203 \301\302\303GTD\"\210\304[!\207" [1 signal wrong-number-of-arguments ement-room-occur-prev ement-room-occur-next] 6 (#$ . 135665) nil])#@78 Alist mapping event types to functions which process events in room buffers.
(defvar ement-room-event-fns nil (#$ . 135938))#@241 Process EVENTS in current buffer.
Calls `ement-progress-update' for each event.  Calls
`ement-room--insert-ts-headers' when done.  Uses handlers defined
in `ement-room-event-fns'.  The current buffer should be a room's
buffer.

(fn EVENTS)
(defalias 'ement-room--process-events #[257 "\211\302\303\211\211\203X :\204 GW\203X :\203# \211A\262\242\202& H\262\304\305!>\2049 \306\307\310D\"\210\311H	\303\211\312%\262\203K !\210\313 \210T\262\303\262\202 \266\314 \207" [cl-struct-ement-event-tags ement-room-event-fns 0 nil alist-get type-of signal wrong-type-argument ement-event 5 equal ement-progress-update ement-room--insert-ts-headers] 12 (#$ . 136069)])#@142 Process EVENT in current buffer.
Uses handlers defined in `ement-room-event-fns'.  The current
buffer should be a room's buffer.

(fn EVENT)
(defalias 'ement-room--process-event #[257 "\302\303!>\204 \304\305\306D\"\210\307H	\310\211\311%\211\205- \3121% \211!0\207\313\314\"\210\310\262\207" [cl-struct-ement-event-tags ement-room-event-fns alist-get type-of signal wrong-type-argument ement-event 5 nil equal (debug error) message "Ement (ement-room--process-event): Error processing event: %S"] 7 (#$ . 136759)])#@253 Define an event handling function for events of TYPE.
Around the BODY, the variable `event' is bound to the event being
processed.  The function is called in the room's buffer.  Adds
function to `ement-room-event-fns', which see.

(fn TYPE &rest BODY)
(defalias 'ement-room-defevent '(macro . #[385 "\300\301\302BB\303\304\305\306QBBBE\207" [setf alist-get (ement-room-event-fns nil nil #'string=) lambda (event) "`ement-room' handler function for " " events."] 9 (#$ . 137289)]))
(byte-code "\301\302\303\304#\210\305\302\306\307#\310\311\312#\313\203 \241\266\202( \311B\211\262B\266\310\314\312#\315\2038 \241\266\207\314B\211\262B\210\207" [ement-room-event-fns put ement-room-defevent edebug-form-spec (stringp def-body) function-put lisp-indent-function defun assoc "m.reaction" string= #[257 "\304!>\210\211\305H\306!\210\307\310\"\306!\210\307\311\"\307\312\"\307\313\"\314\315\232\205\326 \316\317\314\211\211\211\211\211\211\211&\n\304	!\n>\204F \320\321\301	D\"\210	\322H\314\211\211:\203q @\262\323\"\203f \262\314\211\262\202g \324\203q A\262\202L \266\204\211\203\323 \304!>\204\206 \320\321\317D\"\210\307\325H\326\314#\327\n\"\203\231 \211\202\235 	B\262\3301\261 \331\325H\326\314$0\266\202\276 \210\325\332\325H\326#I\266\333\334\335\"\"\211\205\316 \336\"\262\202\324 \314\262\207" [cl-struct-ement-event-tags ement-room cl-struct-ement-room-tags ement-ewoc type-of 3 mapp map-elt m.relates_to event_id rel_type _key nil "m.annotation" record ement-event signal wrong-type-argument 6 ement--events-equal-p t 9 reactions memql (map-not-inplace) map-put! map-insert ement-room--ewoc-last-matching make-closure #[257 "\302!	>\205 \300\302!	>\204 \303\304\305D\"\210\306H\232\207" [V0 cl-struct-ement-event-tags type-of signal wrong-type-argument ement-event 1] 6 "\n\n(fn DATA)"] ewoc-invalidate] 19 "`ement-room' handler function for m.reaction events.\n\n(fn EVENT)"] "m.room.power_levels" #[257 "\300!\207" [ement-room--insert-event] 3 "`ement-room' handler function for m.room.power_levels events.\n\n(fn EVENT)"]] 5)#@83 Return power-levels EVENT in ROOM formatted as a string.

(fn EVENT ROOM SESSION)
(defalias 'ement-room--format-power-levels-event #[771 "\304!>\210\305H\306H\307!\210\310\311\"\312H\307!\210\310\313\"\307!\210\310\311\"\211\205\231 \304!	>\204= \314\315\316	D\"\210\317H\320\n	\"\321\322\323\"\"\211\242\243\324!\205^ \325\n\"\211\203j \320\"\202k \326\204~ \327\330\326\331#\"\202\221 \327\332\326\331#\326\331\n#	$\333\334\335%P\266\210\207" [cl-struct-ement-event-tags cl-struct-ement-user-tags ement-users ement-room-wrap-prefix type-of 2 3 mapp map-elt users 6 prev_content signal wrong-type-argument ement-user 1 ement--user-displayname-in cl-find-if make-closure #[257 "\301@\300\302\303$\211?\206 AA\232?\207" [V0 cl-find :key car] 6 "\n\n(fn NEW-USER)"] symbol-name gethash propertize format "%s sent a power-level event" help-echo "%s set %s's power level to %s" wrap-prefix face ement-room-membership] 27 (#$ . 139408)])
(byte-code "\301\302\303#\304\203 \241\266\207\302B\211\262B\210\207" [ement-room-event-fns assoc "m.room.canonical_alias" string= #[257 "\300!\207" [ement-room--insert-event] 3 "`ement-room' handler function for m.room.canonical_alias events.\n\n(fn EVENT)"]] 4)#@86 Return canonical alias EVENT in ROOM formatted as a string.

(fn EVENT ROOM SESSION)
(defalias 'ement-room--format-canonical-alias-event #[771 "\303!>\210\304H\305H\306!\210\307\310\"	\311\312\313\311\314\n	\"\315\303\n!\n>\2041 \316\317\320\fD\"\210	\321H##\322	\323\324%P\207" [cl-struct-ement-event-tags ement-room-wrap-prefix cl-struct-ement-user-tags type-of 2 3 mapp map-elt alias propertize format "%s set the canonical alias to <%s>" ement--user-displayname-in help-echo signal wrong-type-argument ement-user 1 wrap-prefix face ement-room-membership] 17 (#$ . 140670)])
(byte-code "\301\302\303#\304\203 \241\266\202 \302B\211\262B\266\301\305\303#\306\203/ \241\266\202: \305B\211\262B\266\301\307\303#\310\203L \241\266\202W \307B\211\262B\266\301\311\303#\312\203i \241\266\202t \311B\211\262B\266\301\313\303#\314\203\206 \241\266\202\221 \313B\211\262B\266\301\315\303#\316\203\243 \241\266\202\256 \315B\211\262B\266\301\317\303#\320\203\300 \241\266\202\313 \317B\211\262B\266\301\321\303#\322\203\335 \241\266\202\350 \321B\211\262B\266\301\323\303#\324\203\370 \241\266\207\323B\211\262B\210\207" [ement-room-event-fns assoc "m.room.redaction" string= #[257 "\304!>\210\211\305H\306!\210\307\310\"\211\304	!\n>\210	\311H\312\313\314\315\316&\317\320\321\"\"\211\322:\203\200 @\262\304!>\204E \323\324\325D\"\210\326\305H\236\211A\327\"\203X \211\202\\ \nB\262\203j \241\266\202y \305\326B\211\262\305HBI\266A\262\202- \266\203]\304!>\204\225 \323\324\325D\"\210\326\305H\236\211A\327	\"\203\250 \211\202\254 B\262\203\272 \241\266\202\312 \305\326B\211\262\305HBI\266\304!>\210\330H\306!\210\307\331\"\306!\210\307\332\"\307\333\"\334\232\203[\312	\313\314\315\316&\211\203Z\304!>\204\323\324\325D\"\210\335\307\304!>\204\323\324\325D\"\210\305H\336\"\313\314\315\316&\3371<\340\305H\336\322$0\266\202I\210\305\341\305H\336#I\266\342\320\343\"\"\211\203Y\344\"\210\210\210\266\342\320\345\"\"\211\205m\344\"\207" [cl-struct-ement-event-tags ement-room cl-struct-ement-room-tags ement-ewoc type-of 9 mapp map-elt redacts 6 cl-find :key ement-event-id :test equal cl-remove-if-not make-closure #[257 "\302!	>\210\211\303H\304!\210\305\306\"\304!\210\305\307\"\305\310\"\300\232\205& \211\311\232\207" [V0 cl-struct-ement-event-tags type-of 3 mapp map-elt m.relates_to event_id rel_type "m.replace"] 7 "\n\n(fn TIMELINE-EVENT)"] nil signal wrong-type-argument ement-event redacted-by memql 3 m.relates_to event_id rel_type "m.annotation" cl-remove reactions (map-not-inplace) map-put! map-insert ement-room--ewoc-last-matching #[257 "\302!	>\205 \300\302!	>\204 \303\304\305D\"\210\306H\232\207" [V0 cl-struct-ement-event-tags type-of signal wrong-type-argument ement-event 1] 6 "\n\n(fn DATA)"] ewoc-invalidate #[257 "\302!	>\205= \302!	>\210\211\303H\304H\305!\210\306\307\"\305!\210\306\310\"\306\311\"\300\232\2067 \211\312\232\2057 \300\232\266\202\262\266\202\207" [V0 cl-struct-ement-event-tags type-of 1 3 mapp map-elt m.relates_to event_id rel_type "m.replace"] 8 "\n\n(fn DATA)"]] 20 "`ement-room' handler function for m.room.redaction events.\n\n(fn EVENT)"] "m.typing" #[257 "\306!	>\210\307H\306!\n>\210\211\307H\306!>\210\310H\311!\210\312\313\"\211\314\211\315\"\262G\316U\203: \317\262\202\210 \320\314\211\211\211T\262GW\203q H\262\321\f\"\262\203f \322\"B\262\202k B\262\314\262\202? \237\266\205\262\323\324\325\326\327#\266\202P\330\331#\262\332 \333\211 \333!\334\335\"\216\336\"\317#,\207" [ement-session cl-struct-ement-session-tags cl-struct-ement-user-tags cl-struct-ement-event-tags ement-users ement-room type-of 1 3 mapp map-elt user_ids nil delete 0 "" -1 gethash ement--user-displayname-in propertize "Typing: " ", " mapconcat identity face font-lock-comment-face buffer-modified-p t make-closure #[0 "\300\203\n \300\301=\205 \302\300!\207" [V0 autosaved restore-buffer-modified-p] 2] ewoc-set-hf buffer-undo-list inhibit-read-only inhibit-modification-hooks ement-ewoc] 17 "`ement-room' handler function for m.typing events.\n\n(fn EVENT)"] "m.room.avatar" #[257 "\300!\207" [ement-room--insert-event] 3 "`ement-room' handler function for m.room.avatar events.\n\n(fn EVENT)"] "org.matrix.msc3015.m.room.name.override" #[257 "\302!	>\204 \303\304\300D\"\210\211\305\306!I\266\307\310!!\207" [ement-room cl-struct-ement-room-tags type-of signal wrong-type-argument 2 ement--room-display-name rename-buffer ement-room--buffer-name] 6 "`ement-room' handler function for org.matrix.msc3015.m.room.name.override events.\n\n(fn EVENT)"] "m.room.member" #[257 "\303 \304\211\304\305\306\"\216\307!,\207" [buffer-undo-list inhibit-read-only inhibit-modification-hooks buffer-modified-p t make-closure #[0 "\300\203\n \300\301=\205 \302\300!\207" [V0 autosaved restore-buffer-modified-p] 2] ement-room--insert-event] 6 "`ement-room' handler function for m.room.member events.\n\n(fn EVENT)"] "m.room.message" #[257 "\302!>\210\211\303H\304H\305!\210\306\307\"\305!\210\306\310\"\306\311\"\305!\210\306\312\"\305!\210\306\313\"\305!\210\306\311\"	\203R \203R \314\232\203R \315	!\206\\ \316	!\207\211\203X \317\207\316	!\207" [cl-struct-ement-event-tags ement-room-replace-edited-messages type-of 3 6 mapp map-elt m.relates_to rel_type event_id m.relations m.replace "m.replace" ement-room--replace-event ement-room--insert-event nil] 11 "`ement-room' handler function for m.room.message events.\n\n(fn EVENT)"] "m.room.tombstone" #[257 "\303!>\210\211\304H\305!\210\306\307\"\306\310\"\211	\311\312\313\314#\315\316#\"\317\320#\321\322G\323\324%\210\325!\210\326\n\211#\207" [cl-struct-ement-event-tags ement-session ement-ewoc type-of 3 mapp map-elt body replacement_room ement--button-buttonize propertize help-echo "Join replacement room" make-closure #[257 "\302\301\300\"\207" [V0 V1 ement-room-join] 4 "\n\n(fn _)"] format "This room has been replaced.  Explanation:%S  Replacement room: <%s>" add-face-text-property 0 font-lock-warning-face t ement-room--insert-event ewoc-set-hf] 14 "`ement-room' handler function for m.room.tombstone events.\n\n(fn EVENT)"] "m.read" #[257 "\302\303\304!	>\204 \305\306\307D\"\210\310H#\207" [ement-room cl-struct-ement-event-tags ement-room-move-read-markers :read-event type-of signal wrong-type-argument ement-event 1] 8 "`ement-room' handler function for m.read events.\n\n(fn EVENT)"] "m.fully_read" #[257 "\302\303\304!	>\204 \305\306\307D\"\210\310H#\207" [ement-room cl-struct-ement-event-tags ement-room-move-read-markers :fully-read-event type-of signal wrong-type-argument ement-event 1] 8 "`ement-room' handler function for m.fully_read events.\n\n(fn EVENT)"]] 4)#@47 EWOC node for the room's read-receipt marker.
(defvar ement-room-read-receipt-marker nil (#$ . 147575))
(make-variable-buffer-local 'ement-room-read-receipt-marker)#@45 EWOC node for the room's fully-read marker.
(defvar ement-room-fully-read-marker nil (#$ . 147745))
(make-variable-buffer-local 'ement-room-fully-read-marker)
(custom-declare-face 'ement-room-read-receipt-marker '((t (:inherit show-paren-match))) "Read marker line in rooms." :group 'ement-room-faces)
(custom-declare-face 'ement-room-fully-read-marker '((t (:inherit isearch))) "Fully read marker line in rooms." :group 'ement-room-faces)
(byte-code "\300\301\302\303\304DD\305\306\307\310\311&\207" [custom-declare-variable ement-room-send-read-receipts funcall function #[0 "\300\207" [t] 1 ""] "Whether to send read receipts.\nAlso controls whether the read-receipt marker in a room is moved\nautomatically." :type boolean :group ement-room] 8)#@120 Update read receipts in visible Ement room buffers.
To be called from timer stored in
`ement-read-receipt-idle-timer'.
(defalias 'ement-room-read-receipt-idle-timer #[0 "\205- \301 \211\205+ \211@\302\303\304!\"\305=\203$ \302\306\304!\"\203$ \307!\210A\266\202\202 \262\207" [ement-room-send-read-receipts window-list buffer-local-value major-mode window-buffer ement-room-mode ement-room ement-room-update-read-receipt] 6 (#$ . 148501)])#@104 Update read receipt for room displayed in WINDOW.
Also, mark room's buffer as unmodified.

(fn WINDOW)
(defalias 'ement-room-update-read-receipt #[257 "\305!r\306\307\"\216\310@\311\"\210\312\313\"\314\315\316\317\"\"\206! \320\321\"\2030 \315\316\317\"\322!Y\2045 ?\205\276 \211\205P \211\323H\324!	>\203H \202N \325\326\327$\262\330\"\316\205\274 \203h \322!\315\316\317\"X\204w \315 dY\204w \325\326\327$\262\323H\262\331\316!\210\332\n\"?\205\274 \333\n!@\211\203\232 \334!\203\232 \335!\210\210\316\211\n\236\336\f\337$\203\261 \241\210\202\272 B\211\262\nB\262\266\203\266\202*\207" [ement-ewoc cl-struct-ement-event-tags ement-room-read-receipt-request ement-room ement-session internal--before-with-selected-window make-closure #[0 "\301\300!\207" [V0 internal--after-with-selected-window] 2] select-window norecord ement-room--ewoc-last-matching #[257 "\211\300=\207" [ement-room-read-receipt-marker] 3 "\n\n(fn NODE-DATA)"] ewoc-locate window-end nil t ewoc-nth -1 ewoc-location 2 type-of ement-room--ewoc-next-matching ement-event-p ewoc-prev ewoc-next set-buffer-modified-p alist-get map-values process-live-p interrupt-process ement-room-mark-read :read-event] 13 (#$ . 148954)])#@52 Move to the fully-read marker in the current room.
(defalias 'ement-room-goto-fully-read-marker #[0 "\205 \305!\211\203 \211b\210\306\307\"\207\310\311\312	!\n>\204$ \313\314\301	D\"\210	\315H\307\211\316%\211\2053 \317\320\"\211\203{ \321\312!\f>\204H \313\314\303D\"\210\322H\"\203j \323	\324\321\312!\f>\204d \313\314\303D\"\210\322H\"$\207p\325\326!\210\327	\330\331\332\"%\207\333\334!\207" [ement-room-fully-read-marker ement-room cl-struct-ement-room-tags ement-session cl-struct-ement-session-tags ewoc-location set-window-start nil alist-get "m.fully_read" type-of signal wrong-type-argument 8 equal map-nested-elt (content event_id) gethash 11 ement-room-mark-read :fully-read-event message "Searching for first unread event..." ement-room-retro-to :then make-closure #[0 "r\300q\210\302	!\210\303 )\207" [V0 ement-room ement-room-move-read-markers ement-room-goto-fully-read-marker] 2] error "Room has no fully-read event"] 13 (#$ . 150190) nil])#@251 Mark ROOM on SESSION as read on the server.
Set "m.read" to READ-EVENT and "m.fully_read" to
FULLY-READ-EVENT.  Return the API request.

Interactively, mark both types as read up to event at point.

(fn ROOM SESSION &key READ-EVENT FULLY-READ-EVENT)
(defalias 'ement-room-mark-read #[642 "\303\304\"A@\303\305\"A@\211\203B \211@\306>\203+ \211A\204# \307\310@\"\210\211AA\262\202 \311>A@\2039 \312\262\202 \307\313@\"\210\202 \210\204K \314\315!\210\204S \314\316!\210\204_ \211\204_ \314\317!\210\211\204i \320#\207\321!>\210\322H\323\324\325!\"\326\321!	>\204\211 \327\330\331D\"\210\322HBC\203\254 \332\321!	>\204\244 \327\330\331D\"\210\322HBB\262\333\334\335\336\337!\340\341\342$\343\344&\n\345\346\321!>\204\330 \327\330\347D\"\210\n\350H\"\211\205r\211q\210\351\n!@\211\203\367 \352!\203\367 \353!\210\210\312\n\236\211\203	\211\241\210\202B\211\262\nB)\262\207" [cl-struct-ement-room-tags cl-struct-ement-event-tags ement-room-read-receipt-request plist-member :read-event :fully-read-event (:read-event :fully-read-event :allow-other-keys) error "Missing argument for %s" :allow-other-keys nil "Keyword argument %s not one of (:read-event :fully-read-event)" cl--assertion-failed room session (or read-event fully-read-event) ement-room-send-receipt type-of 1 format "rooms/%s/read_markers" url-hexify-string "m.fully_read" signal wrong-type-argument ement-event "m.read" ement-api :method post :data json-encode :then make-closure #[257 "\303\302\304\301\305\300%\207" [V0 V1 V2 ement-room-move-read-markers :read-event :fully-read-event] 7 "\n\n(fn DATA)"] :else #[257 "\301!>\204 \302\303\304D\"\210\211\305H\211\306\232?\205\" \302\307\310\311\"D\"\207" [cl-struct-plz-error-tags type-of signal wrong-type-argument plz-error 3 "curl process interrupted" ement-api-error format "Ement: (ement-room-mark-read) Unexpected API error: %s"] 7 "\n\n(fn PLZ-ERROR)"] alist-get buffer ement-room 18 map-values process-live-p interrupt-process] 21 (#$ . 151173) (byte-code "\306=\204 \307\310\311\312\211$\210\313	!\211\314H\315!\n>\203! \314H\2020 \316	\317\320$\211\205. \211\314H\262\262\321	\317\"\211\314H\262=\203W \315!\f>\204P \322\323\303D\"\210\324H@\202X \325\326\257\207" [major-mode ement-ewoc cl-struct-ement-event-tags ement-room cl-struct-ement-room-tags ement-session ement-room-mode cl--assertion-failed (equal 'ement-room-mode major-mode) "This command is to be used in `ement-room-mode' buffers" nil ewoc-locate 2 type-of ement-room--ewoc-next-matching ement-event-p ewoc-prev ement-room--ewoc-last-matching signal wrong-type-argument 6 :read-event :fully-read-event] 10)])
(byte-code "\300\301\302\303#\300\207" [function-put ement-room-mark-read lisp-indent-function defun] 4)#@98 Send receipt of TYPE for EVENT to ROOM on SESSION.

(fn ROOM SESSION EVENT &key (TYPE "m.read"))
(defalias 'ement-room-send-receipt #[899 "\302\303\"\206 \304A@\211\203@ \211@\305>\203) \211A\204! \306\307@\"\210\211AA\262\202 \310>A@\2037 \311\262\202 \306\312@\"\210\202 \210\313!>\210\314H\313!	>\210\314H\315\316\317!\317!$\320\321\322\323\324\325\326\232\203w \327\330#\202x \331&\207" [cl-struct-ement-room-tags cl-struct-ement-event-tags plist-member :type (nil "m.read") (:type :allow-other-keys) error "Missing argument for %s" :allow-other-keys nil "Keyword argument %s not one of (:type)" type-of 1 format "rooms/%s/receipt/%s/%s" url-hexify-string ement-api :method post :data "{}" :then "m.read" make-closure #[257 "\302\301\303\300#\207" [V0 V1 ement-room-move-read-markers :read-event] 5 "\n\n(fn DATA)"] ignore] 20 (#$ . 153974)])#@547 Move read markers in ROOM to READ-EVENT and FULLY-READ-EVENT.
Each event may be an `ement-event' struct or an event ID.  This
updates the markers in ROOM's buffer, not on the server; see
`ement-room-mark-read' for that.

(fn ROOM &key (READ-EVENT (when-let ((event (alist-get "m.read" (ement-room-account-data room) nil nil #\='equal))) (map-nested-elt event \='(content event_id)))) (FULLY-READ-EVENT (when-let ((event (alist-get "m.fully_read" (ement-room-account-data room) nil nil #\='equal))) (map-nested-elt event \='(content event_id)))))
(defalias 'ement-room-move-read-markers #[385 "\301\302\"\206, \303\304\305\306!>\204 \307\310\311D\"\210\312H\303\211\313%\211\205) \314\315\"\262DA@\301\316\"\206[ \303\304\317\306!>\204I \307\310\311D\"\210\312H\303\211\313%\211\205X \314\320\"\262DA@\211\203\223 \211@\321>\203| \211A\204t \322\323@\"\210\211AA\262\202^ \324>A@\203\212 \303\262\202^ \322\325@\"\210\202^ \210\326\304\327\306!>\204\250 \307\310\311	D\"\210\330H\"\211\203\310 r\211q\210\203\276 \331\"\210\203\307 \332\"\210)\210\303\207" [cl-struct-ement-room-tags plist-member :read-event nil alist-get "m.read" type-of signal wrong-type-argument ement-room 8 equal map-nested-elt (content event_id) :fully-read-event "m.fully_read" (content event_id) (:read-event :fully-read-event :allow-other-keys) error "Missing argument for %s" :allow-other-keys "Keyword argument %s not one of (:read-event :fully-read-event)" #[514 "J\305!>\203 \305!>\204 \306\307\310D\"\210\311H\2021 ;\203( \2021 \312\313\314#\2051 \315\316	\317\320\"\"\321\322 \321\211\321\317\323\"\216\203P \324	\"\210\205[ \325		#L-\207" [cl-struct-ement-event-tags ement-ewoc inhibit-read-only buffer-undo-list inhibit-modification-hooks type-of signal wrong-type-argument ement-event 1 error "cl-etypecase failed: %s, %s" (ement-event string) nil ement-room--ewoc-last-matching make-closure #[257 "\302!	>\205 \302!	>\204 \303\304\305D\"\210\211\306H\300\232\207" [V0 cl-struct-ement-event-tags type-of signal wrong-type-argument ement-event 1] 5 "\n\n(fn DATA)"] t buffer-modified-p #[0 "\300\203\n \300\301=\205 \302\300!\207" [V0 autosaved restore-buffer-modified-p] 2] ewoc-delete ewoc-enter-after] 12 "\n\n(fn SYMBOL TO-EVENT)"] buffer 18 ement-room-read-receipt-marker ement-room-fully-read-marker] 11 (#$ . 154856)])
(byte-code "\300\301\302\303#\300\207" [function-put ement-room-move-read-markers lisp-indent-function defun] 4)#@318 Scroll buffer contents up, move fully read marker, and bury when at end.
Moves fully read marker to the top of the window (when the
marker's position is within the range of received events).  At
end-of-buffer, moves fully read marker to after the last event,
buries the buffer and shows the next unread room, if any.
(defalias 'ement-room-scroll-up-mark-read #[0 "\306 dU\203^ \203% \307	\n\310\311\312\"\211\313H\262\314\311\315\"\211\313H\262&\210\316\317!\210\320\321\322 \"\211\203Q \323!\210\f\324\267\202D \325\202K \326\202K \f\327\330\"\262 \266\202U \331 \266\f\332>\205\241 \333 \207\3341i \335 0\210\202o \336\317d\"\266\337\340 \"\211\205~ \341\342\343$\211\205\211 \205\211 \344!\211\205\222 \211\344!W\211\205\237 \307	\n\314\313H$\266\204\207" [ement-room-mark-rooms-read ement-room ement-session ement-ewoc major-mode ement-room-fully-read-marker window-point ement-room-mark-read :read-event ement-room--ewoc-last-matching #[257 "\301!>\205	 \302\207" [cl-struct-ement-event-tags type-of t] 3 "\n\n(fn DATA)"] 2 :fully-read-event #[257 "\301!>\205	 \302\207" [cl-struct-ement-event-tags type-of t] 3 "\n\n(fn DATA)"] set-buffer-modified-p nil cl-find-if #[257 "\300\301!!\302\235\207" [buffer-name window-buffer ("*Ement Taxy*" "*Ement Rooms*")] 4 "\n\n(fn WINDOW)"] window-list select-window #s(hash-table size 2 test eq rehash-size 1.5 rehash-threshold 0.8125 purecopy t data (ement-tabulated-room-list-mode 60 ement-room-list-mode 64)) ement-tabulated-room-list-next-unread ement-room-list-next-unread error "No clause matching `%S'" bury-buffer (ement-tabulated-room-list-mode ement-room-list-mode) revert-buffer (end-of-buffer) scroll-up-command set-window-point ewoc-locate window-start ement-room--ewoc-next-matching ement-event-p ewoc-prev ewoc-location] 10 (#$ . 157351) nil])#@183 Return the next node in EWOC after NODE that PRED is true of.
PRED is called with node's data.  Moves to next node by MOVE-FN.

(fn EWOC NODE PRED &optional (MOVE-FN #\='ewoc-next))
(defalias 'ement-room--ewoc-next-matching #[899 "\211\203 \211A\262\242\202 \300\203 \301\302\303\304G\\D\"\210\211\"\262\203. \305H!\203 \207" [ewoc-next signal wrong-number-of-arguments ement-room--ewoc-next-matching 4 2] 10 (#$ . 159185)])
(byte-code "\300\301\302\303#\300\207" [function-put ement-room--ewoc-next-matching lisp-indent-function defun] 4)#@144 Return the last node in EWOC matching PREDICATE.
PREDICATE is called with node's data.  Searches backward from
last node.

(fn EWOC PREDICATE)
(defalias 'ement-room--ewoc-last-matching #[514 "\300\301\"\302\211\203) \303H!\203 \262\302\211\262\202 \304\203) \305\"\262\202 \207" [ewoc-nth -1 nil 2 t ewoc-prev] 8 (#$ . 159746)])
(byte-code "\300\301\302\303#\300\207" [function-put ement-room--ewoc-last-matching lisp-indent-function defun] 4)#@108 Collect all nodes in EWOC matching PREDICATE.
PREDICATE is called with the full node.

(fn EWOC PREDICATE)
(defalias 'ement-room--ewoc-collect-nodes #[514 "\300\301\"\302\303\"\262\203 !\203 B\262\202 \211\237\207" [ewoc-nth 0 nil ewoc-next] 7 (#$ . 160209)])#@218 Insert timestamp headers into current buffer's `ement-ewoc'.
Inserts headers between START-NODE and END-NODE, which default to
the first and last nodes in the buffer, respectively.

(fn &optional START-NODE END-NODE)
(defalias 'ement-room--insert-ts-headers #[512 "\306\206\n \307\310\"\211\203 \311!\202 d\206 \307\312\"\313\314\206% #\262\211\2054 \314#\211\262\205\375 \311!V\206K \205K \311!V?\205\375 \315\316!\266\317!\266\211\320H\321!	>\204n \322\323\324D\"\210\211\325H\262\326\245\320H\321!	>\204\207 \322\323\324D\"\210\211\325H\262\326\245\211Z\n\211Y\203\367 \327\"\211\205\277 \211\320H\211:\203\266 \211\242\211\330=??\262\202\275 \211\331>\205\275 \332\262\262\204\367 \333!\333!\232\204\333 \f\334\330D#)\262\335 \332\211 \332!\336\337\"\216\334	\330D#,\266)\266\202 \207" [ement-ewoc cl-struct-ement-event-tags ement-room-timestamp-header-format ement-room-timestamp-header-delta ement-room-timestamp-header-with-date-format buffer-undo-list #[257 "\301!>\205 \301!>\204 \302\303\304D\"\210\211\305H\306\232?\207" [cl-struct-ement-event-tags type-of signal wrong-type-argument ement-event 5 "m.room.member"] 5 "\n\n(fn NODE-DATA)"] ewoc-nth -1 ewoc-location 0 nil ement-room--ewoc-next-matching #[257 "\302\303\304H\305!>\204 \306\307\310D\"\210\211\311H\262\312\245\313\314\304H\305!>\204/ \306\307\310D\"\210\211\311H\262\312\245\"\304H\305!>\204I \306\307\310D\"\210\211\304H\262\305!	>\204] \306\307\315D\"\210\211\316H\262\317\320\304H\305!>\204w \306\307\310D\"\210\211\321H\262\"\205\240 \322\323\317\320	\304H\305!>\204\227 \306\307\310D\"\210\211\321H\262\"\324\"!%\207" [cl-struct-ement-event-tags cl-struct-ement-user-tags format "TS:%S (%s)  Sender:%s  Message:%S" 2 type-of signal wrong-type-argument ement-event 4 1000 format-time-string "%Y-%m-%d %H:%M:%S" ement-user 1 alist-get body 3 substring-no-properties truncate-string-to-width 20] 15 "\n\n(fn EVENT)"] A B 2 type-of signal wrong-type-argument ement-event 4 1000 ewoc-next ts (ement-room-fully-read-marker ement-room-read-receipt-marker) t time-to-days ewoc-enter-after buffer-modified-p make-closure #[0 "\300\203\n \300\301=\205 \302\300!\207" [V0 autosaved restore-buffer-modified-p] 2] inhibit-read-only inhibit-modification-hooks] 18 (#$ . 160488)])#@236 Insert sender headers into EWOC.
Inserts headers between START-NODE and END-NODE, which default to
the first and last nodes in the buffer, respectively.

(fn EWOC &optional (START-NODE (ewoc-nth ewoc 0)) (END-NODE (ewoc-nth ewoc -1)))
(defalias 'ement-room--insert-sender-headers #[385 "\211\203 \211A\262\242\202 \302\303\"\203 \211A\262\242\202\" \302\304\"\2031 \305\306\307\310G\\D\"\210\311\203E \211\312H!\204E \313#\262\203P \313#\262\314\205\351 =?\205\351 \313\315\316\"\317$\262\312H\320!>\204| \305\321\322D\"\210\211\312H\262\204\220 \323#\266\202\336 \312H\320!	>\205\234 \324\262\203\262 \211\312H\232\204\335 \325\"\266\202\336 \312H!\203\335 \211\312H\320!>\204\315 \305\321\322D\"\210\211\312H\262\232\204\335 \323#\210\210\313#\262\202R \207" [cl-struct-ement-event-tags cl-struct-ement-user-tags ewoc-nth 0 -1 signal wrong-number-of-arguments ement-room--insert-sender-headers 3 #[257 "\301!>\205 \301!>\204 \302\303\304D\"\210\211\305H\306\232\207" [cl-struct-ement-event-tags type-of signal wrong-type-argument ement-event 5 "m.room.message"] 5 "\n\n(fn DATA)"] 2 ement-room--ewoc-next-matching nil make-closure #[257 "\302!	>\203\n \303\207\300!\207" [V0 cl-struct-ement-user-tags type-of t] 3 "\n\n(fn DATA)"] ewoc-prev type-of wrong-type-argument ement-event ewoc-enter-before t ewoc-set-data] 14 (#$ . 162845)])#@101 Try to coalesce events in nodes A and B in EWOC.
Return absorbing node if coalesced.

(fn A B EWOC)
(defalias 'ement-room--coalesce-nodes #[771 "\303\211!\205\332 \211!\205\332 \304H\305!>\205 \306\262\204/ \304H\305!>\205* \306\262\2043 \2024 \211=\203> \202? \304H\305!>\203\200 	\250\203l \304H\305!>\204a \307\310\311D\"\210\211\312H\262G	W\202\243 	\306=\203v \306\202\243 	\313\314\"\262\202\243 \305!\n>\203\232 \304\315\316\311\304HC\317\211$!I\202\243 \313\320\321#\205\243 \317\262\205\330 \211\304H\304H\305!>\204\275 \307\310\311D\"\210\211\312\312HBI\266\315\304H!\210\322\"\210\323\"\210\266\202\207" [cl-struct-ement-room-membership-events-tags ement-room-coalesce-events cl-struct-ement-event-tags #[257 "\211\302H\303!>\205\f \304\262\203- \211\302H\303!>\204# \305\306\307D\"\210\211\310H\262\311\235\206; \211\302H\303!	>\2059 \304\262\207" [cl-struct-ement-event-tags cl-struct-ement-room-membership-events-tags 2 type-of t signal wrong-type-argument ement-event 5 ("m.room.member")] 6 "\n\n(fn NODE)"] 2 type-of t signal wrong-type-argument ement-room-membership-events 1 error "No clause matching `%S'" ement-room-membership-events--update record nil "cl-etypecase failed: %s, %s" (ement-room-membership-events ement-event) ewoc-delete ewoc-invalidate] 15 (#$ . 164265)])#@47 Insert EVENT into current buffer.

(fn EVENT)
(defalias 'ement-room--insert-event #[257 "\305\306\307\310\311\312\313\"!\210\314	\315	%\306\211\211\316\"\262\2037 \317H!\2037 \262\306\262\202 \266\204\220 \320\321\"\211\203\206 \211\317H\322!	>\205Q \323\262\203~ \322!\n>\204g \324\325\326D\"\210\n\317H\317H\232\203~ \211\262\327#\202\213 \330\f\"\202\213 \330\f\"\262\202\317 \316\"\211\203\310 \211\317H\322!	>\205\244 \323\262\203\310 \322!\n>\204\272 \324\325\326D\"\210\n\317H\317H\232\203\310 \211\262\210\327\f#\262\203\366 \203\341 \331#\206\364 \316\"\203\363 \331\316\"#\206\364 \211\262\f\203 \332\211#\210\207" [ement-ewoc cl-struct-ement-user-tags cl-struct-ement-event-tags ement-room-coalesce-events ement-room-sender-in-headers #[257 "\302\303\304!>\204 \305\306\307D\"\210\310H\311\245\312\313\304!>\204) \305\306\307D\"\210\310H\311\245\"\304\211!>\204A \305\306\307D\"\210\314H!	>\204e \305\306\315\304!>\204^ \305\306\307\nD\"\210\314HD\"\210\304!>\204u \305\306\307D\"\210\314H\316H\317\320\304!>\204\215 \305\306\307\nD\"\210\321H\"\205\262 \322\323\317\320\304\n!>\204\252 \305\306\307\fD\"\210	\321H\"\324\"!%\207" [cl-struct-ement-event-tags cl-struct-ement-user-tags format "TS:%S (%s)  Sender:%s  Message:%S" type-of signal wrong-type-argument ement-event 4 1000 format-time-string "%Y-%m-%d %H:%M:%S" 2 ement-user 1 alist-get body 3 substring-no-properties truncate-string-to-width 20] 14 "\n\n(fn EVENT)"] nil #[257 "\302!>\203\n \303\207\302!	>\203 \303\207\211:\205\" \211\242\211\304=??\262\207" [cl-struct-ement-event-tags cl-struct-ement-room-membership-events-tags type-of t ts] 4 "\n\n(fn DATA)"] #[257 "\211\300>\207" [(ement-room-fully-read-marker ement-room-read-receipt-marker)] 3 "\n\n(fn DATA)"] #[257 "\302!>\203 \302!>\204 \303\304\305D\"\210\211\306H\207\302!	>\2036 \302!	>\2042 \303\304\307D\"\210\211\310H\207\211:\205\\ \211\242\211\311=\205Z \243\211:\205X \211\242\243\211?\205V \312_\266\202\262\262\207" [cl-struct-ement-event-tags cl-struct-ement-room-membership-events-tags type-of signal wrong-type-argument ement-event 4 ement-room-membership-events 2 ts 1000] 7 "\n\n(fn DATA)"] make-closure #[514 "\300!\300!W\207" [V0] 5 "Return non-nil if event A's timestamp is before B's.\n\n(fn A B)"] ement-room--ewoc-node-before :pred ewoc-next 2 ewoc-nth 0 type-of t signal wrong-type-argument ement-event ewoc-enter-after ewoc-enter-first ement-room--coalesce-nodes ement-room--insert-sender-headers] 15 (#$ . 165618)])#@140 Replace appropriate event with NEW-EVENT in current buffer.
If replaced event is not found, return nil, otherwise non-nil.

(fn NEW-EVENT)
(defalias 'ement-room--replace-event #[257 "\302\303\304\"\"\211\205+ \305\"\306\307\"\210\211\203$ \310#\202( \311\")\262\207" [ement-ewoc inhibit-read-only ement-room--ewoc-last-matching make-closure #[257 "\302!	>\205\f \303\300\"\207" [V0 cl-struct-ement-event-tags type-of ement--events-equal-p] 4 "\n\n(fn DATA)"] ewoc-prev t ewoc-delete ewoc-enter-after ewoc-enter-first] 8 (#$ . 168228)])#@178 Return node in EWOC that matches PRED and belongs before DATA by <-FN.
Search from FROM (either `first' or `last').

(fn EWOC DATA <-FN &key (FROM \='last) (PRED #\='identity))
(defalias 'ement-room--ewoc-node-before #[899 "\300\301\"\206 \302A@\300\303\"\206 \304A@\211\203J \211@\305>\2033 \211A\204+ \306\307@\"\210\211AA\262\202 \310>A@\203A \311\262\202 \306\312@\"\210\202 \210\313>\204U \314\315!\210\316\317\"\205\332 \320\321\267\202l \322\202m \323\202m \311\316\324\267\202~ \317\202 \325\202 \311\"\326H!\204\222 	$\262\326H	\"\203\243 \211\266\202\202\330 \211\n$\211\262\203\275 \326H\n\"\203\244 \211\206\324 \327\267\202\323 \316\n\325\"\202\324 \311\202\324 \311\262\266\202\262\207" [plist-member :from (nil last) :pred (nil identity) (:from :pred :allow-other-keys) error "Missing argument for %s" :allow-other-keys nil "Keyword argument %s not one of (:from :pred)" #1=(first last) cl--assertion-failed (member from '#1#) ewoc-nth 0 #[1028 "\"\262\203 \211\300H!\203  \207" [2] 7 "\n\n(fn EWOC NODE NEXT-FN PRED)"] #s(hash-table size 2 test eq rehash-size 1.5 rehash-threshold 0.8125 purecopy t data (first 100 last 104)) ewoc-next ewoc-prev #s(hash-table size 2 test eq rehash-size 1.5 rehash-threshold 0.8125 purecopy t data (first 118 last 122)) -1 2 #s(hash-table size 2 test eq rehash-size 1.5 rehash-threshold 0.8125 purecopy t data (first 199 last 207))] 15 (#$ . 168787)])#@228 Pretty-print THING.
To be used as the pretty-printer for `ewoc-create'.  THING may be
an `ement-event' or `ement-user' struct, or a list like `(ts
TIMESTAMP)', where TIMESTAMP is a Unix timestamp number of
seconds.

(fn THING)
(defalias 'ement-room--pp-thing #[257 "\306\307!>\203 \310\311	\n#\261\207\307!>\203# \312\313!\314\f#c\207:\203\335 \242\211\315=\203\313 \243\211:\203\271 \211\242\211\247\203\246 \243\211\204\221 \316\"\317! \232\203[ \211\320\\\262\321\202\\ \310!\322\267\202\205 \312\323\314\324\325\326\327TEE#\202\206 \312\323\314\324\325\326\330T\331\245EE#\202\206 \323\312\332\333#\261\207\307!\">\203\240 !\207\334\335\"\207\307!\">\203\263 !\207\334\335\"\207\307!\">\203\306 !\207\334\335\"\207\307!\">\203\330 !\207\334\335\"\207\336>\203\355 \312\323\314\337\332%c\207\307!\">\203\372 \211!\207\334\335\"\207" [cl-struct-ement-event-tags ement-room ement-session cl-struct-ement-user-tags ement-room-username-display-property ement-room-timestamp-header-format #[257 "\302\"\303\304G\305\306%\210	\307\310	#Pc\207" [ement-room ement-room-wrap-prefix ement-room--format-membership-events add-face-text-property 0 ement-room-membership append propertize wrap-prefix] 8 "\n\n(fn THING)"] type-of "" ement-room--format-event propertize ement--format-user display ts format-time-string string-width 3 "\n" #s(hash-table size 2 test eq rehash-size 1.5 rehash-threshold 0.8125 purecopy t data (right 99 center 115)) " " space :align-to - text center 2 face ement-room-timestamp-header error "No clause matching `%S'" (ement-room-fully-read-marker ement-room-read-receipt-marker) (space :width text :height (1)) ement-room-timestamp-header-with-date-format ement-room-timestamp-header-align cl-struct-ement-room-membership-events-tags] 18 (#$ . 170252)])#@135 Return EVENT in ROOM on SESSION formatted.
Formats according to `ement-room-message-format-spec', which see.

(fn EVENT ROOM SESSION)
(defalias 'ement-room--format-event #[771 "\304!>\204 \305\306\307D\"\210\310H\211\311\267\202\271 \312#\202>\313\314\315\314\316%\210\317\202>\317\202>	\320\321\322\320\323\304!>\204J \305\306\307D\"\210\n\324H\"\325\304\211\f!>\204b \305\306\307D\"\210\324H!\n>\204\207 \305\306\326\304!>\204\200 \305\306\307D\"\210\324HD\"\210\304!>\204\230 \305\306\307D\"\210\n\324H\327H#\"\330	\331\314%P\202>\332#\202>\333#\202>	\320\321\334\304\211	!>\204\317 \305\306\307D\"\210\324H!\n>\204\364 \305\306\326\304!>\204\355 \305\306\307D\"\210\n\324HD\"\210\304!>\204\305\306\307\nD\"\210\324H\327H\304	!>\204\305\306\307D\"\210\310H#\330	\325\321\335\304\f!>\2047\305\306\307D\"\210\336H\"%P\262\320\337\340#P\207" [cl-struct-ement-event-tags ement-room-wrap-prefix cl-struct-ement-user-tags ement-room-event-separator-display-property type-of signal wrong-type-argument ement-event 5 #s(hash-table size 6 test equal rehash-size 1.5 rehash-threshold 0.8125 purecopy t data ("m.room.message" 24 "m.room.member" 32 "m.reaction" 45 "m.room.avatar" 49 "m.room.power_levels" 169 "m.room.canonical_alias" 177)) ement-room--format-message widget-create ement-room-membership :button-face :value "" propertize format "%s changed the room's avatar." ement--user-displayname-in 2 help-echo ement-user 1 wrap-prefix face ement-room--format-power-levels-event ement-room--format-canonical-alias-event "[sender:%s type:%s]" "%S" 3 " " display] 18 (#$ . 172095)])#@63 Return formatted reactions to EVENT in ROOM.

(fn EVENT ROOM)
(defalias 'ement-room--format-reactions #[514 "\301\211C\302\303#\262\211\304\240\210\305\306!>\204 \307\310\311D\"\210\312H\313\"\211\203\244 \301\301\211\211\211:\203\221 @\262\314\306!>\204H \307\310\311D\"\210\315H\316\"\262\306!>\204_ \307\310\311D\"\210\317H\262\320\321#AB\203z \241\266\202\207 B\211\262B\262\266A\262\301\262\202. \322\323\324\325$\262\326\327\n\330#P\207\331\207" [cl-struct-ement-event-tags nil make-closure #[257 "\211\242\243\211\306\307\310#\306\311\312\313\n\"\203 G\202  \300\242\301\"\"\307\314#\306P\315\316\317\320\321\322\323\324\325\326\327\300$&\330\331\211!\f>\204L \332\333\303D\"\210\334H!>\204m \332\333\335\331!\f>\204g \332\333\303D\"\210\334HD\"\210\331!\f>\204| \332\333\303D\"\210\334H\334H\336\337\340\341&\211\203\227 \342\343G\344\345%\210\346\315\"\210\207" [V0 V1 ement-room-reaction-names-limit ement-session cl-struct-ement-session-tags cl-struct-ement-user-tags propertize face ement-room-reactions-key format " (%s)" length> ement-room-reactions button (t) category default-button action ement-room-reaction-button-action follow-link t help-echo make-closure #[771 "\303\304\300!\305\"\306\302\242\301\307\310\"\"Q\207" [V0 V1 V2 get-char-code-property string-to-char name ": " buffer-local-value ement-room] 10 "\n\n(fn WINDOW BUFFER POS)"] cl-member type-of signal wrong-type-argument 1 ement-user :key ement-user-id :test equal add-face-text-property 0 (:box (:style pressed-button) :inverse-video t) nil ement--remove-face-property] 22 "\n\n(fn KS)"] #[514 "\300\211:\203 @\262\211\301\"C\244\262A\262\202 \211\302\303\304#\207" [nil ement--user-displayname-in ", " mapconcat identity] 11 "\n\n(fn SENDERS ROOM)"] map-elt type-of signal wrong-type-argument ement-event 9 reactions map-nested-elt 3 (m.relates_to key) 2 assoc string= cl-sort > :key #[257 "\211AG\207" [] 2 "\n\n(fn PAIR)"] "\n  " mapconcat "  " ""] 16 (#$ . 173763)])#@203 Return EVENT in ROOM on SESSION formatted according to FORMAT.
Format defaults to `ement-room-message-format-spec', which see.

(fn EVENT ROOM SESSION &optional (FORMAT ement-room-message-format-spec))
(defalias 'ement-room--format-message #[899 "\211\203 \211A\262\242\202 \203 \306\307\310\311G\\D\"\210\312	\nr\313\314!\2064 r\315\314!q\210\316>p)q\210\317 \210?@\320\301!\210\f\320\302!\210\211c\210eb\210\321\322\312\316#\203\300 \312f\323=\203g \324\325!\210\202Q \326\327!\203\270 \330\325!\331\330\332!!\333\224S\333\225|\210\312\334A\"\206\211 \335\336\"\211			#\206\251 \325B\337\340\341\342!\"\343\344\345\340\346\"%)\340\322\347Q\"\211c\266\202Q \335\350\"\210\202Q C\203\364 \351e\352\"\211\203\363 \211b\210\324\325!\210\353\354\355 `\"!\337\356\357\360\361EC#\362ed\363$\210\362`d\364$\266\210\203T\351e\365\"\211\203.\211b\210\324\325!\210\353\354e`\"!\362e`\357\366e`{D$\210\212eb\210\337\356\357\367\360\361\370\371EED#c)\266\210\351e\372\"\211\203S\211b\210\324\325!\210`d{`d|\210eb\210\373\337\356\357\374D#!\266\210\375 ,\207" [ement-room-message-format-spec ement-room-left-margin-width ement-room-right-margin-width right-margin-width left-margin-width ement-room--format-message-margin-p signal wrong-number-of-arguments ement-room--format-message 4 nil get-buffer " *ement-room--format-message*" get-buffer-create t erase-buffer make-local-variable search-forward "%" 37 delete-char 1 looking-at "\\([-0-9.]*\\)\\([a-zA-Z]\\)" match-string string-to-char 2 0 alist-get error "Invalid format character: `%%%c'" propertize format "[Event has no value for spec \"?%s\"]" char-to-string face font-lock-comment-face help-echo "%S" "s" "ement-room--format-message: Invalid format string: %S" next-single-property-change wrap-prefix-end string-width buffer-substring-no-properties line-beginning-position " " display space :width put-text-property wrap-prefix line-prefix left-margin-end (margin left-margin) (margin left-margin) - left-margin right-margin-start insert-and-inherit (margin right-margin) buffer-string buffer-undo-list ement-session ement-room ement-room-event-formatters print-level ement-room--format-message-wrap-prefix] 17 (#$ . 175823)])#@169 Return formatted body of "m.room.message" EVENT on SESSION.
If FORMATTED-P, return the formatted body content, when available.

(fn EVENT SESSION &key (FORMATTED-P t))
(defalias 'ement-room--format-message-body #[642 "\302\303\"\206 \304A@\211\203@ \211@\305>\203) \211A\204! \306\307@\"\210\211AA\262\202 \310>A@\2037 \311\262\202 \306\312@\"\210\202 \210\313!>\210\314H\315H\316!\210\317\320\"\321H\316!\210\317\322\"\316!\210\317\323\"\317\324\"\317\325\"\317\326\"\317	\327\"\316!\210\317\330\"\317\331\"\316!\210\317\323\"\317\326\"\317\325\"\206\240 	\206\246 \203\257 \211\204\265 \332!\202\335 \206\273 	\211\333\232\203\321 \334 \335\336\"\216\337!)\262\202\333 \325\340\206\331 \f#\262\341\267\202\311\202\342\"\202\343!\202\344!\202\345!\202\206?\205\325\346\"\203\347!\262\2046\332\204.\2032\350\2023\351!\262\211\203@\352Q\262\353\232\203Q\352\354\355\356\357#Q\262\204[\203b	\203b\350\262\207" [cl-struct-ement-event-tags ement-room-hide-redacted-message-content plist-member :formatted-p (nil t) (:formatted-p :allow-other-keys) error "Missing argument for %s" :allow-other-keys nil "Keyword argument %s not one of (:formatted-p)" type-of 3 6 mapp map-elt redacted_by 9 redacted-by body msgtype format formatted_body m.relates_to rel_type m.new_content copy-sequence "org.matrix.custom.html" match-data make-closure #[0 "\301\300\302\"\207" [V0 set-match-data t] 3] ement-room--render-html "[unknown body format: %s] %s" #s(hash-table size 7 test equal rehash-size 1.5 rehash-threshold 0.8125 purecopy t data ("m.notice" 228 "m.emote" 228 "m.text" 228 "m.image" 232 "m.file" 241 "m.video" 248 "m.audio" 255)) ement-room--format-m.image ement-room--format-m.file ement-room--format-m.video ement-room--format-m.audio "[unsupported msgtype: %s]" ement-room--linkify-urls "[redacted]" "[message has no body content]" " " "m.replace" propertize "[edited]" face font-lock-comment-face] 29 (#$ . 178055)])#@114 Return rendered version of HTML STRING.
HTML is rendered to Emacs text using `shr-insert-document'.

(fn STRING)
(defalias 'ement-room--render-html #[257 "r\303\304!\206 r\305\304!q\210\306p)q\210\307 \210\211c\210\212	\310K\311\312\"\310K\313K\311\314#\216\310M\210\313\315M\210\316\317ed\"!+\266\320`d{!)\207" [buffer-undo-list ement-room-use-variable-pitch shr-use-fonts get-buffer " *ement-room--render-html*" get-buffer-create t erase-buffer shr-tag-blockquote make-closure #[257 "\301 \300!\210\302d\303#\210\304d\305\306$\207" [V0 point-marker add-text-properties (wrap-prefix "    " line-prefix "    ") add-face-text-property ement-room-quote append] 7 "\n\n(fn DOM)"] shr-fill-line #[0 "\302\301M\210\303\300M\207" [V0 V1 shr-tag-blockquote shr-fill-line] 2] ignore shr-insert-document libxml-parse-html-region string-trim] 10 (#$ . 180098)])#@93 Return non-nil if EVENT in ROOM mentions USER.

(fn EVENT USER &optional (ROOM ement-room))
(defalias 'ement-room--event-mentions-user-p #[642 "\211\203 \211A\262\242\202 \203 \303\304\305\306G\\D\"\210\307!	>\210\306H\310!\210\311\312\"\311\313\"\211\2066 \211\205\250 \307!\n>\204K \303\314\315	D\"\210\316H\211\205` \317!\320\321\322$\266\203\262\206\250 \323\"\211\205{ \317!\320\321\322$\266\203\262\206\250 \307!\n>\204\221 \303\314\315	D\"\210\324H\211\205\246 \317!\320\321\322$\266\203\262\207" [ement-room cl-struct-ement-event-tags cl-struct-ement-user-tags signal wrong-number-of-arguments ement-room--event-mentions-user-p 3 type-of mapp map-elt body formatted_body wrong-type-argument ement-user 6 regexp-quote nil string-match t ement--user-displayname-in 1] 17 (#$ . 180967)])#@60 Return STRING with URLs in it made clickable.

(fn STRING)
(defalias 'ement-room--linkify-urls #[257 "\300\301\302\"r\211q\210\303\304\"\216c\210eb\210\305\306\307\310#\2032 \311\312\224\312\225\313\314\315\316\317\320\312!\321\322\323\302&\f\210\202 \324 *\207" [generate-new-buffer " *temp*" t make-closure #[0 "\301\300!\205	 \302\300!\207" [V0 buffer-name kill-buffer] 2] re-search-forward "\\<https?://[^[:space:]]+" nil noerror make-text-button 0 mouse-face highlight face link help-echo match-string action browse-url-at-mouse follow-link buffer-string] 15 (#$ . 181810)])#@64 Return a color in which to display USER's messages.

(fn USER)
(defalias 'ement-room--user-color #[257 "\304\305\306\"\307\310!>\204 \311\312\313D\"\210\314H\315\316\317!!	\\!\211\315\n!\245\320\321_!\315\322\323\"!\323\245\315\324\322\325\"\326\"!\323\245\315\324\322\327\"\330\"!\323\245E\331\332\333!!\"W\203i \331\334\333!!%\262\335\336\337\340C\"\"\207" [cl-struct-ement-user-tags ement-room-prism-color-adjustment most-positive-fixnum ement-room-prism-minimum-contrast #[257 "\300\301\301\302:\203< @\262:\203< @\262\211\303X\203% \304\245\202- \305\306\\\307\245\310\"_\\\262A\262A\262\202 \207" [(0.2126 0.7152 0.0722) nil 0 0.03928 12.92 expt 0.055 1.055 2.4] 11 "\n\n(fn RGB)"] make-closure #[514 "\300!\301\\\300!\301\\\245\211\302!]\207" [V0 0.05 /] 6 "\n\n(fn A B)"] #[1285 "\300\301#A\302\211A\262\242\262\211\203 \"Y\203 \211\206# \207" [color-gradient 20 nil] 10 "\n\n(fn --CL-CONTRAST-RATIO-- COLOR AGAINST TARGET TOWARD)"] type-of signal wrong-type-argument ement-user 1 float abs sxhash round 16581375 logand 255 ash 65280 -8 16711680 -16 color-name-to-rgb face-background default face-foreground apply color-rgb-to-hex append 2] 18 (#$ . 182398)])#@60 Non-nil in buffers that are composing a message to a room.
(defvar ement-room-compose-buffer nil (#$ . 183631))
(make-variable-buffer-local 'ement-room-compose-buffer)#@205 Compose a message to ROOM on SESSION.
Interactively, with prefix, prompt for room and session,
otherwise use current room.  With BODY, use it as the initial
message contents.

(fn ROOM SESSION &key BODY)
(defalias 'ement-room-compose-message #[642 "\305\306\"A@\211\203< \211@\307>\203% \211A\204 \310\311@\"\210\211AA\262\202 \312>A@\2033 \313\262\202 \310\314@\"\210\202 \210\315\316\317\320!\"!	\321!\210rq\210\322\"\210\211\203^ c\210\323\324!)\210\325\n\"\210?\205r \326\327 )\207" [ement-room ement-room-send-message-filter ement-room-compose-buffer-display-action ement-room-compose-buffer-window-auto-height scroll-conservatively plist-member :body (:body :allow-other-keys) error "Missing argument for %s" :allow-other-keys nil "Keyword argument %s not one of (:body)" generate-new-buffer format "*Ement compose: %s*" ement--room-display-name ement-room-compose-highlight ement-room-init-compose-buffer run-hooks ement-room-compose-hook pop-to-buffer 101 redisplay] 9 (#$ . 183805) (byte-code "\304=\203 \305\306 \307\"\202 \310\311!\210\211G\312H\313H\206  	\211\206& \n\204/ 	\204A \314\315\316\"\211\242\243\211\242\243\266	\n*D\207" [major-mode ement-room ement-session current-prefix-arg ement-room-list-mode eieio-oref magit-current-section value [nil nil] vectorp 0 1 ement-complete-room :suggest t] 10)])#@151 Edit EVENT in ROOM on SESSION to have new BODY, using a compose buffer.
The message must be one sent by the local user.

(fn EVENT ROOM SESSION BODY)
(defalias 'ement-room-compose-edit #[1028 "\303!>\204\f \304\305!\210\204 \304\306!\210\204 \304\307!\210\310\311\216\312`!\210\313\314$+\207" [cl-struct-ement-event-tags ement-room-editing-event ement-room-replying-to-overlay type-of cl--assertion-failed (ement-event-p event) room session nil #[0 "\300 \207" [ement-room-unhighlight-event] 1] ement-room-highlight-event-at ement-room-compose-message :body] 9 (#$ . 185174) (byte-code "\302 \211G\303U\203 \211A\262\242\202 \304\305\306GD\"\242	F\207" [ement-room ement-session ement-room-edit-message-prepare 2 signal wrong-number-of-arguments (event body)] 7)])#@104 Write and send a reply to EVENT, using a compose buffer.
Interactively, to event at point.

(fn EVENT)
(defalias 'ement-room-compose-reply #[257 "\204 \305\300!\210	\204 \305\301!\210\306!\n>\204 \305\307!\210\211\310\311\216\312`!\210\313	\"+\207" [ement-room ement-session cl-struct-ement-event-tags ement-room-replying-to-event ement-room-replying-to-overlay cl--assertion-failed type-of (ement-event-p event) nil #[0 "\300 \207" [ement-room-unhighlight-event] 1] ement-room-highlight-event-at ement-room-compose-message] 4 (#$ . 185966) (byte-code "\204 \301\300!\210\302!\211\303H\262C\207" [ement-ewoc cl--assertion-failed ewoc-locate 2] 3)])#@116 Edit the current message in a compose buffer.
To be called from a minibuffer opened from
`ement-room-read-string'.
(defalias 'ement-room-compose-from-minibuffer #[0 "\306 \204	 \307\310!\210\204 \307\300!\210	\204 \307\301!\210\311 \312\313\314\315!\n>\204- \316\317\300D\"\210\320H\206E \315!\n>\204B \316\317\300D\"\210\321H\"!\f\322\323\n\f&M\210\324\325\"\210\326 \210\327 \207" [ement-room ement-session cl-struct-ement-room-tags current-input-method ement-room-send-message-filter ement-room-replying-to-event minibufferp cl--assertion-failed (minibufferp) minibuffer-contents gensym format "ement-compose-%s" type-of signal wrong-type-argument 12 1 make-closure #[0 "\306\307\304\"\210\310\311\305$\210\302\312\313!\210\301\312\314!\210\300\f\301\203I \312\315!\210\316\317\320\321\301! >\204> \322\323\324\301D\"\210\301\325H\"\"P\202W \300\203W \312\315!\210\326Pp\327\330!\331\332\303$M\210\333\334\"\207" [V0 V1 V2 V3 V4 V5 remove-hook minibuffer-exit-hook ement-room-compose-message :body make-local-variable ement-room-replying-to-event ement-room-editing-event header-line-format format " (Replying to message from %s)" ement--user-displayname-in type-of signal wrong-type-argument ement-event 2 " (Editing message)" gensym "ement-show-compose-buffer" make-closure #[0 "\304\305\300\"\210\306\301\"\210\307\302!\207" [V0 V1 V2 ement-room-compose-buffer-display-action remove-hook window-configuration-change-hook pop-to-buffer set-input-method] 3] add-hook window-configuration-change-hook ement-room ement-session ement-room-send-message-filter cl-struct-ement-event-tags] 9] add-hook minibuffer-exit-hook deactivate-input-method abort-recursive-edit ement-room-editing-event] 14 (#$ . 186633) nil])#@50 Like `buffer-string' trimmed with `string-trim'.
(defalias 'ement-room-compose-buffer-string-trimmed #[0 "\300eb\210\301\302w\210`db\210\301\302x\210`\"\207" [buffer-substring-no-properties " 	\n" nil] 4 (#$ . 188405)])#@78 Bindings for `ement-room-compose-send' and `ement-room-compose-send-direct'.
(defalias 'ement-room-compose-send-prepare #[0 "\204 \306\300!\210	\204 \306\301!\210\n\204 \306\302!\210\307 \f\f	\n\310 \210\311\"\210\312\313\"\210\257\207" [ement-room-compose-buffer ement-room ement-session current-input-method ement-room-send-message-filter ement-room-replying-to-event cl--assertion-failed ement-room-compose-buffer-string-trimmed ement-room-compose-buffer-quit-restore-window ement-view-room add-to-history ement-room-message-history ement-room-editing-event] 14 (#$ . 188631)])#@148 Prompt to send the current compose buffer's contents.
To be called from an `ement-room-compose' buffer.
See also `ement-room-compose-send-direct'.
(defalias 'ement-room-compose-send #[0 "\305 \211G\306U\203 \211A\262\242\202 \307\310\311GD\"\211A\262\242\211A\262\242\211A\262\242\211A\262\242\211A\262\242\242\312\313\314!>\204L \307\315\316D\"\210\317H\"\204] \203 \320\321\322\323\n#\"!\324\325\216\326!\210\327\n\330\324\331%*\262\202\207 \327	\330\324\331%\203\230 \332\333\"$\202\253 \334\335\336\205\251 \333\f\n\"&*\207" [cl-struct-ement-room-tags current-input-method ement-room-send-message-filter ement-ewoc ement-room-replying-to-overlay ement-room-compose-send-prepare 7 signal wrong-number-of-arguments (body input-method send-message-filter replying-to-event editing-event room session) format "Send message (%s): " type-of wrong-type-argument ement-room 2 ewoc-location ement-room--ewoc-last-matching make-closure #[257 "\211\300\206 \301=\207" [V0 V1] 3 "\n\n(fn DATA)"] nil #[0 "\300 \207" [ement-room-unhighlight-event] 1] ement-room-highlight-event-at ement-room-read-string ement-room-message-history inherit-input-method ement-room-edit-message ement--original-event-for ement-room-send-message :body :replying-to-event] 19 (#$ . 189244) nil])#@140 Directly send the current compose buffer's contents.
To be called from an `ement-room-compose' buffer.
See also `ement-room-compose-send'.
(defalias 'ement-room-compose-send-direct #[0 "\301 \211G\302U\203 \211A\262\242\202 \303\304\305GD\"\211A\262\210\306\211A\262\242\211A\262\242\211A\262\242\211A\262\242\242\203N \307\310\"\n$\202b \311\312\n\313	\205` \310\n\"&)\207" [ement-room-send-message-filter ement-room-compose-send-prepare 7 signal wrong-number-of-arguments (body _input-method send-message-filter replying-to-event editing-event room session) nil ement-room-edit-message ement--original-event-for ement-room-send-message :body :replying-to-event] 17 (#$ . 190573) nil])#@136 Kill the compose buffer and window.
With prefix arg NO-HISTORY, do not add to `ement-room-message-history'.

(fn &optional NO-HISTORY)
(defalias 'ement-room-compose-abort #[256 "\301 \204\f \302\303\"\210\304 \210\3052 \306\307\310\"!0\211\205! \311!\207" [ement-room ement-room-compose-buffer-string-trimmed add-to-history ement-room-message-history ement-room-compose-buffer-quit-restore-window room-win walk-windows make-closure #[257 "\302!r\303\304\"\216\305@\306\"\210\307\310!\205) \311\301!\205) 	\205) 	\300=\205) \312\313\"*\207" [V0 ement-room internal--before-with-selected-window make-closure #[0 "\301\300!\207" [V0 internal--after-with-selected-window] 2] select-window norecord derived-mode-p ement-room-mode boundp throw room-win] 5 "\n\n(fn WIN)"] select-window] 7 (#$ . 191299) "P"])#@67 Kill the compose buffer and window without adding to the history.
(defalias 'ement-room-compose-abort-no-history #[0 "\300\301!\207" [ement-room-compose-abort t] 2 (#$ . 192117) nil])#@187 Set up the current buffer as a compose buffer.
Sets ROOM and SESSION buffer-locally, binds `save-buffer' in
a copy of the local keymap, and sets `header-line-format'.

(fn ROOM SESSION)
(defalias 'ement-room-init-compose-buffer #[514 "\306\300!\210\306\301!\210\211\306\302!\210\n\306\303!\210\307\306\305!\210\310\311\"\306\312!\210\313\n\306\314!\210\315\f\306\316!\210\310\317\320\316!\"\321\322\323\324\307$\210\325\326 \203Q \327\326 !\202S \330 !\210\331\332\333\334\335\336\337\257\"\210\331\340\341\"\210\331\342\343\"\210\331\344\345\"\210\331\346\347\"\210\331\350\351\"\210\331\352\353\"\210\354\355\356\357!@>\204\222 \360\361\300D\"\210\362H\"!\n\203\267 \355\363\364\357\n!A>\204\257 \360\361\365\nD\"\210\n\362H\"\"\202\274 \205\274 \366PB8\203\371 \321\367\370\324\371$\210\306\372!\210\362C\203\334 \373C]\202\335 \373\\:D\203\355 \306\374!\210D<E\203\371 \306\375!\210\307=\321\376\377\324\371$\210\321\201F \201G \324\371$\207" [ement-room ement-session ement-room-replying-to-event ement-room-editing-event ement-room-compose-buffer completion-at-point-functions make-local-variable t append (ement-room--complete-members-at-point ement-room--complete-rooms-at-point) dabbrev-select-buffers-function ement-compose-dabbrev-select-buffers dabbrev-friend-buffer-function ement-room-mode-p yank-excluded-properties (line-prefix wrap-prefix) default-value add-hook isearch-mode-hook ement-room-compose-history-isearch-setup nil use-local-map current-local-map copy-keymap make-sparse-keymap local-set-key [remap delete-backward-char] menu-item "" ement-room-compose-abort-no-history :filter #[257 "\205 \301 \302X\205 \214~\210m)\205 \211\207" [ement-room-self-insert-mode buffer-size 1] 3 "\n\n(fn CMD)"] [remap save-buffer] ement-room-dispatch-send-message "" ement-room-compose-abort [134217840] ement-room-compose-history-prev-message [134217838] ement-room-compose-history-next-message [134217842] ement-room-compose-history-isearch-backward [134217746] ement-room-compose-history-isearch-backward-regexp substitute-command-keys format " Press \\[save-buffer] to send message to room (%s), or \\[ement-room-compose-abort] to cancel." type-of signal wrong-type-argument 2 " (Replying to message from %s)" ement--user-displayname-in ement-event " (Editing message)" post-command-hook ement-room-compose-buffer-window-auto-height :local window-min-height 1 window-size-fixed window-resize-pixelwise window-state-change-functions ement-room-compose-buffer-window-state-change-handler cl-struct-ement-room-tags cl-struct-ement-event-tags header-line-format ement-room-compose-buffer-window-auto-height-min ement-room-compose-buffer-window-auto-height-fixed ement-room-compose-buffer-window-auto-height-pixelwise window-buffer-change-functions ement-room-compose-buffer-window-buffer-change-handler] 11 (#$ . 192307)])#@161 Ensure that the compose buffer displays the whole message.

Called via `post-command-hook' if option
`ement-room-compose-buffer-window-auto-height' is non-nil.
(defalias 'ement-room-compose-buffer-window-auto-height #[0 "\306\300!\203\n \206 \307 \206 \310 \205 \310 p=??\205\303 	\205# \311 \211\205) \312 \313\314\315\211\316#]\203: \211_\202; \211\317\315\320\"\211\205G \321\"?\205\301 \322\315\320#\210\316\n\203] \313\n]\202^ \313\211\203i ^\206j \211]\203\227 \316_\211\323\315\316\"Z\324\315\315\316\211%\211\203\221 \325\315\315\316\211%\210)\266\202\256 \211\323 Z\324\315\315\316$\211\203\254 \325\315\315\316$\210\266\326\315\211\316#\210\327\315e\330#\210\331\332 *\266\204\266\205\207" [ement-room-compose-buffer-window-auto-height-resizing-p ement-room-compose-buffer-window-auto-height-pixelwise ement-room-compose-buffer-window-auto-height-min ement-room-compose-buffer-window-auto-height-max window-resize-pixelwise scroll-conservatively boundp window-full-height-p window-old-buffer display-graphic-p default-line-height 1 count-screen-lines nil t window-parameter ement-room-compose-buffer-window-auto-height-cache eql set-window-parameter window-body-height window-resizable window-resize window-preserve-size set-window-start :noforce 101 redisplay] 18 (#$ . 195184)])#@602 Called via buffer-local `window-state-change-functions' in compose buffers.

Called for any window WIN showing a compose buffer if that window
has been added or assigned another buffer, changed size, or been
selected or deselected.

This prevents a compose buffer window being stuck at the wrong
height (until the number of lines changes again) if something
other than the auto-height feature resizes the window.  We simply
flush the auto-height cache, thus ensuring the required height is
recalculated on the next cycle).

See also `ement-room-compose-buffer-window-buffer-change-handler'.

(fn WIN)
(defalias 'ement-room-compose-buffer-window-state-change-handler #[257 "\205 \302\301!\203 	\206 \211\303 =?\205 \304\305\306#\207" [ement-room-compose-buffer-window-auto-height ement-room-compose-buffer-window-auto-height-resizing-p boundp selected-window set-window-parameter ement-room-compose-buffer-window-auto-height-cache nil] 5 (#$ . 196509)])#@597 Called via buffer-local `window-buffer-change-functions' in compose buffers.

Called for any window WIN showing a compose buffer if that window
has just been created or assigned that buffer.

Flush the auto-height cache for any window which switches to
displaying a compose buffer, to ensure the required height is
recalculated on the next cycle.

Also detect whether a composer buffer's window was created for
that purpose, as this information affects the behaviour of
`ement-room-compose-buffer-quit-restore-window'.

See also `ement-room-compose-buffer-window-state-change-handler'.

(fn WIN)
(defalias 'ement-room-compose-buffer-window-buffer-change-handler #[257 "\302!r\303\304\"\216\305@\306\"\210\203 \307\310\311#\210\312\313!\236?\205F \307\312\314!?#	\315\267\202< \211\202= \202= \311\202D 	\205D \316\317\"\262*\207" [ement-room-compose-buffer-window-auto-height ement-room-compose-buffer-window-dedicated internal--before-with-selected-window make-closure #[0 "\301\300!\207" [V0 internal--after-with-selected-window] 2] select-window norecord set-window-parameter ement-room-compose-buffer-window-auto-height-cache nil ement-room-compose-buffer-window-created-p window-parameters window-prev-buffers #s(hash-table size 3 test eq rehash-size 1.5 rehash-threshold 0.8125 purecopy t data (created 48 auto-height 52 delete 56)) set-window-dedicated-p t] 7 (#$ . 197474)])#@306 Kill the current compose buffer and deal appropriately with its window.

The default `ement-room-compose-buffer-window-dedicated' value
ensures that the window is dedicated and therefore that it will
be deleted.

A non-dedicated window which has displayed another buffer at any
point will not be deleted.
(defalias 'ement-room-compose-buffer-quit-restore-window #[0 "\301=\203 \302\303\304\"\210\305\303\306\"\207" [ement-room-compose-buffer-window-dedicated delete set-window-dedicated-p nil t quit-restore-window kill] 3 (#$ . 198875)])#@63 Used as `dabbrev-select-buffers-function' in compose buffers.
(defalias 'ement-compose-dabbrev-select-buffers #[0 "\302 \303\304!	>\204 \305\306\300D\"\210\307H\310\"\211\203( \311!\203( \211\312\"B\207\207" [ement-room cl-struct-ement-room-tags dabbrev--select-buffers map-elt type-of signal wrong-type-argument 18 buffer buffer-live-p delq] 6 (#$ . 199421)])#@117 Non-nil if BUFFER has `ement-room-mode' as its major mode.
Used with `dabbrev-friend-buffer-function'.

(fn BUFFER)
(defalias 'ement-room-mode-p #[257 "r\211q\210\300\301!)\207" [derived-mode-p ement-room-mode] 3 (#$ . 199796)])
(defvar ement-room--compose-message-history-index -1 nil)
(make-variable-buffer-local 'ement-room--compose-message-history-index)
(defvar ement-room--compose-message-history-initial "" nil)
(make-variable-buffer-local 'ement-room--compose-message-history-initial)
(defvar ement-room--compose-history-isearch nil nil)
(make-variable-buffer-local 'ement-room--compose-history-isearch)#@94 Insert text of the absolute history position HIST-POS.

(fn HIST-POS &optional WITH-MESSAGE)
(defalias 'ement-room-compose-message-history-insert #[513 "\304W\203	 \305 \206 \306\211\203% \203% \304Y\203% \307\310\311\")\210\312 \210\304W\2032 	\202< 8\206< \313\314\"c\207" [ement-room--compose-message-history-index ement-room--compose-message-history-initial message-log-max ement-room-message-history 0 ement-room-compose-buffer-string-trimmed -1 nil message "History item %d" erase-buffer format "[invalid ement message history element %d]"] 5 (#$ . 200413)])#@130 Cycle backward through message history, after saving current message.
With a numeric prefix ARG, go back ARG messages.

(fn ARG)
(defalias 'ement-room-compose-history-prev-message #[257 "G\211\302X\203\f \303\304!\207\302=\206Q \302V\203# 	SY\203# \303\305!\207\302W\2033 	\302W\2033 \303\306!\207\307	\\\211Y\203B S\202M \211\310W\203L \310\202M \211\262\311\"\207" [ement-room-message-history ement-room--compose-message-history-index 0 user-error "Empty message history" "Beginning of history; no preceding item" "End of history; no next item" ement-room-compose-message-history-insert -1 :with-message] 6 (#$ . 200997) "*p"])#@132 Cycle forward through message history, after saving current message.
With a numeric prefix ARG, go forward ARG messages.

(fn ARG)
(defalias 'ement-room-compose-history-next-message #[257 "\300[!\207" [ement-room-compose-history-prev-message] 3 (#$ . 201642) "*p"])#@129 Search for a string in the message history using Isearch.
Use \[isearch-backward] and \[isearch-forward] to continue searching.
(defalias 'ement-room-compose-history-isearch-backward #[0 "\301\302\303\301\"\207" [ement-room--compose-history-isearch t isearch-backward nil] 3 (#$ . 201915) nil])#@141 Search for a regular expression in the message history using Isearch.
Use \[isearch-backward] and \[isearch-forward] to continue searching.
(defalias 'ement-room-compose-history-isearch-backward-regexp #[0 "\301\302\303\301\"\207" [ement-room--compose-history-isearch t isearch-backward-regexp nil] 3 (#$ . 202217) nil])#@128 Set up Isearch to search `ement-room-message-history'.
Intended to be added to `isearch-mode-hook' in an ement compose buffer.
(defalias 'ement-room-compose-history-isearch-setup #[0 "\306=\205- \307\310\302!\210\311\310\303!\210\312\310\304!\210\313\310\305!\210\314\310\315!\210\316\317\320\321\316\306$\207" [ement-room--compose-history-isearch isearch-message-prefix-add isearch-search-fun-function isearch-message-function isearch-wrap-function isearch-push-state-function t "history " make-local-variable ement-room-compose-history-isearch-search ement-room-compose-history-isearch-message ement-room-compose-history-isearch-wrap ement-room-compose-history-isearch-push-state isearch-lazy-count nil add-hook isearch-mode-end-hook ement-room-compose-history-isearch-end] 5 (#$ . 202545)])#@84 Clean up the buffer after terminating Isearch.
Called via `isearch-mode-end-hook'.
(defalias 'ement-room-compose-history-isearch-end #[0 "\306\307\306\211`\310\311!\210\312\313\314\315#\210?\205 \306\211\207" [isearch-message-prefix-add isearch-search-fun-function isearch-wrap-function isearch-push-state-function isearch-opoint isearch-suspended nil isearch-search-fun-default kill-local-variable isearch-lazy-count remove-hook isearch-mode-end-hook ement-room-compose-history-isearch-end t ement-room--compose-history-isearch] 5 (#$ . 203352)])#@129 Return the search function for Isearch in message history.
This function is used as the value of `isearch-search-fun-function'.
(defalias 'ement-room-compose-history-isearch-search #[0 "\300\207" [ement-room-compose-history-isearch-function] 1 (#$ . 203915)])#@56 Isearch in message history.

(fn STRING BOUND NOERROR)
(defalias 'ement-room-compose-history-isearch-function #[771 "\303 \304\304#\206E ?\205E \3051C \211\204@ \203# \306\307!\210\202' \310\307!\210\203/ e\2020 db\210``\304#\262\202 `0\207\210\304\207" [isearch-forward isearch-barrier isearch-opoint isearch-search-fun-default nil (error) ement-room-compose-history-next-message 1 ement-room-compose-history-prev-message] 9 (#$ . 204180)])#@130 Display the isearch message.
This function is used as the value of `isearch-message-function'.

(fn &optional C-Q-HACK ELLIPSIS)
(defalias 'ement-room-compose-history-isearch-message #[512 "\203 	\204 \n\304Y\203 \305\306\n\"\202 \307\310\"\207" [isearch-success isearch-error ement-room--compose-message-history-index isearch-message-prefix-add 0 format "history item %d: " "history " isearch-message] 5 (#$ . 204641)])#@223 Wrap the history search when search fails.
Move point to the first history element for a forward search,
or to the last history element for a backward search.
This function is used as the value of `isearch-wrap-function'.
(defalias 'ement-room-compose-history-isearch-wrap #[0 "\302\203 	GS\202\f \303!\210\203 e\202 db\207" [isearch-forward ement-room-message-history ement-room-compose-message-history-insert -1] 2 (#$ . 205076)])#@242 Save a function restoring the state of input history search.
Save `ement-room--compose-message-history-index' to the additional state parameter
in the search status stack.
This function is used as the value of `isearch-push-state-function'.
(defalias 'ement-room-compose-history-isearch-push-state #[0 "\301\302\"\207" [ement-room--compose-message-history-index make-closure #[257 "\301\300\"\207" [V0 ement-room-compose-history-isearch-pop-state] 4 "\n\n(fn CMD)"]] 4 (#$ . 205520)])#@182 Restore the input history search state.
Go to the history element by the absolute history position HIST-POS.
See `ement-room-compose-history-isearch-push-state'.

(fn CMD HIST-POS)
(defalias 'ement-room-compose-history-isearch-pop-state #[514 "\300!\207" [ement-room-compose-message-history-insert] 4 (#$ . 206014)])
(byte-code "\300\301!\210\302\303\304\305\306\307\310\311\312#\313\314\315\260\262\316\303\317\320&	\207" [require widget define-widget ement-room-membership item "Widget for membership events." :format propertize " " display "" "%{" "%v" "%}" :sample-face :value-create #[257 "\302!\303\304	\"\305#Pc\207" [ement-room-wrap-prefix ement-room widget-value propertize ement-room--format-member-event wrap-prefix] 7 "\n\n(fn WIDGET)"]] 11)#@77 Return formatted string for "m.room.member" EVENT in ROOM.

(fn EVENT ROOM)
(defalias 'ement-room--format-member-event #[514 "\303!>\210\304H\305H\306H\307!\210\310\311\"\310\312\"\310\313\"\310\314\"\315H\307!\210\310\316\"\307!\210\310\312\"\310\313\"\310\314\"\317	\"\320\267\202\"\321\235\203\252 \322\323\324\325\303!\n>\204g \326\327\330D\"\210\331H#\324\n\203\201 \n\211\332\230\262\204\201 \n\206\244 \203\222 \211\332\230\262\204\222 \206\244 \205\244 \211\332\230\262?\205\244 \325##\207\322\333\324\325\303!\n>\204\300 \326\327\330D\"\210\331H#\324\n\203\332 \n\211\332\230\262\204\332 \n\206\375 \203\353 \211\332\230\262\204\353 \206\375 \205\375 \211\332\230\262?\205\375 \325##\207\334\267\202\312\322\335\324\325#\"\207\232\204/\324\322\336\n\206)\317\"#\325#\207\232\204v\322\337\324	\203M	\211\332\230\262\204M	\206p\203^\211\332\230\262\204^\206p\205p\211\332\230\262?\205p\325#\"\207\322\340\324\325#\"\207\322\341\324\325#\"\207\322\342\324	\203\241	\211\332\230\262\204\241	\206\304\203\262\211\332\230\262\204\262\206\304\205\304\211\332\230\262?\205\304\325#\"\207\322\343\324\325\303!\n>\204\340\326\327\330D\"\210\331H#\324\n\203\372\n\211\332\230\262\204\372\n\206\203\211\332\230\262\204\206\205\211\332\230\262?\205\325##\207\344\267\202Y\303!\n>\204:\326\327\330D\"\210\f\331H\f\232\203a\322\345\324\325\303!\n>\204Z\326\327\330D\"\210\331H#\"\207\322\346\324\325\303!\n>\204w\326\327\330D\"\210\331H#\324\n\203\221\n\211\332\230\262\204\221\n\206\264\203\242\211\332\230\262\204\242\206\264\205\264\211\332\230\262?\205\264\325##\207\303!\n>\204\313\326\327\330D\"\210\f\331H\f\232\203\322\347\324\206\335\325\303!\n>\204\357\326\327\330D\"\210\331H#\f\203\322\350\"\202\332#\207\322\351\324\325\303!\n>\204\326\327\330D\"\210\331H#\324\206&\325#\2037\322\350\"\2028\332$\207\322\352\324\325\303!\n>\204P\326\327\330D\"\210\331H##\207\322\347\324\206a\325\303!\n>\204s\326\327\330D\"\210\331H#\f\203\205\322\350\"\202\206\332#\207\353\267\202\372\322\354\324\325\303!\n>\204\244\326\327\330D\"\210\331H#\324\206\260\325#\203\301\322\350\"\202\302\332$\207\322\355\324\325\303!\n>\204\332\326\327\330D\"\210\331H#\324\206\346\325#\203\367\322\350\"\202\370\332$\207\322\356\324\325\303!\n>\204\326\327\330D\"\210\331H#\324\206\325##\207\357\360	\"\207" [cl-struct-ement-event-tags ement-room cl-struct-ement-user-tags type-of 2 7 3 mapp map-elt reason avatar_url membership displayname 6 prev_content ement--user-displayname-in #s(hash-table size 4 test equal rehash-size 1.5 rehash-threshold 0.8125 purecopy t data ("invite" 75 "join" 259 "leave" 547 "ban" 904)) (nil "leave") format "%s invited %s" propertize help-echo signal wrong-type-argument ement-user 1 "" "%s sent unrecognized invite event for %s" #s(hash-table size 4 test equal rehash-size 1.5 rehash-threshold 0.8125 purecopy t data ("invite" 265 "join" 275 "leave" 384 nil 394)) "%s accepted invitation to join" "%s changed name to %s" "%s changed avatar" "Unrecognized membership event for %s" "%s rejoined" "%s joined" "%s sent unrecognized join event for %s" #s(hash-table size 3 test equal rehash-size 1.5 rehash-threshold 0.8125 purecopy t data ("invite" 553 "join" 698 "ban" 826)) "%s rejected invitation" "%s revoked %s's invitation" "%s left%s" " (%S)" "%s kicked %s%s" "%s unbanned %s" #s(hash-table size 3 test equal rehash-size 1.5 rehash-threshold 0.8125 purecopy t data ("leave" 910 "invite" 910 "join" 964)) "%s banned %s%s" "%s kicked and banned %s%s" "%s sent unrecognized ban event for %s" error "No clause matching `%S'"] 24 (#$ . 206782)])#@112 Return string for STRUCT in ROOM.
STRUCT should be an `ement-room-membership-events' struct.

(fn STRUCT ROOM)
(defalias 'ement-room--format-membership-events #[514 "\302\303\"\304\305\306!>\210\307H\211G\211\310\267\202\" \311\312!\207\313@\"\207\314\302\315#\"\314\302\316#\"C\314\302\317	#\"C\314\302\320\"\"\314\302\321	#\"\314\302\322\n\f#\"\314\302\323#	\"\314\302\324\f#\n\"\314\302\325#\"\314\302\326#\f\"\314\302\327#\"\330\211\211\f\331\302\332\"\242\"\240\210\331\302\333\"\242\"\240\210\f\242\330\211\211\211:\2037@\262\334\306!	>\204\327 \335\336\337D\"\210\340H\341\342\343\344&\262\203-B\262\345\306!	>\204\335\336\337D\"\210\340H\242\341\342\343\344&\240\210\345\306!	>\204 \335\336\337D\"\210\340H\341\342\343\344&\262A\262\330\262\202\275 \237\266\205\262\242\330\211\211\211:\203\275@\262\334\306!	>\204^\335\336\337D\"\210\340H\341\342\343\344&\262\203\263B\262\345\306!	>\204\207\335\336\337D\"\210\340H\242\341\342\343\344&\240\210\345\306!	>\204\246\335\336\337D\"\210\340H\341\342\343\344&\262A\262\330\262\202D\237\266\205\262\242\330\211\211\211:\203D@\262\334\306!	>\204\344\335\336\337D\"\210\340H\341\342\343\344&\262\203:B\262\345\306!	>\204\335\336\337D\"\210\340H\242\341\342\343\344&\240\210\345\306!	>\204-\335\336\337D\"\210\340H\341\342\343\344&\262A\262\330\262\202\312\237\266\205\262\346\347\350\242B\351\242B\352B\353B\354B\355	B\356B\357B\360B\361B\362B\363B\364B\257\330\211\211\211\211\211:\203\324@\262\211A\262\242\262\365\366\343\344#\"\262G\262\203\311\346\367\370\371\372#\373\374\375#\266\202$B\262A\262\330\262\202\212\237\266\207\376\374\375#\266\202\"\207" [cl-struct-ement-room-membership-events-tags cl-struct-ement-event-tags make-closure #[257 "\303\304\305!	>\204 \306\307\310D\"\210\311H\n\"\211\203! \312\300\"\2023 \305!	>\2040 \306\307\310D\"\210\311H\262\313\314\300\"\315\305!	>\204L \306\307\310D\"\210\311H\316R#\207" [V0 cl-struct-ement-event-tags ement-users propertize gethash type-of signal wrong-type-argument ement-event 7 ement--user-displayname-in help-echo ement-room--format-member-event " <" ">"] 10 "\n\n(fn EVENT)"] #[257 "\301\302!>\204 \303\304\305D\"\210\306H\307\"\207" [cl-struct-ement-event-tags map-nested-elt type-of signal wrong-type-argument ement-event 6 (prev_content membership)] 6 "\n\n(fn EVENT)"] #[257 "\301\302\303!>\204 \304\305\306D\"\210\307H\"\207" [cl-struct-ement-event-tags alist-get membership type-of signal wrong-type-argument ement-event 3] 7 "\n\n(fn EVENT)"] type-of 1 #s(hash-table size 2 test eq rehash-size 1.5 rehash-threshold 0.8125 purecopy t data (0 23 1 27)) warn "No events in `ement-room-membership-events' struct" ement-room--format-member-event cl-remove-if-not #[257 "\300!\302\232\205 \301!\303\235?\207" [V0 V1 "leave" ("ban" "invite")] 3 "\n\n(fn EVENT)"] #[257 "\300!\302\232\205 \301!\302\232?\207" [V0 V1 "join"] 3 "\n\n(fn EVENT)"] #[257 "\300!\302\232\205 \301!\303\232\207" [V0 V1 "join" "leave"] 3 "\n\n(fn EVENT)"] #[257 "\300!\301\232\207" [V0 "invite"] 3 "\n\n(fn EVENT)"] #[257 "\301!\302\232\205 \300!\303\232\207" [V0 V1 "invite" "leave"] 3 "\n\n(fn EVENT)"] #[257 "\301!\302\235\205 \300!\303\232\207" [V0 V1 ("invite" "leave") "ban"] 3 "\n\n(fn EVENT)"] #[257 "\301!\302\232\205 \300!\303\232\207" [V0 V1 "ban" "leave"] 3 "\n\n(fn EVENT)"] #[257 "\301!\304\232\205j \300!\305\232\205j \306\211!\n>\204  \307\310\311D\"\210\312H!>\204B \307\310\313\306!\n>\204< \307\310\311D\"\210\312HD\"\210\306!\n>\204Q \307\310\311D\"\210\211\312H\314H\306!\n>\204e \307\310\311D\"\210\315H\232?\207" [V0 V1 cl-struct-ement-event-tags cl-struct-ement-user-tags "join" "leave" type-of signal wrong-type-argument ement-event 2 ement-user 1 7] 8 "\n\n(fn EVENT)"] #[257 "\301!\302\232\205 \300!\303\232\207" [V0 V1 "join" "ban"] 3 "\n\n(fn EVENT)"] #[257 "\301!\303\232\205; \300!\303\232\205; \304\305\306!\n>\204! \307\310\311D\"\210\312H\"\313\306!\n>\2045 \307\310\311D\"\210\314H\315\"\232\207" [V0 V1 cl-struct-ement-event-tags "join" alist-get avatar_url type-of signal wrong-type-argument ement-event 3 map-nested-elt 6 (prev_content avatar_url)] 7 "\n\n(fn EVENT)"] #[257 "\301!\303\232\205< \300!\303\232\205< \304\305\306!\n>\204! \307\310\311D\"\210\312H\"\313\306!\n>\2045 \307\310\311D\"\210\314H\315\"\232?\207" [V0 V1 cl-struct-ement-event-tags "join" alist-get avatar_url type-of signal wrong-type-argument ement-event 3 map-nested-elt 6 (prev_content avatar_url)] 7 "\n\n(fn EVENT)"] nil cl-delete-if #[257 "\302\303!	>\204 \304\305\306D\"\210\307H\300\242\310\311\312\313&\207" [V0 cl-struct-ement-event-tags cl-find type-of signal wrong-type-argument ement-event 7 :test equal :key ement-event-state-key] 8 "\n\n(fn EVENT)"] #[257 "\302\303!	>\204 \304\305\306D\"\210\307H\300\242\310\311\312\313&\207" [V0 cl-struct-ement-event-tags cl-find type-of signal wrong-type-argument ement-event 7 :test equal :key ement-event-state-key] 8 "\n\n(fn EVENT)"] cl-find signal wrong-type-argument ement-event 7 :test equal :key ement-event-state-key cl-delete format "Membership: %s." "rejoined" "joined" "left" "joined and left" "was kicked and rejoined" "rejoined and left" "invited" "rejected invitation" "banned" "unbanned" "kicked and banned" "changed name" "changed avatar" mapcar cl-delete-duplicates "%s %s (%s)" propertize face bold ", " mapconcat identity "; "] 40 (#$ . 210712)])
(require 'image)#@36 Keymap for images in room buffers.
(defvar ement-room-image-keymap (byte-code "\301 \302\"\210\303\304\305#\210\303\306\307#\210\303\310\311#\210\303\312\313#\210\207" [image-map make-sparse-keymap set-keymap-parent define-key [134217741] ement-room-image-scale "" ement-room-image-show [mouse-1] ement-room-image-scale-mouse [double-mouse-1] ement-room-image-show-mouse] 5) (#$ . 216413))
(byte-code "\300\301\302\303\304\305%\210\306\301\307\310\311DD\312\313\314\315\316&\210\306\317\307\310\320DD\321\313\322%\210\306\323\307\310\324DD\325\313\326%\210\306\327\307\310\330DD\331\313\332%\210\306\333\307\310\334DD\335\313\326%\210\306\336\307\310\337DD\340\313\341%\207" [custom-declare-group ement-room-images nil "Showing images in rooms." :group ement-room custom-declare-variable funcall function #[0 "\300\207" [t] 1 #1=""] "Download and show images in messages, avatars, etc." :type boolean :set #[514 "\300\301!\204 \300\302!\203 \302 \203 \303\"\207\303\304\"\210\211\205( \305 \205( \306\307\310\"\207" [fboundp imagemagick-types image-transforms-p set-default nil display-images-p display-warning ement "This Emacs was not built with ImageMagick support, nor does it support Cairo/XRender scaling, so images can't be displayed in Ement"] 5 "\n\n(fn OPTION VALUE)"] ement-room-image-thumbnail-height #[0 "\300\207" [0.2] 1 #1#] "Scale thumbnail images to this multiple of the window body height.\nShould be a number between 0 and 1.\nSee also `ement-room-image-thumbnail-height-min'." (number :tag "Multiple of the window body height") ement-room-image-thumbnail-height-min #[0 "\300\207" [30] 1 #1#] "Minimum height in pixels when scaling thumbnail images.\nSee also `ement-room-image-thumbnail-height'." natnum ement-room-image-initial-height #[0 "\207" [ement-room-image-thumbnail-height] 1 #1#] "Limit images' initial display height.\nIf a number, it should be no larger than 1 (because Emacs can't\ndisplay images larger than the window body height)." (choice (const :tag "Use full window height (or width)" nil) (number :tag "Multiple of the window body height")) ement-room-image-margin #[0 "\300\207" [5] 1 #1#] "How many pixels to add as an extra margin around the image." ement-room-image-relief #[0 "\300\207" [2] 1 #1#] "Width in pixels of shadow rectangle around the image.\nIf negative, shadows are drawn so that the image appears as a\npressed button; otherwise, it appears as an unpressed button." integer] 8)#@189 Toggle scale of image at mouse EVENT.
Scale image to fit within the window's body.  If image is already
fit to the window, reduce its max-height to 10% of the window's
height.

(fn EVENT)
(defalias 'ement-room-image-scale-mouse #[257 "\300!\211\211@\262\301!r\302\303\"\216\304@\305\"\210\306\307!!*\207" [event-start internal--before-with-selected-window make-closure #[0 "\301\300!\207" [V0 internal--after-with-selected-window] 2] select-window norecord ement-room-image-scale posn-point] 7 (#$ . 218873) "e"])#@256 Toggle scale of image at POS.
Scale image to fit the window body.  If the image already fits
the window body, reduce its max-height in accordance with user
options `ement-room-image-thumbnail-height' and
`ement-room-image-thumbnail-height-min'.

(fn POS)
(defalias 'ement-room-image-scale #[257 "\304\305\"\306\307\"\310!\3118\262\312\313\314\"\211@Z\315\313\314\"\247\205$ \211U?\211\203- \2024 \316	_!]\317\320!\203A \321\322\323#\210\321\324\313#\210\321\325#\210\321\307#\210\203o \321\326\313#\210\321\327\313#\210\330\313\n\"\207\321\326\n#\210\321\327#\207" [ement-room-image-thumbnail-height-min ement-room-image-thumbnail-height ement-room-image-relief ement-room-image-margin get-text-property display image-property :max-height posn-at-point 2 window-body-width nil t window-body-height truncate fboundp imagemagick-types image--set-property :type imagemagick :scale :max-width :relief :margin set-window-start] 13 (#$ . 219399) "d"])#@56 Show image at mouse EVENT in a new buffer.

(fn EVENT)
(defalias 'ement-room-image-show-mouse #[257 "\300!\211\211@\262\301!r\302\303\"\216\304@\305\"\210\306\307!!*\207" [event-start internal--before-with-selected-window make-closure #[0 "\301\300!\207" [V0 internal--after-with-selected-window] 2] select-window norecord ement-room-image-show posn-point] 7 (#$ . 220383) "e"])#@46 Show image at POS in a new buffer.

(fn POS)
(defalias 'ement-room-image-show #[257 "\302\303\304\"!\305\"\211\306H\262\307!	>\210\211\310H\311\312\"\313\314!\203( \315\316\317#\210\315\320\321#\210\315\322\323#\210\315\324\323#\210\325!\204Q r\326!q\210\327 \210\330!\210\331 )\210\332\333\"\207" [ement-ewoc cl-struct-ement-event-tags copy-sequence get-text-property display ewoc-locate 2 type-of 1 format "*Ement image: %s*" fboundp imagemagick-types image--set-property :type imagemagick :scale 1.0 :max-width nil :max-height get-buffer get-buffer-create erase-buffer insert-image image-mode pop-to-buffer ((display-buffer-pop-up-frame (pop-up-frame-parameters (fullscreen . t) (maximized . t))))] 9 (#$ . 220773) "d"])#@266 Download image EVENT on SESSION and call THEN, else ELSE.
If AUTHENTICATEDP, send authenticated request to new
endpoint (Matrix 1.11, MSC3911); otherwise send old-style,
unauthenticated request to old endpoint.

(fn EVENT SESSION &key THEN ELSE (AUTHENTICATEDP t))
(defalias 'ement-room--image-download #[642 "\302\303\"A@\302\304\"A@\302\305\"\206 \306A@\211\203L \211@\307>\2035 \211A\204- \310\311@\"\210\211AA\262\202 \312>A@\203C \313\262\202 \310\314@\"\210\202 \210\315!>\210\316H\317!\210\320\321\"\322\303\304	\323	\305\f&\n\207" [cl-struct-ement-event-tags ement-images-queue plist-member :then :else :authenticatedp (nil t) (:then :else :authenticatedp :allow-other-keys) error "Missing argument for %s" :allow-other-keys nil "Keyword argument %s not one of (:then :else :authenticatedp)" type-of 3 mapp map-elt url ement--media-request :queue] 19 (#$ . 221517)])
(byte-code "\300\301\302\303#\300\207" [function-put ement-room--image-download lisp-indent-function defun] 4)#@164 Return "m.image" EVENT on SESSION formatted as a string.
When `ement-room-images' is non-nil, also download it and then
show it in the buffer.

(fn EVENT SESSION)
(defalias 'ement-room--format-m.image #[514 "\306!>\210\307H\306	!\n>\210	\310H\311!\210\312\313\"\311!\210\312\314\"\315\316	#\317\320\n$\203\311 \203\311 \3211\302 \322\323\324\325\326%\205J \327!\323\211\f\203e \330\331\332\"\f_!]\262\333\332\"\262\202\200 \203x \331\332\"\262\333\332\"\262\202\200 \334 \262\335 \262\336\337!\203\214 \340\341\342#\210\340\343#\210\340\344#\210\340\345@#\210\340\346A#\210\340\347\350#\210\351B\352\353\354B\355\n\356C&PP\266\2040\207\357\360\361!\"\207B\352\362\354B\363\315\364\365\"\366\332\367\370\317\371\"\372\257\373\332\374\366\375\332\376\377\356D\201E \201F &P\203\365		\370\372&\210\207" [cl-struct-ement-event-tags ement-room cl-struct-ement-room-tags ement-room-images ement-room-image-initial-height ement-room-image-thumbnail-height-min type-of 9 18 mapp map-elt buffer image apply-partially ement-room--m.image-callback make-closure #[257 "\305!>\210\211\306H\307H\310H\211\242\243\305!\f>\205. \305!\f>\204+ \311\312\313D\"\210\306H\305!\f>\205K \305!\f>\204H \311\312\313D\"\210\314H\211\205\\ \3151Z \316!0\202\\ \210\317\320\321\"\322\323\206h \203t \320\324\"\206{ \206{ \n#\325\232\203\214 \326\302\301\327\317\330\300&\207\311\331C\"\207" [V0 V1 V2 cl-struct-plz-error-tags cl-struct-plz-response-tags type-of 2 3 1 signal wrong-type-argument plz-response 4 (error) json-read-from-string nil alist-get errcode format "%S: %s" error "M_UNRECOGNIZED" ement-room--image-download :authenticatedp :then ement-api-error] 18 "Handle PLZ-ERROR for a failed request to download an image.\n\n(fn PLZ-ERROR)"] (error) create-image nil data-p :ascent center get-buffer-window truncate window-body-height t window-body-width frame-pixel-height frame-pixel-width fboundp imagemagick-types image--set-property :type imagemagick :max-width :max-height :relief :margin :pointer hand "\n" propertize " " wrap-prefix display keymap format "\n [error inserting image: %s]" error-message-string "[image]" action apply ement-room--image-download button button-data :then #[128 "\302\303\300\")\207" [V0 ement-room-images t apply] 4 "\n\n(fn &rest ARGS)"] :else category face follow-link help-echo "Show image" ement-room-image-relief ement-room-image-margin ement-room-wrap-prefix ement-room-image-keymap button-map mouse-face highlight] 31 (#$ . 222535)])#@120 Add downloaded image from DATA to EVENT in ROOM.
Then invalidate EVENT's node to show the image.

(fn EVENT ROOM DATA)
(defalias 'ement-room--m.image-callback #[771 "\303!>\210\304H\305!\210\306\307\"\303!	>\204! \310\311\312D\"\210\31312 \314\315H\316\317$0\210\202@ \210\315\320\315H\316#I\210\321!\205\220 r\211q\210\322\n\323\324\"\"\211\203] \325\n\"\202\215 \326\327\330\331\303\n!	>\204r \310\311\312\fD\"\210	\332H\303\n!>\204\207 \310\311\333\fD\"\210	\334H#\")\262\207" [cl-struct-ement-room-tags cl-struct-ement-event-tags ement-ewoc type-of 18 mapp map-elt buffer signal wrong-type-argument ement-event (map-not-inplace) map-put! 9 image nil map-insert buffer-live-p ement-room--ewoc-last-matching make-closure #[257 "\211\300=\207" [V0] 3 "\n\n(fn NODE-DATA)"] ewoc-invalidate display-warning ement-room--m.image-callback format "Event %S not found in room %S (a very rare, as-yet unexplained bug, which can be safely ignored; you may disconnect and reconnect if you wish, but it isn't strictly necessary)" 1 ement-room 2] 15 (#$ . 225102)])#@58 Return "m.file" EVENT formatted as a string.

(fn EVENT)
(defalias 'ement-room--format-m.file #[257 "\302!>\210\211\303H\304!\210\305\306\"\305\307\"\304!\210\305\310\"\305\311\"\305\312\"\205, \313!\314\315$\316\317\320\321\322\323\324\325\322\326\321\327\322\330\331	\332\333&\316\334\335\336#P\207" [cl-struct-ement-event-tags button-map type-of 3 mapp map-elt filename info mimetype size url file-size-human-readable format "[file: %s (%s) (%s)]" propertize action call-interactively button t button-data ement-room-download-file category face follow-link help-echo keymap mouse-face highlight " " display (space :relative-height 1.5)] 29 (#$ . 226189)])#@59 Return "m.video" EVENT formatted as a string.

(fn EVENT)
(defalias 'ement-room--format-m.video #[257 "\302!>\210\211\303H\304!\210\305\306\"\305\307\"\304!\210\305\310\"\305\311\"\305\312\"\305\313\"\305\314\"\315!\316\317	&\320\321\322\323\324\325\326\327\324\330\323\331\324\332\333	\334\335&\320\336\337\340#P\207" [cl-struct-ement-event-tags button-map type-of 3 mapp map-elt body info mimetype size w h url file-size-human-readable format "[video: %s (%s) (%sx%s) (%s)]" propertize action call-interactively button t button-data ement-room-download-file category face follow-link help-echo keymap mouse-face highlight " " display (space :relative-height 1.5)] 31 (#$ . 226873)])#@59 Return "m.audio" EVENT formatted as a string.

(fn EVENT)
(defalias 'ement-room--format-m.audio #[257 "\302!>\210\211\303H\304!\210\305\306\"\305\307\"\304!\210\305\310\"\305\311\"\305\312\"\305\313\"\314!\315\316\317\245\"\320\321	%\322\323\324\325\326\327\330\326\331\325\332\326\333\334	\335\336&\322\337\340\341#P\207" [cl-struct-ement-event-tags button-map type-of 3 mapp map-elt body info mimetype duration size url file-size-human-readable format-seconds "%m:%s" 1000 format "[audio: %s (%s) (%s) (%s)]" propertize action ement-room-download-file button t button-data category face follow-link help-echo keymap mouse-face highlight " " display (space :relative-height 1.5)] 31 (#$ . 227590)])#@141 Activate `org-mode' in current compose buffer.
Configures the buffer appropriately so that saving it will export
the Org buffer's contents.
(defalias 'ement-room-compose-org #[0 "\204 \304\305!\210	\n\306 \210\307\"\266\310\303!\210\311\211\207" [ement-room-compose-buffer ement-room ement-session ement-room-send-message-filter user-error "This command should be run in a compose buffer.  Use `ement-room-compose-message' first" org-mode ement-room-init-compose-buffer make-local-variable ement-room-send-org-filter] 5 (#$ . 228321) nil])#@249 Return event CONTENT for ROOM having processed its Org content.
The CONTENT's body is exported with
`org-html-export-as-html' (with some adjustments for
compatibility), and the result is added to the CONTENT as
"formatted_body".

(fn CONTENT ROOM)
(defalias 'ement-room-send-org-filter #[514 "\306\307!\210\310\311\312\211\313%\314 \315\316\"\216\317\320\321\"r\211q\210\315\322\"\216\323\324\325$c\210\326K\327K\315\330\"\216\327M\210\312\321\312\211\211\331B\332\312\211\211\333$.\266r\334q\210\335\336 !\337 ,\210\262\262\340\341\313#\211\203m \211\241\266\202x \341B\211\262B\262\210\340\342\313#\211\203\211 \211\343\241\266\202\224 \342\343B\211\262B\262\210\207" [display-buffer-alist org-html-inline-images org-export-with-sub-superscripts org-export-with-section-numbers org-export-with-broken-links org-export-with-toc require ox-html alist-get "body" nil equal current-window-configuration make-closure #[0 "\301\300!\207" [V0 set-window-configuration] 2] generate-new-buffer " *temp*" t #[0 "\301\300!\205	 \302\300!\207" [V0 buffer-name kill-buffer] 2] ement--format-body-mentions :template "[[https://matrix.to/#/%s][%s]]" ement-room--org-html-src-block org-html-src-block #[0 "\301\300M\207" [V0 org-html-src-block] 2] ("^\\*Org HTML Export\\*$" display-buffer-no-window nil) org-html-export-as-html body-only "*Org HTML Export*" string-trim buffer-string kill-buffer assoc "formatted_body" "format" "org.matrix.custom.html"] 14 (#$ . 228873)])#@309 Transcode a SRC-BLOCK element from Org to HTML.
CONTENTS holds the contents of the item.  INFO is a plist holding
contextual information.

This is a copy of `org-html-src-block' that uses Riot
Web-compatible HTML output, using HTML like:

<pre><code class="language-python">...

(fn SRC-BLOCK CONTENTS INFO)
(defalias 'ement-room--org-html-src-block #[771 "\300\301\302#\203\f \303!\207\304\305\"\211\306\232\203 \307\202 \211\262\310\"\304\311\"\205- \312\"\211\2038 \313\314\"\2029 \315\262\204E \313\316#\207\313\317\320!\211\204S \315\202s \313\321\313\322\323\"\324\f\325\326$\"\"\313\327\330\331\"!#\262\262\313\332$#\207" [org-export-read-attribute :attr_html :textarea org-html--textarea-block org-element-property :language "elisp" "lisp" org-html-format-code :name org-export-get-reference format " id=\"%s\"" "" "<pre class=\"example\"%s>\n%s</pre>" "<div class=\"org-src-container\">\n%s%s\n</div>" org-export-get-caption "<span class=\"listing-number\">%s </span>" org-html--translate "Listing %d:" org-export-get-ordinal nil org-html--has-caption-p "<label class=\"org-src-name\">%s%s</label>" string-trim org-export-data "<pre><code class=\"src language-%s\"%s>%s</code></pre>"] 18 (#$ . 230370)])#@129 Complete member names and IDs at point.
Uses members in the current buffer's room.  For use in
`completion-at-point-functions'.
(defalias 'ement-room--complete-members-at-point #[0 "\212\300\301\302\303#\205 \304\305!\210`)`\306\307!\205 \310\311\257\207" [re-search-backward "^\\|\\`\\|[[:blank:]]" nil t skip-syntax-forward "-" completion-table-dynamic #[257 "\300 \207" [ement-room--member-names-and-ids] 2 "\n\n(fn IGNORE)"] :exclusive no] 8 (#$ . 231626)])#@85 Complete room aliases and IDs at point.
For use in `completion-at-point-functions'.
(defalias 'ement-room--complete-rooms-at-point #[0 "\212\300\301\302\303#\205 \304\305!\210`)`\306\307!\205 \310\311\257\207" [re-search-backward "\\(?:^\\|\\`\\|[[:blank:]]\\)[!#]" nil t skip-syntax-forward "-" completion-table-dynamic #[257 "\300 \207" [ement-room--room-aliases-and-ids] 2 "\n\n(fn IGNORE)"] :exclusive no] 8 (#$ . 232100)])#@222 Return a list of member names and IDs seen in current room.
If room's `members' table is filled, use it; otherwise, fetch
members list and return already-seen members instead.  For use in
`completion-at-point-functions'.
(defalias 'ement-room--member-names-and-ids #[0 "\304 \203 \305\300\306\307 !\"\202 \304 \203 \305\301\306\307 !\"\202  	\310!\n>\210\311H\312\313\310!\n>\204; \314\315\300D\"\210\316H\"\203T \211\317C\320\321\322\"\"\210\211\242\266\202\202\304 \312\323\310!\n>\204f \314\315\300D\"\210\316H\"\204\257 \310!\n>\204| \314\315\300D\"\210\323\316H\236\211\203\215 \211\324\241\266\202\235 \316\323\324B\211\262\316HBI\266\325\326\321\327\"\330\321\331\n\"&\210\332\333\310!\n>\204\300 \314\315\300D\"\210\334H\"\335\317\211:\203\367 @\262\310!>\204\340 \314\315\336D\"\210\337HB\262\340\"B\262A\262\202\310 \211\237\266\203!\207" [ement-room ement-session cl-struct-ement-room-tags cl-struct-ement-user-tags minibufferp buffer-local-value window-buffer minibuffer-selected-window type-of 17 alist-get fetched-members-p signal wrong-type-argument 18 nil maphash make-closure #[514 "\300\300\242B\240\207" [V0] 5 "\n\n(fn _ V)"] getting-members-p t ement--get-joined-members :then #[257 "\302\300!	>\204 \303\304\305\300D\"\210\306\300\307H\236\211\203 \211\310\241\210\202, \300\307\306C\211\262\300\307HBI\210\310\207" [V0 cl-struct-ement-room-tags type-of signal wrong-type-argument ement-room getting-members-p 18 nil] 7 "\n\n(fn _)"] :else #[257 "\302\300!	>\204 \303\304\305\300D\"\210\306\300\307H\236\211\203 \211\310\241\210\202, \300\307\306C\211\262\300\307HBI\210\310\207" [V0 cl-struct-ement-room-tags type-of signal wrong-type-argument ement-room getting-members-p 18 nil] 7 "\n\n(fn _)"] mapcar ement-event-sender 6 delete-dups ement-user 1 ement--user-displayname-in] 12 (#$ . 232541)])#@110 Return a list of room names and aliases seen in current session.
For use in `completion-at-point-functions'.
(defalias 'ement-room--room-aliases-and-ids #[0 "\303 \203 \304\300\305\306 !\"\202 \307\310\311\312!	>\204# \313\314\300D\"\210\315H\311\211:\203d @\262\312!\n>\204@ \313\314\316D\"\210\317HB\262\312!\n>\204V \313\314\316D\"\210\320HB\262A\262\202( \211\237\266\203\"!\207" [ement-session cl-struct-ement-session-tags cl-struct-ement-room-tags minibufferp buffer-local-value window-buffer minibuffer-selected-window delete-dups delq nil type-of signal wrong-type-argument 5 ement-room 1 12] 11 (#$ . 234425)])
(require 'transient)
(defalias 'ement-room-transient #[0 "\300\301!\207" [transient-setup ement-room-transient] 2 nil nil])
(byte-code "\300\301\302\303#\210\300\301\304\305#\210\300\301\306\307\310\301\"#\210\311\301\312\313\314\303D\312\315\316\317D\320\321\322\316\323\310\324\257\320\321\325\316\326\310\327\257\320\321\330\316\331\310\332\257\320\321\333\316\334\310\335\257\320\321\336\316\337\310\340\257\320\321\341\316\342\310\343\257\257#\312\315\316\344D\320\321\345\316\346\310\347\257\320\321\350\316\351\310\352\257\320\321\353\316\354\310\355\257\320\321\356\316\357\310\360\257\320\321\361\316\362\310\363\257\257#D#\312\313\314\303D\312\315\316\364D\320\321\365\316\366\310\367\257\320\321\370\316\371\310\372\257\320\321\373\316\374\310\375\257\320\321\376\316\377\310\201@ \257\320\321\201A \316\201B \310\201C \257\320\321\201D \316\201E \310\201F \257\320\321\201G \316\201H \310\201I \257\320\321\201J \316\201K \310\201L \257\320\321\201M \316\201N \310\201O \257\320\321\201P \316\201Q \310\201R \257\320\321\201S \316\201T \310\201U \257\257#\312\315\316\201V D\320\321\201W \316\201X \310\201Y \257\320\321\201Z \316\201[ \310\201\\ \257\320\321\201] \316\201^ \310\201_ \257E#D#\312\313\314\303D\312\315\316\201` D\320\321\201a \316\201b \310\201c \257\320\321\201d \316\201e \310\201f \257\320\321\201g \316\201h \310\201i \257\320\321\201j \316\201k \310\201l \257\320\321\201m \316\201n \310\201o \257\320\321\201p \316\201q \310\201r \257\320\321\201s \316\201t \310\201u \257\320\321\201v \316\201w \310\201x \257\257#\312\315\316\201y D\320\321\201z \316\201{ \310\201| \257\320\321\201} \316\201~ \310\201 \257\320\321\201\200 \316\201\201 \310\201\202 \257\320\321\201\203 \316\201\204 \310\201\205 \257\320\321\201\206 \316\201\207 \310\201\210 \257\320\321\201\211 \316\201\212 \310\201\213 \257\257#D#\312\315\316\201\214 D\320\321\201\215 \316\201\216 \310\201\217 \257\320\321\201\220 \316\201\221 \310\201\222 \201\223 \201\224 \257	D#F\"\207" [put ement-room-transient interactive-only t function-documentation "Transient for Ement Room buffers." transient--prefix transient-prefix :command transient--set-layout vector transient-columns :pad-keys transient-column :description "Movement" transient-suffix :key "TAB" "Next event" ement-room-goto-next "<backtab>" "Previous event" ement-room-goto-prev "SPC" "Scroll up and mark read" ement-room-scroll-up-mark-read "S-SPC" "Scroll down" ement-room-scroll-down-command "M-SPC" "Jump to fully-read marker" ement-room-goto-fully-read-marker "m" "Move read markers to point" ement-room-mark-read "Switching" "M-g M-l" "List rooms" ement-room-list "M-g M-r" "Switch to other room" ement-view-room "M-g M-m" "Switch to mentions buffer" ement-notify-switch-to-mentions-buffer "M-g M-n" "Switch to notifications buffer" ement-notify-switch-to-notifications-buffer "q" "Quit window" quit-window "Messages" "c" #[0 "\301\302\303\304C\305\306BD\307\310$@\311\312#P\207" [ement-room-send-message-filter "Composition format: " propertize cl-rassoc "Plain-text" "Org-mode" ement-room-send-org-filter :test equal face transient-value] 7] ement-room-set-composition-format "RET" "Write message" ement-room-dispatch-new-message "M-RET" "Write message (alternative)" ement-room-dispatch-new-message-alt "S-<return>" "Write reply" ement-room-dispatch-reply-to-message "<insert>" "Edit message" ement-room-dispatch-edit-message "C-k" "Delete message" ement-room-delete-message "s r" "Send reaction" ement-room-send-reaction "s e" "Send emote" ement-room-send-emote "s f" "Send file" ement-room-send-file "s i" "Send image" ement-room-send-image "D" "Download event media" ement-room-download-file "Users" "u RET" "Send direct message" ement-send-direct-message "u i" "Invite user" ement-invite-user "u I" "Ignore user" ement-ignore-user "Room" "M-s o" "Occur search in room" ement-room-occur "r d" "Describe room" ement-describe-room "r m" "List members" ement-list-members "r t" "Set topic" ement-room-set-topic "r f" "Set message format" ement-room-set-message-format "r N" #[0 "\302\303\304\305\306!	>\204 \307\310\300D\"\210\311H\312\211\313%\211\205\" \314\315\"\211\2030 \316\317\320#\266\202\2027 \316\321\317\322#\266\202\"\207" [ement-room cl-struct-ement-room-tags format "Name override: %s" alist-get "org.matrix.msc3015.m.room.name.override" type-of signal wrong-type-argument 8 nil equal map-nested-elt (content name) propertize face transient-value "none" transient-inactive-value] 8] ement-room-override-name "r n" #[0 "\302	\"\303\304\305\306\307\204 \310\202 \311#\305\312\307\313=\203! \310\202\" \311#\305\314\307\315=\2031 \310\2022 \311#\305\316\307\317=\203A \310\202B \311#\305\320\307	\321=\203Q \310\202R \311#&\207" [ement-room ement-session ement-room-notification-state format "Notifications (%s|%s|%s|%s|%s)" propertize "default" face transient-value transient-inactive-value "all-loud" all-loud "all" all "mentions" mentions-and-keywords "none" none] 12] ement-room-set-notification-state "r T" #[0 "\301\302\303\304\305\306\307\"\203 \310\202 \311#\303\312\305\306\313\"\203  \310\202! \311##\207" [ement-room format "Tag/untag room (%s|%s)" propertize "Fav" face ement--room-tagged-p "m.favourite" transient-value transient-inactive-value "Low-prio" "m.lowpriority"] 9] ement-tag-room "Room membership" "R c" "Create room" ement-create-room "R j" "Join room" ement-join-room "R l" "Leave room" ement-leave-room "R F" "Forget room" ement-forget-room "R n" #[0 "\305\306\307\310\311\312\211	!\n>\204 \313\314\301	D\"\210	\315H!>\2047 \313\314\316\312	!\n>\2041 \313\314\301	D\"\210	\315HD\"\210\312	!\n>\204F \313\314\301	D\"\210	\315H\315H\f\"\"\317\320#\"\207" [ement-room ement-session cl-struct-ement-session-tags cl-struct-ement-user-tags ement-users format "Set nick (%s)" propertize ement--user-displayname-in gethash type-of signal wrong-type-argument 1 ement-user face transient-value] 13] ement-room-set-display-name "R s" #[0 "\302\303\304	\"\211\203 \305\306\"\307\310\311#\266\202\202 \312\313\314\315#\262\"\207" [ement-room ement-session format "Toggle spaces (%s)" ement--room-spaces mapcar #[257 "\301\302!>\204 \303\304\305D\"\210\306H\307\310#\207" [cl-struct-ement-room-tags propertize type-of signal wrong-type-argument ement-room 2 face transient-value] 6 "\n\n(fn SPACE)"] ", " mapconcat identity propertize "none" face transient-inactive-value] 9] ement-room-toggle-space "Other" "v" "View event" ement-room-view-event "g" "Sync new messages" ement-room-sync :if #[0 "?\206\n \303	\n\"?\207" [ement-auto-sync ement-syncs ement-session map-elt] 3 nil nil]] 26)#@54 Browse MXC URL on current `ement-session'.

(fn MXC)
(defalias 'ement-room-browse-mxc #[257 "\301\302\"\303K\301\304\"\216\303M\210\305!)\207" [ement-session make-closure #[771 "\301\300\302\303\304#$\207" [V0 ement--media-request :as make-closure #[0 "~\210\302e`\303#\210\304\301\305\300#\207" [V0 V1 decode-coding-region utf-8 apply status] 4]] 11 "\n\n(fn MXC CALLBACK CBARGS)"] eww-retrieve #[0 "\301\300M\207" [V0 eww-retrieve] 2] eww-browse-url] 7 (#$ . 241742)])#@251 Download EVENT's file to DESTINATION.
If DESTINATION is a directory, use the file's default name;
otherwise, download to the filename.  Interactively, download to
`eww-download-directory'; with prefix, prompt for destination.

(fn EVENT DESTINATION)
(defalias 'ement-room-download-file #[514 "\211C\302!>\210\303H\304!\210\305\306\"\305\307\"\305\310\"\311 \204% \2020 \232\203/ \2020 \312\242!\203Q \313\242!\204G \314\242\315\"\210\316\242\"\240\210\317\242!\204` \320\321\242\"\210\313\242!\203o \320\322\242\"\210\323	\324\325\326\327\242D\330\331\332#&\210\333\334\242\"\207" [cl-struct-ement-event-tags ement-session type-of 3 mapp map-elt filename url body current-time file-directory-p file-exists-p make-directory parents file-name-concat file-writable-p user-error "Destination path not writable: %S (Call with prefix to prompt for filename)" "File already exists: %S (Call with prefix to prompt for filename)" ement--media-request :authenticatedp t :as file :then make-closure #[128 "\302\301\242!\3038\262\304\305\306 \300\"!\307\245!\310\311\301\242\307!\312\313\"%\207" [V0 V1 file-attributes 7 float-time time-subtract current-time file-size-human-readable message "File downloaded: %S (%s in %s at %s/sec) " format-seconds "%h:%m:%s%z seconds"] 11 "\n\n(fn &rest _)"] message "Downloading to %S..."] 21 (#$ . 242229) (byte-code "\302\303!\210\304`!\203$ \305\306\307	;\203 	\202 \310	!\205 	 \"!\2027 \305	;\203. 	\2026 \310	!\2056 	 !D\207" [current-prefix-arg eww-download-directory require eww ement-room--event-at expand-file-name read-file-name "Download to: " functionp] 6)])
(provide 'ement-room)
