]> git.notmuchmail.org Git - notmuch/blobdiff - emacs/notmuch-mua.el
emacs: Remove notmuch-search quit continuation
[notmuch] / emacs / notmuch-mua.el
index cb89db3a47e2ca9705560a01c936bf397a1c7672..d41c0b3d92d3cf8e260145038ddcc69093bc4b92 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 t) 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))
@@ -198,11 +196,16 @@ list."
                            nil (notmuch-mua-get-switch-function))))
 
       ;; Insert the message body - but put it in front of the signature
-      ;; if one is present
-      (goto-char (point-max))
-      (if (re-search-backward message-signature-separator nil t)
-         (forward-line -1)
-       (goto-char (point-max)))
+      ;; if one is present, and after any other content
+      ;; message*setup-hooks may have added to the message body already.
+      (save-restriction
+       (message-goto-body)
+       (narrow-to-region (point) (point-max))
+       (goto-char (point-max))
+       (if (re-search-backward message-signature-separator nil t)
+           (if message-signature-insert-empty-line
+               (forward-line -1))
+         (goto-char (point-max))))
 
       (let ((from (plist-get original-headers :From))
            (date (plist-get original-headers :Date))