diff options
author | Peter Wang <novalazy@gmail.com> | 2012-04-14 11:41:05 +1000 |
---|---|---|
committer | David Bremner <bremner@debian.org> | 2012-04-28 10:45:31 -0300 |
commit | d32de8b3c0ba9e3224fbe66e76444bd44c1978fc (patch) | |
tree | e54e83f10e808356a82bd76cc93998db712291c7 | |
parent | 86f01063d74cb45ed83df80c9406262ae533d178 (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.c | 47 | ||||
-rwxr-xr-x | test/config | 1 |
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" "\ |