mirror of
https://github.com/vale981/ement.el
synced 2025-03-05 09:21:37 -05:00
Add: (ement-room-describe)
This commit is contained in:
parent
039c548fd3
commit
41318e2969
2 changed files with 57 additions and 0 deletions
55
ement-lib.el
55
ement-lib.el
|
@ -189,6 +189,61 @@ members, show in a new buffer; otherwise show in echo area."
|
||||||
:then list-members))
|
:then list-members))
|
||||||
(message "Listing members of %s..." (ement--format-room room))))
|
(message "Listing members of %s..." (ement--format-room room))))
|
||||||
|
|
||||||
|
(defun ement-describe-room (room session)
|
||||||
|
"Describe ROOM on SESSION."
|
||||||
|
(interactive (pcase-let ((`(,room ,session) (ement-complete-room :session ement-session)))
|
||||||
|
(list room session)))
|
||||||
|
(cl-labels ((heading (string)
|
||||||
|
(propertize (or string "") 'face 'font-lock-builtin-face))
|
||||||
|
(id (string)
|
||||||
|
(propertize (or string "") 'face 'font-lock-constant-face)))
|
||||||
|
(pcase-let* (((cl-struct ement-room (id room-id) avatar display-name canonical-alias members timeline status topic
|
||||||
|
(local (map fetched-members-p)))
|
||||||
|
room)
|
||||||
|
((cl-struct ement-session user) session)
|
||||||
|
((cl-struct ement-user (id user-id)) user)
|
||||||
|
(inhibit-read-only t))
|
||||||
|
(if (not fetched-members-p)
|
||||||
|
;; Members not fetched: fetch them and re-call this command.
|
||||||
|
(ement--get-joined-members room session
|
||||||
|
:then (lambda (_) (ement-room-describe room session)))
|
||||||
|
(with-current-buffer (get-buffer-create (format "*Ement room description: %s*" (or display-name canonical-alias room-id)))
|
||||||
|
(erase-buffer)
|
||||||
|
(let ((members (cl-sort (cl-loop for user being the hash-values of members
|
||||||
|
collect (format "%s <%s>" (ement-room--format-user user room session)
|
||||||
|
(id (ement-user-id user))))
|
||||||
|
(lambda (a b) (string-collate-lessp a b nil t)))))
|
||||||
|
(save-excursion
|
||||||
|
(insert "\"" (propertize (or display-name canonical-alias room-id) 'face 'font-lock-doc-face) "\"" " is a room "
|
||||||
|
(propertize (pcase status
|
||||||
|
('invite "invited")
|
||||||
|
('join "joined")
|
||||||
|
('leave "left")
|
||||||
|
(_ (symbol-name status)))
|
||||||
|
'face 'font-lock-comment-face)
|
||||||
|
" on session <" (id user-id) ">.\n\n"
|
||||||
|
(heading "Avatar: ") avatar "\n\n"
|
||||||
|
(heading "ID: ") "<" (id room-id) ">" "\n"
|
||||||
|
(heading "Alias: ") "<" (id canonical-alias) ">" "\n\n"
|
||||||
|
(heading "Topic: ") (propertize topic 'face 'font-lock-comment-face) "\n\n"
|
||||||
|
(heading "Retrieved events: ") (number-to-string (length timeline)) "\n"
|
||||||
|
(heading " spanning: ")
|
||||||
|
(format-time-string "%Y-%m-%d %H:%M:%S"
|
||||||
|
(/ (ement-event-origin-server-ts
|
||||||
|
(car (cl-sort (copy-sequence timeline) #'< :key #'ement-event-origin-server-ts)))
|
||||||
|
1000))
|
||||||
|
(heading " to ")
|
||||||
|
(format-time-string "%Y-%m-%d %H:%M:%S\n\n"
|
||||||
|
(/ (ement-event-origin-server-ts
|
||||||
|
(car (cl-sort (copy-sequence timeline) #'> :key #'ement-event-origin-server-ts)))
|
||||||
|
1000))
|
||||||
|
(heading "Members") " (" (number-to-string (length members)) "):\n")
|
||||||
|
(dolist (member members)
|
||||||
|
(insert " " member "\n"))))
|
||||||
|
(read-only-mode)
|
||||||
|
(pop-to-buffer (current-buffer)))))))
|
||||||
|
(defalias 'ement-room-describe #'ement-describe-room)
|
||||||
|
|
||||||
(defun ement-send-direct-message (session user-id message)
|
(defun ement-send-direct-message (session user-id message)
|
||||||
"Send a direct MESSAGE to USER-ID on SESSION.
|
"Send a direct MESSAGE to USER-ID on SESSION.
|
||||||
Uses the latest existing direct room with the user, or creates a
|
Uses the latest existing direct room with the user, or creates a
|
||||||
|
|
|
@ -143,6 +143,7 @@ Used to, e.g. call `ement-room-compose-org'.")
|
||||||
|
|
||||||
;; Room
|
;; Room
|
||||||
(define-key map (kbd "M-s o") #'ement-room-occur)
|
(define-key map (kbd "M-s o") #'ement-room-occur)
|
||||||
|
(define-key map (kbd "r d") #'ement-describe-room)
|
||||||
(define-key map (kbd "r m") #'ement-list-members)
|
(define-key map (kbd "r m") #'ement-list-members)
|
||||||
(define-key map (kbd "r t") #'ement-room-set-topic)
|
(define-key map (kbd "r t") #'ement-room-set-topic)
|
||||||
(define-key map (kbd "r f") #'ement-room-set-message-format)
|
(define-key map (kbd "r f") #'ement-room-set-message-format)
|
||||||
|
@ -4067,6 +4068,7 @@ For use in `completion-at-point-functions'."
|
||||||
[:pad-keys t
|
[:pad-keys t
|
||||||
["Room"
|
["Room"
|
||||||
("M-s o" "Occur search in room" ement-room-occur)
|
("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 m" "List members" ement-list-members)
|
||||||
("r t" "Set topic" ement-room-set-topic)
|
("r t" "Set topic" ement-room-set-topic)
|
||||||
("r f" "Set message format" ement-room-set-message-format)
|
("r f" "Set message format" ement-room-set-message-format)
|
||||||
|
|
Loading…
Add table
Reference in a new issue