]> git.notmuchmail.org Git - notmuch/blobdiff - emacs/notmuch-mua.el
emacs: insert quotable parts in reply as they are displayed in show view
[notmuch] / emacs / notmuch-mua.el
index 408b49e075068c574f900a756d76551c87ee7eb5..ff8149b4bd9ec6ef50cdb3619726292a003f28b2 100644 (file)
@@ -19,7 +19,6 @@
 ;;
 ;; Authors: David Edmondson <dme@dme.org>
 
-(require 'json)
 (require 'message)
 (require 'mm-view)
 (require 'format-spec)
@@ -29,6 +28,8 @@
 
 (eval-when-compile (require 'cl))
 
+(declare-function notmuch-show-insert-bodypart "notmuch-show" (msg part depth &optional hide))
+
 ;;
 
 (defcustom notmuch-mua-send-hook '(notmuch-mua-message-send-hook)
@@ -129,12 +130,15 @@ list."
          collect part))
 
 (defun notmuch-mua-insert-quotable-part (message part)
-  (save-restriction
-    (narrow-to-region (point) (point))
-    (notmuch-mm-display-part-inline message part (plist-get part :id)
-                                   (plist-get part :content-type)
-                                   notmuch-show-process-crypto)
-    (goto-char (point-max))))
+  ;; We don't want text properties leaking from the show renderer into
+  ;; the reply so we use a temp buffer. Also we don't want hooks, such
+  ;; as notmuch-wash-*, to be run on the quotable part so we set
+  ;; notmuch-show-insert-text/plain-hook to nil.
+  (insert (with-temp-buffer
+           (let ((notmuch-show-insert-text/plain-hook nil))
+             ;; Show the part but do not add buttons.
+             (notmuch-show-insert-bodypart message part 0 'no-buttons))
+           (buffer-substring-no-properties (point-min) (point-max)))))
 
 ;; There is a bug in emacs 23's message.el that results in a newline
 ;; not being inserted after the References header, so the next header
@@ -146,7 +150,7 @@ list."
   (unless (bolp) (insert "\n")))
 
 (defun notmuch-mua-reply (query-string &optional sender reply-all)
-  (let ((args '("reply" "--format=json"))
+  (let ((args '("reply" "--format=sexp" "--format-version=1"))
        reply
        original)
     (when notmuch-show-process-crypto
@@ -157,14 +161,8 @@ list."
       (setq args (append args '("--reply-to=sender"))))
     (setq args (append args (list query-string)))
 
-    ;; Get the reply object as JSON, and parse it into an elisp object.
-    (with-temp-buffer
-      (apply 'call-process (append (list notmuch-command nil (list t nil) nil) args))
-      (goto-char (point-min))
-      (let ((json-object-type 'plist)
-           (json-array-type 'list)
-           (json-false 'nil))
-       (setq reply (json-read))))
+    ;; Get the reply object as SEXP, and parse it into an elisp object.
+    (setq reply (apply #'notmuch-call-notmuch-sexp args))
 
     ;; Extract the original message to simplify the following code.
     (setq original (plist-get reply :original))