]> git.notmuchmail.org Git - notmuch/commitdiff
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)
            return
            ;;
        --output)
-           COMPREPLY=( $( compgen -W "sender recipients count" -- "${cur}" ) )
+           COMPREPLY=( $( compgen -W "sender recipients count address" -- "${cur}" ) )
            return
            ;;
        --sort)
            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.
 
         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.
 
         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.
 
             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.
     ``--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_SENDER      = 1 << 5,
     OUTPUT_RECIPIENTS  = 1 << 6,
     OUTPUT_COUNT       = 1 << 7,
+    OUTPUT_ADDRESS     = 1 << 8,
 } output_t;
 
 typedef enum {
 } 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->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);
        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 },
          (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 },
                                  { 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
 
 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.
 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.