[PATCH] cli: Support --include-html and --body=false for --format=text

mawww at kakoune.org mawww at kakoune.org
Wed Oct 24 18:44:05 PDT 2018


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.
---
  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.fsf at yoom.home.cworth.org' >OUTPUT
+cat <<EOF >EXPECTED
+message{ id:87liy5ap00.fsf at yoom.home.cworth.org depth:0 match:1 
excluded:0 filename:${MAIL_DIR}/multipart
+header{
+Carl Worth <cworth at cworth.org> (2001-01-05) (attachment inbox signed 
unread)
+Subject: Multipart message
+From: Carl Worth <cworth at cworth.org>
+To: cworth at 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.fsf at 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.fsf at 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.fsf at yoom.home.cworth.org' >OUTPUT
  cat <<EOF >EXPECTED
-- 
2.14.5


More information about the notmuch mailing list