cli: add support for only printing the addresses in notmuch address
authorJani Nikula <jani@nikula.org>
Thu, 2 Nov 2017 18:44:59 +0000 (20:44 +0200)
committerDavid Bremner <david@tethera.net>
Fri, 15 Dec 2017 01:28:50 +0000 (21:28 -0400)
The notmuch address output is much more useful for scripts with just
the addresses printed. Support this using the --output=address option.

completion/notmuch-completion.bash
doc/man1/notmuch-address.rst
notmuch-search.c
test/T095-address.sh

index fb093de89001e43baa92d47748b456d7acbca495..adf64a0aebf3ae0a1654cd7312af4c70cbdb742d 100644 (file)
@@ -472,7 +472,7 @@ _notmuch_address()
            return
            ;;
        --output)
-           COMPREPLY=( $( compgen -W "sender recipients count" -- "${cur}" ) )
+           COMPREPLY=( $( compgen -W "sender recipients count address" -- "${cur}" ) )
            return
            ;;
        --sort)
index dbac20f7b012f460e3ede9ba8bb6aaefa9a05862..68415d13c5b6b78c8fdba23566ff3bc667074bc1 100644 (file)
@@ -29,7 +29,7 @@ Supported options for **address** include
         intended for programs that invoke **notmuch(1)** internally. If
         omitted, the latest supported version will be used.
 
-    ``--output=(sender|recipients|count)``
+    ``--output=(sender|recipients|count|address)``
 
         Controls which information appears in the output. This option
         can be given multiple times to combine different outputs.
@@ -55,6 +55,11 @@ Supported options for **address** include
             Note: With this option, addresses are printed only after
             the whole search is finished. This may take long time.
 
+        **address**
+            Output only the email addresses instead of the full
+            mailboxes with names and email addresses. This option has
+            no effect on the JSON or S-Expression output formats.
+
     ``--deduplicate=(no|mailbox|address)``
 
         Control the deduplication of results.
index 0abac08eb7ab3a2720fdeb7d3b67717dd833039f..8f467db43cf083482cb04fae411b530e1504ec52 100644 (file)
@@ -34,6 +34,7 @@ typedef enum {
     OUTPUT_SENDER      = 1 << 5,
     OUTPUT_RECIPIENTS  = 1 << 6,
     OUTPUT_COUNT       = 1 << 7,
+    OUTPUT_ADDRESS     = 1 << 8,
 } output_t;
 
 typedef enum {
@@ -370,7 +371,10 @@ print_mailbox (const search_context_t *ctx, const mailbox_t *mailbox)
            format->integer (format, count);
            format->string (format, "\t");
        }
-       format->string (format, name_addr);
+       if (ctx->output & OUTPUT_ADDRESS)
+           format->string (format, addr);
+       else
+           format->string (format, name_addr);
        format->separator (format);
     } else {
        format->begin_map (format);
@@ -877,6 +881,7 @@ notmuch_address_command (notmuch_config_t *config, int argc, char *argv[])
          (notmuch_keyword_t []){ { "sender", OUTPUT_SENDER },
                                  { "recipients", OUTPUT_RECIPIENTS },
                                  { "count", OUTPUT_COUNT },
+                                 { "address", OUTPUT_ADDRESS },
                                  { 0, 0 } } },
        { .opt_keyword = &ctx->exclude, .name = "exclude", .keywords =
          (notmuch_keyword_t []){ { "true", NOTMUCH_EXCLUDE_TRUE },
index f0291d29ec43076a3fda9f41ffadb6a6aed2ef43..817be5380a45d9a98a7a6bbd2031269575dd13ba 100755 (executable)
@@ -119,6 +119,42 @@ cat <<EOF >EXPECTED
 EOF
 test_expect_equal_file EXPECTED OUTPUT
 
+test_begin_subtest "--output=recipients --output=address"
+notmuch address --output=recipients --output=address '*' >OUTPUT
+cat <<EOF >EXPECTED
+allan@archlinux.org
+aur-general@archlinux.org
+olivier.berger@it-sudparis.eu
+notmuch@notmuchmail.org
+notmuch@notmuchmail.org
+keithp@keithp.com
+dottedmag@dottedmag.net
+EOF
+test_expect_equal_file EXPECTED OUTPUT
+
+test_begin_subtest "--output=sender --output=address --output=count"
+notmuch address --output=sender --output=address --output=count '*' | sort -n >OUTPUT
+cat <<EOF >EXPECTED
+1      agriffis@n01se.net
+1      aperez@igalia.com
+1      boulogne.f@gmail.com
+1      chris@chris-wilson.co.uk
+1      ingmar@exherbo.org
+1      isra@herraiz.org
+1      olivier.berger@it-sudparis.eu
+1      rollandsantimano@yahoo.com
+2      alex.boterolowry@gmail.com
+2      gzjjgod@gmail.com
+3      stewart@flamingspork.com
+4      alex.boterolowry@gmail.com
+4      jan@ryngle.com
+5      dottedmag@dottedmag.net
+5      lars@seas.harvard.edu
+7      keithp@keithp.com
+12     cworth@cworth.org
+EOF
+test_expect_equal_file EXPECTED OUTPUT
+
 test_begin_subtest "--output=count --format=json"
 # Since the iteration order of GHashTable is not specified, we
 # preprocess and sort the results to keep the order stable here.