+ if (_item_split (item, &group, &key))
+ return 1;
+
+ config = notmuch_config_open (ctx, NULL, NULL);
+ if (config == NULL)
+ return 1;
+
+ /* With only the name of an item, we clear it from the
+ * configuration file.
+ *
+ * With a single value, we set it as a string.
+ *
+ * With multiple values, we set them as a string list.
+ */
+ switch (argc) {
+ case 0:
+ g_key_file_remove_key (config->key_file, group, key, NULL);
+ break;
+ case 1:
+ g_key_file_set_string (config->key_file, group, key, argv[0]);
+ break;
+ default:
+ g_key_file_set_string_list (config->key_file, group, key,
+ (const gchar **) argv, argc);
+ break;
+ }
+
+ ret = notmuch_config_save (config);
+ notmuch_config_close (config);
+
+ return ret;
+}
+
+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");
+ return 1;
+ }
+
+ if (strcmp (argv[0], "get") == 0)
+ return notmuch_config_command_get (ctx, argv[1]);
+ else if (strcmp (argv[0], "set") == 0)
+ return notmuch_config_command_set (ctx, argv[1], argc - 2, argv + 2);
+
+ fprintf (stderr, "Unrecognized argument for notmuch config: %s\n",
+ argv[0]);
+ return 1;
+}
+
+notmuch_bool_t
+notmuch_config_get_maildir_synchronize_flags (notmuch_config_t *config)
+{
+ return config->maildir_synchronize_flags;