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 <ra...@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-le...@notmuchmail.org

Reply via email to