- char **tags;
- size_t tags_length;
- unsigned int i;
-
- if (config->new_tags == NULL) {
- tags = g_key_file_get_string_list (config->key_file,
- "messages", "new_tags",
- &tags_length, NULL);
- if (tags) {
- config->new_tags = talloc_size (config,
- sizeof (char *) *
- (tags_length + 1));
- for (i = 0; i < tags_length; i++)
- config->new_tags[i] = talloc_strdup (config->new_tags,
- tags[i]);
- config->new_tags[i] = NULL;
-
- g_strfreev (tags);
-
- config->new_tags_length = tags_length;
+ _config_set_list (config, "new", "ignore", list, length,
+ &(config->new_ignore));
+}
+
+const char **
+notmuch_config_get_search_exclude_tags (notmuch_config_t *config, size_t *length)
+{
+ return _config_get_list (config, "search", "exclude_tags",
+ &(config->search_exclude_tags),
+ &(config->search_exclude_tags_length), length);
+}
+
+void
+notmuch_config_set_search_exclude_tags (notmuch_config_t *config,
+ const char *list[],
+ size_t length)
+{
+ _config_set_list (config, "search", "exclude_tags", list, length,
+ &(config->search_exclude_tags));
+}
+
+/* Given a configuration item of the form <group>.<key> return the
+ * component group and key. If any error occurs, print a message on
+ * stderr and return 1. Otherwise, return 0.
+ *
+ * Note: This function modifies the original 'item' string.
+ */
+static int
+_item_split (char *item, char **group, char **key)
+{
+ char *period;
+
+ *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;
+
+ return 0;
+}
+
+static int
+notmuch_config_command_get (void *ctx, char *item)
+{
+ notmuch_config_t *config;
+
+ config = notmuch_config_open (ctx, NULL, NULL);
+ if (config == NULL)
+ return 1;
+
+ if (strcmp(item, "database.path") == 0) {
+ printf ("%s\n", notmuch_config_get_database_path (config));
+ } else if (strcmp(item, "user.name") == 0) {
+ printf ("%s\n", notmuch_config_get_user_name (config));
+ } else if (strcmp(item, "user.primary_email") == 0) {
+ printf ("%s\n", notmuch_config_get_user_primary_email (config));
+ } else if (strcmp(item, "user.other_email") == 0) {
+ const char **other_email;
+ size_t i, length;
+
+ other_email = notmuch_config_get_user_other_email (config, &length);
+ for (i = 0; i < length; i++)
+ printf ("%s\n", other_email[i]);
+ } else if (strcmp(item, "new.tags") == 0) {
+ const char **tags;
+ size_t i, length;
+
+ tags = notmuch_config_get_new_tags (config, &length);
+ for (i = 0; i < length; i++)
+ printf ("%s\n", tags[i]);
+ } else {
+ char **value;
+ size_t i, length;
+ char *group, *key;
+
+ if (_item_split (item, &group, &key))
+ return 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;