On Thu, 25 Oct 2018, ma...@kakoune.org wrote: > text format is convenient for shell based parsing of notmuch output, > adding support for --include-html and --body=false improves its > usefulness to write complex shell based scripts.
It's debatable whether parsing the --format=text output correctly is convenient or not. Particularly for notmuch show I think the text format output is basically legacy, and I don't think we're all that fond of adding new features to it. In any case, this patch has two independent changes in one, and should be split. BR, Jani. > --- > NEWS | 9 +++++++++ > doc/man1/notmuch-show.rst | 15 ++++++++------- > notmuch-show.c | 20 +++++++++++++++----- > test/T190-multipart.sh | 24 ++++++++++++++++++++++++ > 4 files changed, 56 insertions(+), 12 deletions(-) > > diff --git a/NEWS b/NEWS > index ca3ba99e..6d7e7162 100644 > --- a/NEWS > +++ b/NEWS > @@ -1,3 +1,12 @@ > +Notmuch 0.29 (UNRELEASED) > +========================= > + > +Command Line Interface > +---------------------- > + > +`notmuch show` now supports --include-html and --body=false with > +--format=text > + > Notmuch 0.28 (2018-10-12) > ========================= > > diff --git a/doc/man1/notmuch-show.rst b/doc/man1/notmuch-show.rst > index 8bfa87c6..a2708a04 100644 > --- a/doc/man1/notmuch-show.rst > +++ b/doc/man1/notmuch-show.rst > @@ -176,18 +176,19 @@ Supported options for **show** include > ``--body=(true|false)`` > If true (the default) **notmuch show** includes the bodies of the > messages in the output; if false, bodies are omitted. > - ``--body=false`` is only implemented for the json and sexp formats > - and it is incompatible with ``--part > 0.`` > + ``--body=false`` is only implemented for the text, json and sexp > + formats and it is incompatible with ``--part > 0.`` > > This is useful if the caller only needs the headers as body-less > output is much faster and substantially smaller. > > ``--include-html`` > - Include "text/html" parts as part of the output (currently only > - supported with ``--format=json`` and ``--format=sexp``). By > default, > - unless ``--part=N`` is used to select a specific part or > - ``--include-html`` is used to include all "text/html" parts, no > - part with content type "text/html" is included in the output. > + Include "text/html" parts as part of the output (currently > + only supported with ``--format=text``, ``--format=json`` and > + ``--format=sexp``). By default, unless ``--part=N`` is used to > + select a specific part or ``--include-html`` is used to include all > + "text/html" parts, no part with content type "text/html" is > included > + in the output. > > A common use of **notmuch show** is to display a single thread of email > messages. For this, use a search term of "thread:<thread-id>" as can be > diff --git a/notmuch-show.c b/notmuch-show.c > index c3a3783a..07e9a5db 100644 > --- a/notmuch-show.c > +++ b/notmuch-show.c > @@ -574,12 +574,18 @@ format_part_text (const void *ctx, sprinter_t *sp, > mime_node_t *node, > g_mime_stream_printf (stream, "Date: %s\n", date_string); > g_mime_stream_printf (stream, "\fheader}\n"); > > + if (!params->output_body) > + { > + g_mime_stream_printf (stream, "\f%s}\n", part_type); > + return NOTMUCH_STATUS_SUCCESS; > + } > g_mime_stream_printf (stream, "\fbody{\n"); > } > > if (leaf) { > if (g_mime_content_type_is_type (content_type, "text", "*") && > - !g_mime_content_type_is_type (content_type, "text", "html")) > + (params->include_html || > + ! g_mime_content_type_is_type (content_type, "text", "html"))) > { > show_text_part_content (node->part, stream, 0); > } else { > @@ -1204,15 +1210,19 @@ notmuch_show_command (notmuch_config_t *config, > int argc, char *argv[]) > fprintf (stderr, "Warning: --body=false is incompatible with > --part > 0. Disabling.\n"); > params.output_body = true; > } else { > - if (format != NOTMUCH_FORMAT_JSON && format != > NOTMUCH_FORMAT_SEXP) > + if (format != NOTMUCH_FORMAT_TEXT && > + format != NOTMUCH_FORMAT_JSON && > + format != NOTMUCH_FORMAT_SEXP) > fprintf (stderr, > - "Warning: --body=false only implemented for > format=json and > format=sexp\n"); > + "Warning: --body=false only implemented for > format=text, > format=json and format=sexp\n"); > } > } > > if (params.include_html && > - (format != NOTMUCH_FORMAT_JSON && format != > NOTMUCH_FORMAT_SEXP)) { > - fprintf (stderr, "Warning: --include-html only implemented for > format=json and format=sexp\n"); > + (format != NOTMUCH_FORMAT_TEXT && > + format != NOTMUCH_FORMAT_JSON && > + format != NOTMUCH_FORMAT_SEXP)) { > + fprintf (stderr, "Warning: --include-html only implemented for > format=text, format=json and format=sexp\n"); > } > > query_string = query_string_from_args (config, argc-opt_index, > argv+opt_index); > diff --git a/test/T190-multipart.sh b/test/T190-multipart.sh > index 3eeac1db..9ad141cb 100755 > --- a/test/T190-multipart.sh > +++ b/test/T190-multipart.sh > @@ -190,6 +190,21 @@ Non-text part: application/pgp-signature > EOF > test_expect_equal_file EXPECTED OUTPUT > > +test_begin_subtest "--format=text --part=0 --body=false, message > header" > +notmuch show --format=text --part=0 --body=false > 'id:87liy5ap00....@yoom.home.cworth.org' >OUTPUT > +cat <<EOF >EXPECTED > +message{ id:87liy5ap00....@yoom.home.cworth.org depth:0 match:1 > excluded:0 filename:${MAIL_DIR}/multipart > +header{ > +Carl Worth <cwo...@cworth.org> (2001-01-05) (attachment inbox signed > unread) > +Subject: Multipart message > +From: Carl Worth <cwo...@cworth.org> > +To: cwo...@cworth.org > +Date: Fri, 05 Jan 2001 15:43:57 +0000 > +header} > +message} > +EOF > +test_expect_equal_file EXPECTED OUTPUT > + > test_begin_subtest "--format=text --part=1, message body" > notmuch show --format=text --part=1 > 'id:87liy5ap00....@yoom.home.cworth.org' >OUTPUT > cat <<EOF >EXPECTED > @@ -310,6 +325,15 @@ Non-text part: text/html > EOF > test_expect_equal_file EXPECTED OUTPUT > > +test_begin_subtest "--format=text --include-html --part=5, rfc822's > html part" > +notmuch show --format=text --include-html --part=5 > 'id:87liy5ap00....@yoom.home.cworth.org' >OUTPUT > +cat <<EOF >EXPECTED > +part{ ID: 5, Content-type: text/html > +<p>This is an embedded message, with a multipart/alternative part.</p> > +part} > +EOF > +test_expect_equal_file EXPECTED OUTPUT > + > test_begin_subtest "--format=text --part=6, rfc822's text part" > notmuch show --format=text --part=6 > 'id:87liy5ap00....@yoom.home.cworth.org' >OUTPUT > cat <<EOF >EXPECTED > -- > 2.14.5 > _______________________________________________ > notmuch mailing list > notmuch@notmuchmail.org > https://notmuchmail.org/mailman/listinfo/notmuch _______________________________________________ notmuch mailing list notmuch@notmuchmail.org https://notmuchmail.org/mailman/listinfo/notmuch