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".
This commit is contained in:
Carl Worth 2010-10-27 13:02:17 -07:00
parent 6c65fcd9aa
commit b9eac48c22
4 changed files with 101 additions and 3 deletions

View file

@ -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);

View file

@ -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;
}

View file

@ -404,6 +404,34 @@ See the
section below for details of the supported syntax for <search-terms>.
.RE
The
.B config
command can be used to get settings from the notmuch configuration
file.
.RS 4
.TP 4
.BR "config get " <section> . <item>
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.

View file

@ -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 <section>.<item>",
"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,
"[<command>]",
"This message, or more detailed help for the named command.",