paths are presumed relative to `$HOME` for items in section
**database**.
-**database.path**
+database.path
Notmuch will store its database here, (in
sub-directory named ``.notmuch`` if **database.mail\_root**
is unset).
Default: see :ref:`database`
-**database.mail_root**
+database.mail_root
The top-level directory where your mail currently exists and to
where mail will be delivered in the future. Files should be
individual email messages.
Default: For compatibility with older configurations, the value of
database.path is used if **database.mail\_root** is unset.
-**database.backup_dir**
+database.backup_dir
Directory to store tag dumps when upgrading database.
History: this configuration value was introduced in notmuch 0.32.
Default: A sibling directory of the Xapian database called
`backups`.
-**database.hook_dir**
+database.hook_dir
Directory containing hooks run by notmuch commands. See
:any:`notmuch-hooks(5)`.
Default: See HOOKS, below.
-**database.autocommit**
+database.autocommit
How often to commit transactions to disk. `0` means wait until
command completes, otherwise an integer `n` specifies to commit to
History: this configuration value was introduced in notmuch 0.33.
-**user.name**
+user.name
Your full name.
Default: ``$NAME`` variable if set, otherwise read from
``/etc/passwd``.
-**user.primary\_email**
+user.primary\_email
Your primary email address.
Default: ``$EMAIL`` variable if set, otherwise constructed from
the username and hostname of the current machine.
-**user.other\_email**
+user.other\_email
A list of other email addresses at which you receive email.
Default: not set.
-**new.tags**
+new.tags
A list of tags that will be added to all messages incorporated by
**notmuch new**.
Default: ``unread;inbox``.
-**new.ignore**
+new.ignore
A list to specify files and directories that will not be searched
for messages by :any:`notmuch-new(1)`. Each entry in the list is either:
Default: empty list.
-**search.exclude\_tags**
+search.exclude\_tags
A list of tags that will be excluded from search results by
default. Using an excluded tag in a query will override that
exclusion.
Default: empty list. Note that :any:`notmuch-setup(1)` puts
``deleted;spam`` here when creating new configuration file.
-**maildir.synchronize\_flags**
+maildir.synchronize\_flags
If true, then the following maildir flags (in message filenames)
will be synchronized with the corresponding notmuch tags:
Default: ``true``.
-**index.decrypt**
+index.decrypt
Policy for decrypting encrypted messages during indexing. Must be
one of: ``false``, ``auto``, ``nostash``, or ``true``.
Default: ``auto``.
-**index.header.<prefix>**
+index.header.<prefix>
Define the query prefix <prefix>, based on a mail header. For
example ``index.header.List=List-Id`` will add a probabilistic
prefix ``List:`` that searches the ``List-Id`` field. User
supported. See :any:`notmuch-search-terms(7)` for a list of existing
prefixes, and an explanation of probabilistic prefixes.
-**built_with.<name>**
+built_with.<name>
Compile time feature <name>. Current possibilities include
"retry_lock" (configure option, included by default).
(since notmuch 0.30, "compact" and "field_processor" are
always included.)
-**query.<name>**
+query.<name>
Expansion for named query called <name>. See
:any:`notmuch-search-terms(7)` for more information about named
queries.
-**squery.<name>**
+squery.<name>
Expansion for named query called <name>, using s-expression syntax. See
:any:`notmuch-sexp-queries(7)` for more information about s-expression
queries.
FILES
=====
+ .. _config_search:
+
CONFIGURATION
-------------
/*
* Configuration options for xapian database fields */
-typedef enum notmuch_field_flags {
+typedef enum {
NOTMUCH_FIELD_NO_FLAGS = 0,
NOTMUCH_FIELD_EXTERNAL = 1 << 0,
NOTMUCH_FIELD_PROBABILISTIC = 1 << 1,
Xapian::QueryParser::FLAG_WILDCARD | \
Xapian::QueryParser::FLAG_PURE_NOT)
+ /*
+ * Which parameters were explicit when the database was opened */
+ typedef enum {
+ NOTMUCH_PARAM_NONE = 0,
+ NOTMUCH_PARAM_DATABASE = 1 << 0,
+ NOTMUCH_PARAM_CONFIG = 1 << 1,
+ NOTMUCH_PARAM_PROFILE = 1 << 2,
+ } notmuch_open_param_t;
+
+ /*
+ * define bitwise operators to hide casts */
+
+ inline notmuch_open_param_t
+ operator| (notmuch_open_param_t a, notmuch_open_param_t b)
+ {
+ return static_cast<notmuch_open_param_t>(
+ static_cast<unsigned>(a) | static_cast<unsigned>(b));
+ }
+
+ inline notmuch_open_param_t&
+ operator|= (notmuch_open_param_t &a, notmuch_open_param_t b)
+ {
+ a = a | b;
+ return a;
+ }
+
+ inline notmuch_open_param_t
+ operator& (notmuch_open_param_t a, notmuch_open_param_t b)
+ {
+ return static_cast<notmuch_open_param_t>(
+ static_cast<unsigned>(a) & static_cast<unsigned>(b));
+ }
+
struct _notmuch_database {
bool exception_reported;
/* Cached and possibly overridden configuration */
notmuch_string_map_t *config;
+
+ /* Track what parameters were specified when opening */
+ notmuch_open_param_t params;
};
/* Prior to database version 3, features were implied by the database
char *status_string = NULL;
notmuch_status_t status;
- status = notmuch_database_open_verbose (path, mode, database,
- &status_string);
-
+ status = notmuch_database_open_with_config (path, mode, "", NULL,
+ database, &status_string);
if (status_string) {
fputs (status_string, stderr);
free (status_string);
}
static notmuch_database_t *
- _alloc_notmuch ()
+ _alloc_notmuch (const char *database_path, const char *config_path, const char *profile)
{
notmuch_database_t *notmuch;
notmuch->transaction_count = 0;
notmuch->transaction_threshold = 0;
notmuch->view = 1;
+
+ notmuch->params = NOTMUCH_PARAM_NONE;
+ if (database_path)
+ notmuch->params |= NOTMUCH_PARAM_DATABASE;
+ if (config_path)
+ notmuch->params |= NOTMUCH_PARAM_CONFIG;
+ if (profile)
+ notmuch->params |= NOTMUCH_PARAM_PROFILE;
+
return notmuch;
}
_notmuch_init ();
- notmuch = _alloc_notmuch ();
+ notmuch = _alloc_notmuch (database_path, config_path, profile);
if (! notmuch) {
status = NOTMUCH_STATUS_OUT_OF_MEMORY;
goto DONE;
_notmuch_init ();
- notmuch = _alloc_notmuch ();
+ notmuch = _alloc_notmuch (database_path, config_path, profile);
if (! notmuch) {
status = NOTMUCH_STATUS_OUT_OF_MEMORY;
goto DONE;
_notmuch_init ();
- notmuch = _alloc_notmuch ();
+ notmuch = _alloc_notmuch (database_path, config_path, profile);
if (! notmuch) {
status = NOTMUCH_STATUS_OUT_OF_MEMORY;
goto DONE;
built_with.compact=something
built_with.field_processor=something
built_with.retry_lock=something
-built_with.sexpr_query=something
+built_with.sexp_queries=something
database.autocommit=8000
database.backup_dir
database.hook_dir
output2=$(notmuch --config='' config get ${key})
notmuch config set ${key}
test_expect_equal "${output}+${output2}" "${value}+"
- ;;
+ ;&
+ split)
+ test_begin_subtest "'to' header does not crash (python-cffi) ($config)"
+ echo 'notmuch@notmuchmail.org' > EXPECTED
+ test_python <<EOF
+ from notmuch2 import Database
+ db=Database(config=Database.CONFIG.SEARCH)
+ m=db.find('20091117232137.GA7669@griffis1.net')
+ to=m.header('To')
+ print(to)
+ EOF
+ test_expect_equal_file EXPECTED OUTPUT
+ ;& # fall through
+ esac
+
+ case $config in
+ split|XDG*)
esac
restore_config
rm -rf home/.local