From b9eac48c22f53f84ed1d9c1d8ca862a7b638c9ac Mon Sep 17 00:00:00 2001 From: Carl Worth Date: Wed, 27 Oct 2010 13:02:17 -0700 Subject: [PATCH] notmuch: Add a new "notmuch config" command for querying configuration. So far, we implement only "notmuch config get". It won't be too much work from here to also implement "notmuch config set". --- notmuch-client.h | 5 ++++- notmuch-config.c | 57 ++++++++++++++++++++++++++++++++++++++++++++++-- notmuch.1 | 28 ++++++++++++++++++++++++ notmuch.c | 14 ++++++++++++ 4 files changed, 101 insertions(+), 3 deletions(-) diff --git a/notmuch-client.h b/notmuch-client.h index 20be43b9..d530578a 100644 --- a/notmuch-client.h +++ b/notmuch-client.h @@ -113,6 +113,9 @@ notmuch_search_tags_command (void *ctx, int argc, char *argv[]); int notmuch_part_command (void *ctx, int argc, char *argv[]); +int +notmuch_config_command (void *ctx, int argc, char *argv[]); + const char * notmuch_time_relative_date (const void *ctx, time_t then); @@ -174,7 +177,7 @@ void notmuch_config_set_user_primary_email (notmuch_config_t *config, const char *primary_email); -char ** +const char ** notmuch_config_get_user_other_email (notmuch_config_t *config, size_t *length); diff --git a/notmuch-config.c b/notmuch-config.c index cf306039..2e81d1c2 100644 --- a/notmuch-config.c +++ b/notmuch-config.c @@ -68,7 +68,7 @@ struct _notmuch_config { char *database_path; char *user_name; char *user_primary_email; - char **user_other_email; + const char **user_other_email; size_t user_other_email_length; const char **new_tags; size_t new_tags_length; @@ -474,7 +474,7 @@ notmuch_config_set_user_primary_email (notmuch_config_t *config, config->user_primary_email = NULL; } -char ** +const char ** notmuch_config_get_user_other_email (notmuch_config_t *config, size_t *length) { @@ -562,3 +562,56 @@ notmuch_config_set_new_tags (notmuch_config_t *config, config->new_tags = NULL; } +int +notmuch_config_command (void *ctx, int argc, char *argv[]) +{ + notmuch_config_t *config; + const char *item; + + if (argc != 2) { + fprintf (stderr, "Error: notmuch config requires two arguments.\n"); + return 1; + } + + if (strcmp (argv[0], "get")) { + fprintf (stderr, "Unrecognized argument for notmuch config: %s\n", + argv[0]); + return 1; + } + + config = notmuch_config_open (ctx, NULL, NULL); + if (config == NULL) + return 1; + + item = argv[1]; + + if (strcmp(item, "database.path") == 0) { + printf ("%s\n", notmuch_config_get_database_path (config)); + } else if (strcmp(item, "user.name") == 0) { + printf ("%s\n", notmuch_config_get_user_name (config)); + } else if (strcmp(item, "user.primary_email") == 0) { + printf ("%s\n", notmuch_config_get_user_primary_email (config)); + } else if (strcmp(item, "user.other_email") == 0) { + const char **other_email; + size_t i, length; + + other_email = notmuch_config_get_user_other_email (config, &length); + for (i = 0; i < length; i++) + printf ("%s\n", other_email[i]); + } else if (strcmp(item, "new.tags") == 0) { + const char **tags; + size_t i, length; + + tags = notmuch_config_get_new_tags (config, &length); + for (i = 0; i < length; i++) + printf ("%s\n", tags[i]); + } else { + fprintf (stderr, "Unknown configuration item: %s\n", + argv[1]); + return 1; + } + + notmuch_config_close (config); + + return 0; +} diff --git a/notmuch.1 b/notmuch.1 index 3ec9c55c..41f7c7e4 100644 --- a/notmuch.1 +++ b/notmuch.1 @@ -404,6 +404,34 @@ See the section below for details of the supported syntax for . .RE +The +.B config +command can be used to get settings from the notmuch configuration +file. + +.RS 4 +.TP 4 +.BR "config get "
. + +Get settings from the notmuch configuration file. + +The value of the specified configuration item is printed to stdout. If +the item has multiple values, each value is separated by a newline +character. + +Available configuration items include at least + + database.path + + user.name + + user.primary_email + + user.other_email + + new.tags +.RE + .SH SEARCH SYNTAX Several notmuch commands accept a common syntax for search terms. diff --git a/notmuch.c b/notmuch.c index f6b8c139..f9acfa36 100644 --- a/notmuch.c +++ b/notmuch.c @@ -321,6 +321,20 @@ command_t commands[] = { "\tby the \"--format=json\" option of \"notmuch show\". If the\n" "\tmessage specified by the search terms does not include a\n" "\tpart with the specified \"id\" there will be no output." }, + { "config", notmuch_config_command, + "get
.", + "Get settings from the notmuch configuration file.", + "\tThe value of the specified configuration item is printed\n" + "\tto stdout. If the item has multiple values, each value\n" + "\tis separated by a newline character.\n" + "\n" + "\tAvailable configuration items include at least" + "\n" + "\t\tdatabase.path\n" + "\t\tuser.name\n" + "\t\tuser.primary_email\n" + "\t\tuser.other_email\n" + "\t\tnew.tags\n" }, { "help", notmuch_help_command, "[]", "This message, or more detailed help for the named command.",