[Remind-Fans] [PATCH] add support of XDG_CONFIG_HOME for rem default file

Rolf Morel rolfmorel at gmail.com
Tue Sep 10 09:24:17 EDT 2013


Add support for 'rem' for the XDG Base Directory Specification [1],
specifically the environment variable XDG_CONFIG_HOME as default file.

XDG_CONFIG_HOME gives us a alternative to littering our home directory
with dotfiles. Instead all these user configuration files are stored
in a user specified or in the xdg default, "$HOME/.config", directory.

After convention I have used the program name, 'remind', as subfolder
and the filename, 'reminders', is the dotfile filename minus the
leading dot.

This gives us either "$XDG_CONFIG_HOME/remind/reminders" when
XDG_CONFIG_HOME is set, or "$HOME/.config/remind/reminders" when it is
not.

If this file does not exist or is not readable it defaults back to the
current default: "$HOME/.reminders". This is fully backwards
compatible.

[1]:
http://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html

Signed-off-by: Rolf Morel <rolfmorel at gmail.com>
---
 src/init.c | 19 ++++++++++++++++++-
 1 file changed, 18 insertions(+), 1 deletion(-)

diff --git a/src/init.c b/src/init.c
index 35256ce..dfb0c2c 100644
--- a/src/init.c
+++ b/src/init.c
@@ -101,7 +101,7 @@ static DynamicBuffer default_filename_buf;
 /***************************************************************/
 static char const *DefaultFilename(void)
 {
-    char const *s;
+    char const *s, *xdg;
 
     DBufInit(&default_filename_buf);
 
@@ -115,6 +115,23 @@ static char const *DefaultFilename(void)
 	fprintf(stderr, "HOME environment variable not set.  Unable to determine reminder file.\n");
 	exit(1);
     }
+
+    xdg = getenv("XDG_CONFIG_HOME");
+    if (xdg)
+	DBufPuts(&default_filename_buf, xdg);
+    else {
+	/* Use xdg default "$HOME/.config". */
+	DBufPuts(&default_filename_buf, s);
+	DBufPuts(&default_filename_buf, "/.config");
+    }
+
+    DBufPuts(&default_filename_buf, "/remind/reminders");
+
+    if (access(DBufValue(&default_filename_buf), R_OK) == 0)
+	return DBufValue(&default_filename_buf);
+
+    DBufFree(&default_filename_buf);
+
     DBufPuts(&default_filename_buf, s);
     DBufPuts(&default_filename_buf, "/.reminders");
     return DBufValue(&default_filename_buf);
-- 
1.8.4



More information about the Remind-fans mailing list