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 > >
