X-Git-Url: https://git.notmuchmail.org/git?a=blobdiff_plain;f=emacs%2Fnotmuch-mua.el;h=d41c0b3d92d3cf8e260145038ddcc69093bc4b92;hb=ecdfa9a6b0d92ebc9bb0a41b597ad7420883d9ca;hp=cb89db3a47e2ca9705560a01c936bf397a1c7672;hpb=832fd1a7a63ced91d9519d217ba187ee08eea13c;p=notmuch diff --git a/emacs/notmuch-mua.el b/emacs/notmuch-mua.el index cb89db3a..d41c0b3d 100644 --- a/emacs/notmuch-mua.el +++ b/emacs/notmuch-mua.el @@ -19,7 +19,6 @@ ;; ;; Authors: David Edmondson -(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))