emacs-elpa-diffs
[Top][All Lists]
Advanced

[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.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]