[notmuch] [PATCH 2/2] notmuch list: A new command to produce various lists.

Jan Janak jan at ryngle.com
Thu Nov 19 03:52:49 PST 2009


Carl and others,

I implemented a new notmuch command that can be used to list all tags
present in the database:

  $ notmuch list tags

If you run this, you'll get an alphabetically sorted list of all
tags--one tag per line.

The main reason why I implemented this is because I am also working on
adding the tag completion feature to the Emacs mode. This is very
useful if you have a large collection of tags--it can save you some
typing and, perhaps more importantly, it minimizes the risk of having
typos in tag names. I'll send a patch for that later too.

Let me know what do you think.

  -- Jan

On Thu, Nov 19, 2009 at 12:34 PM, Jan Janak <jan at ryngle.com> wrote:
> Here we create a new notmuch command called list. The purpose of the
> command is to produce various lists from the notmuch database.
>
> At the moment we support only one command, notmuch list tags. This
> command creates a list of all tags found in the database.
>
> Signed-off-by: Jan Janak <jan at ryngle.com>
> ---
>  Makefile.local   |    1 +
>  notmuch-client.h |    3 ++
>  notmuch-list.c   |   98 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
>  notmuch.c        |   10 +++++
>  4 files changed, 112 insertions(+), 0 deletions(-)
>  create mode 100644 notmuch-list.c
>
> diff --git a/Makefile.local b/Makefile.local
> index 27e42ba..fb6d5c3 100644
> --- a/Makefile.local
> +++ b/Makefile.local
> @@ -12,6 +12,7 @@ notmuch_client_srcs =         \
>        notmuch-show.c          \
>        notmuch-tag.c           \
>        notmuch-time.c          \
> +    notmuch-list.c      \
>        gmime-filter-reply.c    \
>        query-string.c          \
>        show-message.c
> diff --git a/notmuch-client.h b/notmuch-client.h
> index b65aa77..ae876b5 100644
> --- a/notmuch-client.h
> +++ b/notmuch-client.h
> @@ -114,6 +114,9 @@ notmuch_show_command (void *ctx, int argc, char *argv[]);
>  int
>  notmuch_tag_command (void *ctx, int argc, char *argv[]);
>
> +int
> +notmuch_list_command (void *ctx, int argc, char *argv[]);
> +
>  const char *
>  notmuch_time_relative_date (const void *ctx, time_t then);
>
> diff --git a/notmuch-list.c b/notmuch-list.c
> new file mode 100644
> index 0000000..fe71108
> --- /dev/null
> +++ b/notmuch-list.c
> @@ -0,0 +1,98 @@
> +/* notmuch - Not much of an email program, (just index and search)
> + *
> + * Copyright © 2009 Carl Worth
> + * Copyright © 2009 Jan Janak
> + *
> + * This program is free software: you can redistribute it and/or modify
> + * it under the terms of the GNU General Public License as published by
> + * the Free Software Foundation, either version 3 of the License, or
> + * (at your option) any later version.
> + *
> + * This program is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> + * GNU General Public License for more details.
> + *
> + * You should have received a copy of the GNU General Public License
> + * along with this program.  If not, see http://www.gnu.org/licenses/ .
> + *
> + * Authors: Carl Worth <cworth at cworth.org>
> + *          Jan Janak <jan at ryngle.com>
> + */
> +
> +#include "notmuch-client.h"
> +
> +enum list_cmd {
> +       LIST_TAGS
> +};
> +
> +
> +static int
> +list_all_tags(notmuch_database_t* db)
> +{
> +       notmuch_tags_t* tags;
> +       const char* t;
> +
> +       if ((tags = notmuch_database_get_tags(db)) == NULL) {
> +               fprintf(stderr, "Error while obtaining tags from the database.\n");
> +               return 1;
> +       }
> +
> +       while((t = notmuch_tags_get(tags))) {
> +               printf("%s\n", t);
> +               notmuch_tags_advance(tags);
> +       }
> +
> +       notmuch_tags_destroy(tags);
> +       return 0;
> +}
> +
> +int
> +notmuch_list_command (void *ctx, int argc, char *argv[])
> +{
> +    notmuch_config_t *config;
> +    notmuch_database_t *db;
> +       enum list_cmd cmd;
> +
> +       config = NULL;
> +       db = NULL;
> +
> +       if (argc < 1) {
> +               fprintf(stderr, "Error: notmuch list requires at least one parameter.\n");
> +               fprintf(stderr, "(See notmuch help list)\n");
> +               goto error;
> +       }
> +
> +       if (!strcmp(argv[0], "tags")) {
> +               cmd = LIST_TAGS;
> +       } else {
> +               fprintf(stderr, "Sub-command '%s' not supported.\n", argv[0]);
> +               goto error;
> +       }
> +
> +    if ((config = notmuch_config_open (ctx, NULL, NULL)) == NULL) {
> +               goto error;
> +       }
> +
> +    db = notmuch_database_open (notmuch_config_get_database_path (config));
> +    if (db == NULL) {
> +               goto error;
> +       }
> +
> +       switch(cmd) {
> +       case LIST_TAGS:
> +               if (list_all_tags(db) != 0) goto error;
> +               break;
> +
> +       default:
> +               fprintf(stderr, "Unsupported command: bug in notmuch_list_command.\n");
> +               goto error;
> +       }
> +
> +    notmuch_database_close (db);
> +    return 0;
> +
> +error:
> +       if (db) notmuch_database_close(db);
> +       return 1;
> +}
> diff --git a/notmuch.c b/notmuch.c
> index 5cc8e4c..1baa22d 100644
> --- a/notmuch.c
> +++ b/notmuch.c
> @@ -230,6 +230,16 @@ command_t commands[] = {
>       "\t\tSo if you've previously been using sup for mail, then the\n"
>       "\t\t\"notmuch restore\" command provides you a way to import\n"
>       "\t\tall of your tags (or labels as sup calls them)." },
> +       { "list", notmuch_list_command,
> +         "<what>",
> +         "\t\tShow additional information about the database.",
> +         "\t\tThe following sub-commands are supported:"
> +         "\n\n"
> +         "\t\ttags\n"
> +         "\n"
> +         "\t\t\tGenerate a list of all tags available in the database.\n"
> +         "\t\t\tThe list will be sorted alphabetically."
> +       },
>     { "help", notmuch_help_command,
>       "[<command>]",
>       "\t\tThis message, or more detailed help for the named command.",
> --
> 1.6.3.3
>
>
> _______________________________________________
> notmuch mailing list
> notmuch at notmuchmail.org
> http://notmuchmail.org/mailman/listinfo/notmuch
>
>


More information about the notmuch mailing list