Re: [PATCH v6 4/6] emacs/mua: Generate improved cited text for replies

Subject: Re: [PATCH v6 4/6] emacs/mua: Generate improved cited text for replies

Date: Mon, 07 Mar 2016 19:52:11 +0200

To: Mark Walters, notmuch@notmuchmail.org

Cc:

From: Jani Nikula


On Sat, 20 Feb 2016, Mark Walters <markwalters1009@gmail.com> wrote:
> [ text/plain ]
> From: David Edmondson <dme@dme.org>
>
> 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.

For a message with mime structure:

└┬╴multipart/mixed 120338 bytes
 ├─╴text/html 59234 bytes
 └─╴application/octet-stream attachment [filename.html] 59234 bytes

this patch (i.e. commit e103f0a971b8 emacs/mua: Generate improved cited
text for replies) causes the application/octet-stream attachment to be
displayed, with:

[ filename.html: application/octet-stream (as text/html) ]
!!! Bodypart insert error: Internal error: No :content from ("show" "--format=sexp" "--include-html" "--part=3" "--decrypt" "id:mid@example.com") !!!

It is anyway followed by what looks like the contents of the attachment
in html, parsed and displayed properly. Running the above command does
not produce any output on the command line.

Replies now include both text/html and the attachment cited. The cited
text also includes the error message. (To make matters worse, in this
particular case the two parts contain the same information, *sigh*. Not
sure anything can be done about that.)

Is there a way to interactively choose which parts are cited in replies?


BR,
Jani.


> ---
>  emacs/notmuch-mua.el | 43 +++++++++++++------------------------------
>  test/T310-emacs.sh   | 32 ++++++++++++++++++++++++++++++++
>  2 files changed, 45 insertions(+), 30 deletions(-)
>
> diff --git a/emacs/notmuch-mua.el b/emacs/notmuch-mua.el
> index d4fad7b..ecc5bec 100644
> --- a/emacs/notmuch-mua.el
> +++ b/emacs/notmuch-mua.el
> @@ -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 @@ (defun notmuch-mua-reply-crypto (parts)
>  	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 @@ (defun notmuch-mua-reply (query-string &optional sender reply-all)
>  	(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)
> diff --git a/test/T310-emacs.sh b/test/T310-emacs.sh
> index 61bc369..22ca71c 100755
> --- a/test/T310-emacs.sh
> +++ b/test/T310-emacs.sh
> @@ -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
> -- 
> 2.1.4
>
> _______________________________________________
> notmuch mailing list
> notmuch@notmuchmail.org
> https://notmuchmail.org/mailman/listinfo/notmuch

Thread: