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

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[elpa] externals/ement 7c4a407b04 2/3: Fix: Continue replying in compose


From: ELPA Syncer
Subject: [elpa] externals/ement 7c4a407b04 2/3: Fix: Continue replying in compose buffers
Date: Thu, 17 Nov 2022 17:58:10 -0500 (EST)

branch: externals/ement
commit 7c4a407b04ebf90cfb12b65c97cefd5fd0866abf
Author: Adam Porter <adam@alphapapa.net>
Commit: Adam Porter <adam@alphapapa.net>

    Fix: Continue replying in compose buffers
---
 README.org    |  1 +
 ement-room.el | 35 ++++++++++++++++++++++++++++++-----
 2 files changed, 31 insertions(+), 5 deletions(-)

diff --git a/README.org b/README.org
index c9f2341719..0c3160f48b 100644
--- a/README.org
+++ b/README.org
@@ -299,6 +299,7 @@ Note that, while ~matrix-client~ remains usable, and 
probably will for some time
 
 *Fixes*
 + Use of send-message filter when replying.
++ Replies may be written in compose buffers.
 
 ** 0.4.1
 
diff --git a/ement-room.el b/ement-room.el
index 5edd251151..f006d25bec 100644
--- a/ement-room.el
+++ b/ement-room.el
@@ -102,6 +102,10 @@ Used by `ement-room-send-message'.")
   "Maps event ID to request updating read receipt to that event.
 An alist of one entry.")
 
+(defvar ement-room-read-string-setup-hook nil
+  "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-compose-hook nil
   "Hook run in compose buffers when created.
 Used to, e.g. call `ement-room-compose-org'.")
@@ -1678,6 +1682,9 @@ The message must be one sent by the local user."
                  (room ement-room)
                  (session ement-session)
                  (prompt (format "Send reply (%s): " (ement-room-display-name 
room)))
+                 (ement-room-read-string-setup-hook
+                  (lambda ()
+                    (setq-local ement-room-replying-to-event event)))
                  (body (ement-room-with-typing
                          (ement-room-read-string prompt nil nil nil 
'inherit-input-method))))
       (ement-room-send-message room session :body body :replying-to-event 
event))))
@@ -1952,7 +1959,8 @@ and erases the buffer."
   "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."
+which see.  Runs hook `ement-room-read-string-setup-hook', which
+see."
   (let ((room ement-room)
         (session ement-session))
     (minibuffer-with-setup-hook
@@ -1962,7 +1970,8 @@ which see."
           (setq-local ement-session session)
           (setq-local completion-at-point-functions
                       '(ement-room--complete-members-at-point 
ement-room--complete-rooms-at-point))
-          (visual-line-mode 1))
+          (visual-line-mode 1)
+          (run-hooks 'ement-room-read-string-setup-hook))
       (read-from-minibuffer prompt initial-input ement-room-minibuffer-map
                             nil history default-value inherit-input-method))))
 
@@ -3439,6 +3448,7 @@ To be called from a minibuffer opened from
                                                                    
(ement-room-id ement-room)))))
          (input-method current-input-method) ; Capture this value from the 
minibuffer.
          (send-message-filter ement-room-send-message-filter)
+         (replying-to-event ement-room-replying-to-event)
          (compose-fn (lambda ()
                        ;; HACK: Since exiting the minibuffer restores the 
previous window configuration,
                        ;; we have to do some magic to get the new compose 
buffer to appear.
@@ -3448,6 +3458,13 @@ To be called from a minibuffer opened from
                        (ement-room-compose-message ement-room ement-session 
:body body)
                       ;; FIXME: This doesn't propagate the send-message-filter 
to the minibuffer.
                        (setf ement-room-send-message-filter 
send-message-filter)
+                       (setq-local ement-room-replying-to-event 
replying-to-event)
+                       (when replying-to-event
+                         (setq-local header-line-format
+                                     (concat header-line-format
+                                             (format " (Replying to message 
from %s)"
+                                                     
(ement--user-displayname-in
+                                                      ement-room 
(ement-event-sender replying-to-event))))))
                        (let* ((compose-buffer (current-buffer))
                               (show-buffer-fn-symbol (gensym 
"ement-show-compose-buffer"))
                               (show-buffer-fn (lambda ()
@@ -3476,14 +3493,22 @@ To be called from an `ement-room-compose' buffer."
   (let ((room ement-room)
         (session ement-session)
         (input-method current-input-method)
-        (send-message-filter ement-room-send-message-filter))
+        (send-message-filter ement-room-send-message-filter)
+        (replying-to-event ement-room-replying-to-event))
     (quit-restore-window nil 'kill)
     (ement-view-room room session)
     (let* ((prompt (format "Send message (%s): " (ement-room-display-name 
ement-room)))
            (current-input-method input-method) ; Bind around read-string call.
            (ement-room-send-message-filter send-message-filter)
-           (body (ement-room-read-string prompt (car kill-ring) nil nil 
'inherit-input-method)))
-      (ement-room-send-message ement-room ement-session :body body))))
+           (pos (when replying-to-event
+                  (ewoc-location (ement-room--ewoc-last-matching ement-ewoc
+                                   (lambda (data)
+                                     (eq data replying-to-event))))))
+           (body (if replying-to-event
+                     (ement-room-with-highlighted-event-at pos
+                       (ement-room-read-string prompt (car kill-ring) nil nil 
'inherit-input-method))
+                   (ement-room-read-string prompt (car kill-ring) nil nil 
'inherit-input-method)) ))
+      (ement-room-send-message ement-room ement-session :body body 
:replying-to-event replying-to-event))))
 
 (defun ement-room-init-compose-buffer (room session)
   "Eval BODY, setting up the current buffer as a compose buffer.



reply via email to

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