aboutsummaryrefslogtreecommitdiffhomepage
path: root/notmuch-config.c
diff options
context:
space:
mode:
authorGravatar Peter Wang <novalazy@gmail.com>2012-04-14 11:41:05 +1000
committerGravatar David Bremner <bremner@debian.org>2012-04-28 10:45:31 -0300
commitd32de8b3c0ba9e3224fbe66e76444bd44c1978fc (patch)
treee54e83f10e808356a82bd76cc93998db712291c7 /notmuch-config.c
parent86f01063d74cb45ed83df80c9406262ae533d178 (diff)
config: Add 'config list' command
Add a command to list all configuration items with their associated values. One use is as follows: a MUA may prefer to store data in a central notmuch configuration file so that the data is accessible across different machines, e.g. an addressbook. The list command helps to implement features such as tab completion on the keys.
Diffstat (limited to 'notmuch-config.c')
-rw-r--r--notmuch-config.c47
1 files changed, 47 insertions, 0 deletions
diff --git a/notmuch-config.c b/notmuch-config.c
index f9eb9778..3e37a2d6 100644
--- a/notmuch-config.c
+++ b/notmuch-config.c
@@ -799,6 +799,51 @@ notmuch_config_command_set (void *ctx, char *item, int argc, char *argv[])
return ret;
}
+static int
+notmuch_config_command_list (void *ctx)
+{
+ notmuch_config_t *config;
+ char **groups;
+ size_t g, groups_length;
+
+ config = notmuch_config_open (ctx, NULL, NULL);
+ if (config == NULL)
+ return 1;
+
+ groups = g_key_file_get_groups (config->key_file, &groups_length);
+ if (groups == NULL)
+ return 1;
+
+ for (g = 0; g < groups_length; g++) {
+ char **keys;
+ size_t k, keys_length;
+
+ keys = g_key_file_get_keys (config->key_file,
+ groups[g], &keys_length, NULL);
+ if (keys == NULL)
+ continue;
+
+ for (k = 0; k < keys_length; k++) {
+ char *value;
+
+ value = g_key_file_get_string (config->key_file,
+ groups[g], keys[k], NULL);
+ if (value != NULL) {
+ printf ("%s.%s=%s\n", groups[g], keys[k], value);
+ free (value);
+ }
+ }
+
+ g_strfreev (keys);
+ }
+
+ g_strfreev (groups);
+
+ notmuch_config_close (config);
+
+ return 0;
+}
+
int
notmuch_config_command (void *ctx, int argc, char *argv[])
{
@@ -823,6 +868,8 @@ notmuch_config_command (void *ctx, int argc, char *argv[])
return 1;
}
return notmuch_config_command_set (ctx, argv[1], argc - 2, argv + 2);
+ } else if (strcmp (argv[0], "list") == 0) {
+ return notmuch_config_command_list (ctx);
}
fprintf (stderr, "Unrecognized argument for notmuch config: %s\n",