notmuch config: Provide support for querying non-standard configuration values.
authorCarl Worth <cworth@cworth.org>
Wed, 27 Oct 2010 20:26:32 +0000 (13:26 -0700)
committerCarl Worth <cworth@cworth.org>
Wed, 27 Oct 2010 20:26:32 +0000 (13:26 -0700)
We might as well be general here, and allow the "notmuch config" command
to query any stored value from the configuration file, (whether or not
the rest of the code actually knows anything about that value).

notmuch-config.c

index 2e81d1c22e4a27232d561f119b4962663c024fc0..188ecd7170486e44e8f5d7685b4eb7db0ee46619 100644 (file)
@@ -566,7 +566,7 @@ int
 notmuch_config_command (void *ctx, int argc, char *argv[])
 {
     notmuch_config_t *config;
-    const char *item;
+    char *item;
 
     if (argc != 2) {
        fprintf (stderr, "Error: notmuch config requires two arguments.\n");
@@ -606,9 +606,36 @@ notmuch_config_command (void *ctx, int argc, char *argv[])
        for (i = 0; i < length; i++)
            printf ("%s\n", tags[i]);
     } else {
-       fprintf (stderr, "Unknown configuration item: %s\n",
-                argv[1]);
-       return 1;
+       char **value;
+       size_t i, length;
+       char *group, *period, *key;
+
+       group = item;
+
+       period = index (item, '.');
+       if (period == NULL || *(period+1) == '\0') {
+           fprintf (stderr,
+                    "Invalid configuration name: %s\n"
+                    "(Should be of the form <section>.<item>)\n", item);
+           return 1;
+       }
+
+       *period = '\0';
+       key = period + 1;
+
+       value = g_key_file_get_string_list (config->key_file,
+                                           group, key,
+                                           &length, NULL);
+       if (value == NULL) {
+           fprintf (stderr, "Unknown configuration item: %s.%s\n",
+                    group, key);
+           return 1;
+       }
+
+       for (i = 0; i < length; i++)
+           printf ("%s\n", value[i]);
+
+       free (value);
     }
 
     notmuch_config_close (config);