]> git.notmuchmail.org Git - notmuch/blobdiff - notmuch-config.c
python: have docs reflect current return value behavior
[notmuch] / notmuch-config.c
index fa09628729a1a8a81823a0db20ddd8541752991d..58f83b0d299c8d4b6213758448bf1db69302b6b3 100644 (file)
@@ -37,11 +37,13 @@ static const char database_config_comment[] =
     " Notmuch will store its database within a sub-directory of the path\n"
     " configured here named \".notmuch\".\n";
 
-static const char messages_config_comment[] =
-    " Messages configuration\n"
+static const char new_config_comment[] =
+    " Configuration for \"notmuch new\"\n"
     "\n"
-    " The only value supported here is 'new_tags' which lists the tags that\n"
-    " should be applied to new messages.\n";
+    " The following options are supported here:\n"
+    "\n"
+    "\ttags    A list (separated by ';') of the tags that will be\n"
+    "\t        added to all messages incorporated by \"notmuch new\".\n";
 
 static const char user_config_comment[] =
     " User configuration\n"
@@ -179,6 +181,9 @@ notmuch_config_open (void *ctx,
     int is_new = 0;
     size_t tmp;
     char *notmuch_config_env = NULL;
+    int file_had_database_group;
+    int file_had_new_group;
+    int file_had_user_group;
 
     if (is_new_ret)
        *is_new_ret = 0;
@@ -235,6 +240,22 @@ notmuch_config_open (void *ctx,
        is_new = 1;
     }
 
+    /* Whenever we know of configuration sections that don't appear in
+     * the configuration file, we add some comments to help the user
+     * understand what can be done.
+     *
+     * It would be convenient to just add those comments now, but
+     * apparently g_key_file will clear any comments when keys are
+     * added later that create the groups. So we have to check for the
+     * groups now, but add the comments only after setting all of our
+     * values.
+     */
+    file_had_database_group = g_key_file_has_group (config->key_file,
+                                                   "database");
+    file_had_new_group = g_key_file_has_group (config->key_file, "new");
+    file_had_user_group = g_key_file_has_group (config->key_file, "user");
+
+
     if (notmuch_config_get_database_path (config) == NULL) {
        char *path = talloc_asprintf (config, "%s/mail",
                                      getenv ("HOME"));
@@ -283,15 +304,29 @@ notmuch_config_open (void *ctx,
        notmuch_config_set_new_tags (config, tags, 2);
     }
 
-    /* When we create a new configuration file here, we  add some
-     * comments to help the user understand what can be done. */
-    if (is_new) {
+    /* Whenever we know of configuration sections that don't appear in
+     * the configuration file, we add some comments to help the user
+     * understand what can be done. */
+    if (is_new)
+    {
        g_key_file_set_comment (config->key_file, NULL, NULL,
                                toplevel_config_comment, NULL);
+    }
+
+    if (! file_had_database_group)
+    {
        g_key_file_set_comment (config->key_file, "database", NULL,
                                database_config_comment, NULL);
-       g_key_file_set_comment (config->key_file, "messages", NULL,
-                               messages_config_comment, NULL);
+    }
+
+    if (! file_had_new_group)
+    {
+       g_key_file_set_comment (config->key_file, "new", NULL,
+                               new_config_comment, NULL);
+    }
+
+    if (! file_had_user_group)
+    {
        g_key_file_set_comment (config->key_file, "user", NULL,
                                user_config_comment, NULL);
     }
@@ -484,7 +519,7 @@ notmuch_config_get_new_tags (notmuch_config_t *config,
 
     if (config->new_tags == NULL) {
        tags = g_key_file_get_string_list (config->key_file,
-                                          "messages", "new_tags",
+                                          "new", "tags",
                                           &tags_length, NULL);
        if (tags) {
            config->new_tags = talloc_size (config,
@@ -511,7 +546,7 @@ notmuch_config_set_new_tags (notmuch_config_t *config,
                             size_t length)
 {
     g_key_file_set_string_list (config->key_file,
-                               "messages", "new_tags",
+                               "new", "tags",
                                new_tags, length);
 
     talloc_free (config->new_tags);