emacs/mua: Generate improved cited text for replies

Use the message display code to generate message text to cite in
replies.

For now we set insert-headers-p function to
notmuch-show-reply-insert-header-p-never so that, as before, we don't
insert part buttons.

With that choice of insert-headers-p function there is only one
failing test: this test has a text part (an email message) listed as
application/octet-stream. Notmuch show displays this part, but the
reply code omitted it as it had type application/octet-stream. The new
code correctly includes it. Thus update the expected output to match.
This commit is contained in:
David Edmondson 2016-02-20 18:24:38 +00:00 committed by David Bremner
parent c802d12a1e
commit e103f0a971
2 changed files with 45 additions and 30 deletions

View file

@ -28,7 +28,7 @@
(eval-when-compile (require 'cl))
(declare-function notmuch-show-insert-bodypart "notmuch-show" (msg part depth &optional hide))
(declare-function notmuch-show-insert-body "notmuch-show" (msg body depth))
(declare-function notmuch-fcc-header-setup "notmuch-maildir-fcc" ())
(declare-function notmuch-fcc-handler "notmuch-maildir-fcc" (destdir))
@ -144,31 +144,6 @@ Note that these functions use `mail-citation-hook' if that is non-nil."
else if (notmuch-match-content-type (plist-get part :content-type) "multipart/*")
do (notmuch-mua-reply-crypto (plist-get part :content))))
(defun notmuch-mua-get-quotable-parts (parts)
(loop for part in parts
if (notmuch-match-content-type (plist-get part :content-type) "multipart/alternative")
collect (let* ((subparts (plist-get part :content))
(types (mapcar (lambda (part) (plist-get part :content-type)) subparts))
(chosen-type (car (notmuch-multipart/alternative-choose types))))
(loop for part in (reverse subparts)
if (notmuch-match-content-type (plist-get part :content-type) chosen-type)
return part))
else if (notmuch-match-content-type (plist-get part :content-type) "multipart/*")
append (notmuch-mua-get-quotable-parts (plist-get part :content))
else if (notmuch-match-content-type (plist-get part :content-type) "text/*")
collect part))
(defun notmuch-mua-insert-quotable-part (message part)
;; 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
;; is concatenated to the end of it. This function fixes the problem,
@ -247,10 +222,18 @@ Note that these functions use `mail-citation-hook' if that is non-nil."
(insert "From: " from "\n")
(insert "Date: " date "\n\n")
;; Get the parts of the original message that should be quoted; this includes
;; all the text parts, except the non-preferred ones in a multipart/alternative.
(let ((quotable-parts (notmuch-mua-get-quotable-parts (plist-get original :body))))
(mapc (apply-partially 'notmuch-mua-insert-quotable-part original) quotable-parts))
(insert (with-temp-buffer
(let
;; Don't attempt to clean up messages, excerpt
;; citations, etc. in the original message before
;; quoting.
((notmuch-show-insert-text/plain-hook nil)
;; Don't omit long parts.
(notmuch-show-max-text-part-size 0)
;; Insert headers for parts as appropriate for replying.
(notmuch-show-insert-header-p-function #'notmuch-show-reply-insert-header-p-never))
(notmuch-show-insert-body original (plist-get original :body) 0)
(buffer-substring-no-properties (point-min) (point-max)))))
(set-mark (point))
(goto-char start)

View file

@ -473,6 +473,38 @@ Alex Botero-Lowry <alex.boterolowry@gmail.com> writes:
> and http://mail-index.netbsd.org/pkgsrc-bugs/2006/06/07/msg016808.htmlspecifically
> uses 64 as the
> buffer size.
> From e3bc4bbd7b9d0d086816ab5f8f2d6ffea1dd3ea4 Mon Sep 17 00:00:00 2001
> From: Alexander Botero-Lowry <alex.boterolowry@gmail.com>
> Date: Tue, 17 Nov 2009 11:30:39 -0800
> Subject: [PATCH] Deal with situation where sysconf(_SC_GETPW_R_SIZE_MAX) returns -1
>
> ---
> notmuch-config.c | 2 ++
> 1 files changed, 2 insertions(+), 0 deletions(-)
>
> diff --git a/notmuch-config.c b/notmuch-config.c
> index 248149c..e7220d8 100644
> --- a/notmuch-config.c
> +++ b/notmuch-config.c
> @@ -77,6 +77,7 @@ static char *
> get_name_from_passwd_file (void *ctx)
> {
> long pw_buf_size = sysconf(_SC_GETPW_R_SIZE_MAX);
> + if (pw_buf_size == -1) pw_buf_size = 64;
> char *pw_buf = talloc_zero_size (ctx, pw_buf_size);
> struct passwd passwd, *ignored;
> char *name;
> @@ -101,6 +102,7 @@ static char *
> get_username_from_passwd_file (void *ctx)
> {
> long pw_buf_size = sysconf(_SC_GETPW_R_SIZE_MAX);
> + if (pw_buf_size == -1) pw_buf_size = 64;
> char *pw_buf = talloc_zero_size (ctx, pw_buf_size);
> struct passwd passwd, *ignored;
> char *name;
> --
> 1.6.5.2
>
> _______________________________________________
> notmuch mailing list
> notmuch@notmuchmail.org