"\t\tsearch results by default. Using an excluded tag in a\n"
"\t\tquery will override that exclusion.\n";
+static const char crypto_config_comment[] =
+ " Cryptography related configuration\n"
+ "\n"
+ " The following option is supported here:\n"
+ "\n"
+ "\tgpg_path\n"
+ "\t\tbinary name or full path to invoke gpg.\n";
+
struct _notmuch_config {
char *filename;
GKeyFile *key_file;
notmuch_bool_t is_new;
char *database_path;
+ char *crypto_gpg_path;
char *user_name;
char *user_primary_email;
const char **user_other_email;
* These default configuration settings are determined as
* follows:
*
- * database_path: $HOME/mail
+ * database_path: $MAILDIR, otherwise $HOME/mail
*
* user_name: $NAME variable if set, otherwise
* read from /etc/passwd
int file_had_user_group;
int file_had_maildir_group;
int file_had_search_group;
+ int file_had_crypto_group;
notmuch_config_t *config = talloc (ctx, notmuch_config_t);
if (config == NULL) {
config->maildir_synchronize_flags = TRUE;
config->search_exclude_tags = NULL;
config->search_exclude_tags_length = 0;
+ config->crypto_gpg_path = NULL;
if (! g_key_file_load_from_file (config->key_file,
config->filename,
G_KEY_FILE_KEEP_COMMENTS,
&error))
{
- /* If create_new is true, then the caller is prepared for a
- * default configuration file in the case of FILE NOT
- * FOUND. Otherwise, any read failure is an error.
- */
- if (create_new &&
- error->domain == G_FILE_ERROR &&
- error->code == G_FILE_ERROR_NOENT)
- {
- g_error_free (error);
- config->is_new = TRUE;
+ if (error->domain == G_FILE_ERROR && error->code == G_FILE_ERROR_NOENT) {
+ /* If create_new is true, then the caller is prepared for a
+ * default configuration file in the case of FILE NOT
+ * FOUND.
+ */
+ if (create_new) {
+ g_error_free (error);
+ config->is_new = TRUE;
+ } else {
+ fprintf (stderr, "Configuration file %s not found.\n"
+ "Try running 'notmuch setup' to create a configuration.\n",
+ config->filename);
+ talloc_free (config);
+ g_error_free (error);
+ return NULL;
+ }
}
else
{
file_had_user_group = g_key_file_has_group (config->key_file, "user");
file_had_maildir_group = g_key_file_has_group (config->key_file, "maildir");
file_had_search_group = g_key_file_has_group (config->key_file, "search");
-
+ file_had_crypto_group = g_key_file_has_group (config->key_file, "crypto");
if (notmuch_config_get_database_path (config) == NULL) {
- char *path = talloc_asprintf (config, "%s/mail",
- getenv ("HOME"));
+ char *path = getenv ("MAILDIR");
+ if (path)
+ path = talloc_strdup (config, path);
+ else
+ path = talloc_asprintf (config, "%s/mail",
+ getenv ("HOME"));
notmuch_config_set_database_path (config, path);
talloc_free (path);
}
if (notmuch_config_get_user_name (config) == NULL) {
char *name = getenv ("NAME");
- if (! name)
+ if (name)
+ name = talloc_strdup (config, name);
+ else
name = get_name_from_passwd_file (config);
notmuch_config_set_user_name (config, name);
talloc_free (name);
g_error_free (error);
}
+ if (notmuch_config_get_crypto_gpg_path (config) == NULL) {
+ notmuch_config_set_crypto_gpg_path (config, "gpg");
+ }
+
/* 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. */
g_key_file_set_comment (config->key_file, "search", NULL,
search_config_comment, NULL);
+ if (! file_had_crypto_group)
+ g_key_file_set_comment (config->key_file, "crypto", NULL,
+ crypto_config_comment, NULL);
+
return config;
}
&(config->search_exclude_tags));
}
+const char *
+notmuch_config_get_crypto_gpg_path (notmuch_config_t *config)
+{
+ return _config_get (config, &config->crypto_gpg_path, "crypto", "gpg_path");
+}
+
+void
+notmuch_config_set_crypto_gpg_path (notmuch_config_t *config,
+ const char *gpg_path)
+{
+ _config_set (config, &config->crypto_gpg_path, "crypto", "gpg_path", gpg_path);
+}
+
+
/* 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.
notmuch_config_command (notmuch_config_t *config, int argc, char *argv[])
{
int ret;
+ int opt_index;
+
+ opt_index = notmuch_minimal_options ("config", argc, argv);
+ if (opt_index < 0)
+ return EXIT_FAILURE;
+
+ if (notmuch_requested_db_uuid)
+ fprintf (stderr, "Warning: ignoring --uuid=%s\n",
+ notmuch_requested_db_uuid);
- argc--; argv++; /* skip subcommand argument */
+ /* skip at least subcommand argument */
+ argc-= opt_index;
+ argv+= opt_index;
if (argc < 1) {
fprintf (stderr, "Error: notmuch config requires at least one argument.\n");