[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/ement 8cfc7d131d 2/2: Change: (ement-tag-room) Toggle t
From: |
ELPA Syncer |
Subject: |
[elpa] externals/ement 8cfc7d131d 2/2: Change: (ement-tag-room) Toggle tags |
Date: |
Wed, 8 Mar 2023 23:57:46 -0500 (EST) |
branch: externals/ement
commit 8cfc7d131d56e246ec62f7256c763c3f862b489b
Author: Adam Porter <adam@alphapapa.net>
Commit: Adam Porter <adam@alphapapa.net>
Change: (ement-tag-room) Toggle tags
---
README.org | 3 ++-
ement-lib.el | 40 ++++++++++++++++++++++++----------------
2 files changed, 26 insertions(+), 17 deletions(-)
diff --git a/README.org b/README.org
index b803a93f0c..c5f4a5db8c 100644
--- a/README.org
+++ b/README.org
@@ -121,7 +121,7 @@ Ement.el is intended to be installed with Emacs's package
system, which will ens
- ~ement-join-room~ to join a room.
- ~ement-leave-room~ to leave a room.
- ~ement-forget-room~ to forget a room.
- - ~ement-tag-room~ to add (or with interactive prefix, remove) a tag on
a room (including favorite/low-priority status).
+ - ~ement-tag-room~ to toggle a tag on a room (including
favorite/low-priority status).
- ~ement-list-members~ to list members in a room.
- ~ement-send-direct-message~ to send a direct message to a user (in an
existing direct room, or creating a new one automatically).
- ~ement-room-edit-message~ to edit a message at point.
@@ -295,6 +295,7 @@ Note that, while ~matrix-client~ remains usable, and
probably will for some time
+ Room-related commands may be called interactively with a universal prefix to
prompt for the room/session (e.g. allowing to send events or change settings in
rooms other than the current one).
+ Command ~ement-room-list~ reuses an existing window showing the room list
when possible. ([[https://github.com/alphapapa/ement.el/issues/131][#131]].
Thanks to [[https://github.com/jeffbowman][Jeff Bowman]] for suggesting.)
++ Command ~ement-tag-room~ toggles tags (rather than adding by default and
removing when called with a prefix).
*Fixes*
diff --git a/ement-lib.el b/ement-lib.el
index 3c2cd51936..b7ddcba80f 100644
--- a/ement-lib.el
+++ b/ement-lib.el
@@ -346,30 +346,38 @@ new one automatically if necessary."
(message "Room \"%s\" created for user %s. Sending message..."
room-id user-id))))))
-(defun ement-tag-room (tag room session &optional delete)
- "Add TAG to ROOM on SESSION.
-If DELETE (interactively, with prefix), delete it."
+(defun ement-tag-room (tag room session)
+ "Toggle TAG for ROOM on SESSION."
(interactive
- (pcase-let* ((`(,room ,session) (or (when (bound-and-true-p ement-room)
- (list ement-room ement-session))
- (ement-complete-room)))
- (prompt (if current-prefix-arg "Delete tag: " "Add tag: "))
- (default-tags (ement-alist "Favourite" "m.favourite"
- "Low-priority" "m.lowpriority"))
- (input (completing-read prompt default-tags))
- (tag (alist-get input default-tags (concat "u." input) nil
#'string=)))
- (list tag room session current-prefix-arg)))
+ (ement-with-room-and-session
+ (let* ((prompt (format "Toggle tag (%s): " (ement--format-room
ement-room)))
+ (default-tags
+ (ement-alist (propertize "Favourite"
+ 'face (when (ement--room-tagged-p
"m.favourite" ement-room)
+ 'transient-value))
+ "m.favourite"
+ (propertize "Low-priority"
+ 'face (when (ement--room-tagged-p
"m.lowpriority" ement-room)
+ 'transient-value))
+ "m.lowpriority"))
+ (input (completing-read prompt default-tags))
+ (tag (alist-get input default-tags (concat "u." input) nil
#'string=)))
+ (list tag ement-room ement-session))))
(pcase-let* (((cl-struct ement-session user) session)
((cl-struct ement-user (id user-id)) user)
((cl-struct ement-room (id room-id)) room)
(endpoint (format "user/%s/rooms/%s/tags/%s"
(url-hexify-string user-id)
(url-hexify-string room-id) (url-hexify-string tag)))
- (method (if delete 'delete 'put)))
+ (method (if (ement--room-tagged-p tag room) 'delete 'put)))
;; TODO: "order".
;; FIXME: Removing a tag on a left room doesn't seem to work (e.g. to
unfavorite a room after leaving it, but not forgetting it).
- (ement-api session endpoint :version "v3" :method method :data (unless
delete "{}")
- :then (lambda (data)
- (ement-debug "Changed tag on room" method tag data room)))))
+ (ement-api session endpoint :version "v3" :method method :data (pcase
method ('put "{}"))
+ :then (lambda (_)
+ (ement-message "%s tag %S on %s"
+ (pcase method
+ ('delete "Removed")
+ ('put "Added"))
+ tag (ement--format-room room)) ))))
(defun ement-set-display-name (display-name session)
"Set DISPLAY-NAME for user on SESSION.