aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Wang <novalazy@gmail.com>2012-04-14 11:41:05 +1000
committerDavid Bremner <bremner@debian.org>2012-04-28 10:45:31 -0300
commitd32de8b3c0ba9e3224fbe66e76444bd44c1978fc (patch)
treee54e83f10e808356a82bd76cc93998db712291c7
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.
-rw-r--r--notmuch-config.c47
-rwxr-xr-xtest/config1
2 files changed, 47 insertions, 1 deletions
diff --git a/notmuch-config.c b/notmuch-config.c
index f9eb977..3e37a2d 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",
diff --git a/test/config b/test/config
index 3bf8098..93ecb13 100755
--- a/test/config
+++ b/test/config
@@ -43,7 +43,6 @@ notmuch config set foo.nonexistent
test_expect_equal "$(notmuch config get foo.nonexistent)" ""
test_begin_subtest "List all items"
-test_subtest_known_broken
notmuch config set database.path "/canonical/path"
output=$(notmuch config list)
test_expect_equal "$output" "\