On Thu, Apr 05 2012, Peter Wang wrote: > 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. > --- > notmuch-config.c | 66 ++++++++++++++++++++++++++++++++++++++++++++++++++--- > test/config | 1 - > 2 files changed, 62 insertions(+), 5 deletions(-) > > diff --git a/notmuch-config.c b/notmuch-config.c > index 85fc774..d5540ac 100644 > --- a/notmuch-config.c > +++ b/notmuch-config.c > @@ -799,20 +799,78 @@ 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[]) > { > argc--; argv++; /* skip subcommand argument */ > > - if (argc < 2) { > - fprintf (stderr, "Error: notmuch config requires at least two arguments.\n"); > + if (argc < 1) { > + fprintf (stderr, "Error: notmuch config requires at least one argument.\n"); > return 1; > } Hey, Peter. I would say everything up to here looks great. > - if (strcmp (argv[0], "get") == 0) > + if (strcmp (argv[0], "get") == 0) { > + if (argc < 2) { > + fprintf (stderr, "Error: notmuch config get requires at least " > + "two arguments.\n"); > + return 1; > + } > return notmuch_config_command_get (ctx, argv[1]); > - else if (strcmp (argv[0], "set") == 0) > + } else if (strcmp (argv[0], "set") == 0) { > + if (argc < 2) { > + fprintf (stderr, "Error: notmuch config set requires at least " > + "two arguments.\n"); > + return 1; > + } > return notmuch_config_command_set (ctx, argv[1], argc - 2, argv + 2); But then these changes look unrelated to me. They do look good intentioned, though. It's probably best to submit these changes in a separate unrelated patch. jamie.