In addition to the existing implicit syntax of non-absolute paths being interpreted as relative to users' $HOME directories, also allow the explicit syntax "~/some/relative/path". This well known variant improves readability of configuration files. Signed-off-by: Ralph Seichter <ralph@seichter.de> --- lib/config.cc | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/lib/config.cc b/lib/config.cc index acb397ec..2537b451 100644 --- a/lib/config.cc +++ b/lib/config.cc @@ -400,15 +400,21 @@ notmuch_config_pairs_destroy (notmuch_config_pairs_t *pairs) static char * _expand_path (void *ctx, const char *key, const char *val) { - char *expanded_val; + char *expanded_val = NULL; - if ((strcmp (key, "database.path") == 0 || + if (strcmp (key, "database.path") == 0 || strcmp (key, "database.mail_root") == 0 || strcmp (key, "database.hook_dir") == 0 || - strcmp (key, "database.backup_path") == 0 ) && - val[0] != '/') - expanded_val = talloc_asprintf (ctx, "%s/%s", getenv ("HOME"), val); - else + strcmp (key, "database.backup_path") == 0) { + if (val[0] == '~') + /* Explicit syntax for "~/some/relative/path" */ + expanded_val = talloc_asprintf (ctx, "%s%s", getenv ("HOME"), &val[1]); + else if (val[0] != '/') + /* Implicit syntax for "some/relative/path" */ + expanded_val = talloc_asprintf (ctx, "%s/%s", getenv ("HOME"), val); + } + if (! expanded_val) + /* Catchall, no special expansion */ expanded_val = talloc_strdup (ctx, val); return expanded_val; -- 2.47.0 _______________________________________________ notmuch mailing list -- notmuch@notmuchmail.org To unsubscribe send an email to notmuch-leave@notmuchmail.org