[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