diff --git a/posts/HI.mdwn b/posts/HI.mdwn new file mode 100644 index 0000000..bbe4e31 --- /dev/null +++ b/posts/HI.mdwn @@ -0,0 +1,68 @@ + +
Since I have nothing better to say and still want to say something, +here is some nonsense: +
+
+I've been having an issue with loading configuration and data files.
+The problem is that I like the XDG Base Directory Specification and am
+trying to write my software in such a way that it supports both this
+and the usual(/old) folder in $HOME
approach.
+
+This doesn't sound all that difficult, nor is it, but still I was
+making a lot of mistakes with it, because I don't just want to support
+something, I don't want to force whomever (nobody but me, really) uses
+my software to be forced in to anything. So first I need to check if
+the XDG environment variables exist, if they do then I have to see if
+the file I want to load exists in that directory, if it doesn't and
+one does exist in $HOME
I want that one, but if the one in home
+doesn't exist either, I want the one in the XDG folder again. It gets
+messy.
+
+I feel that I may have it now, though… +
+ + +[[!format el """ +(define (stored-file xdg-env file) + "Try to get FILE stored either in XDG-ENV or the home directory." + (let ((xdg (getenv xdg-env)) + (stored-file (string-append + (getenv "HOME") "/.project/" file))) + (unless (or (file-exists? stored-file) (not xdg)) + (set! stored-file (string-append xdg "/project/" file))) + stored-file)) + +(define (config-file file) + (stored-file "XDG_CONFIG_HOME")) + +(define (data-file file) + (stored-file "XDG_DATA_HOME")) + +(define (rc-file) + (config-file "rc.scm")) + +(define (list-file) + (data-file "list.scm")) +"""]] + +
+The stored-file
function first assumes that we will want to grab it
+from the directory in $HOME
, when it can't verify that that particular
+file exists and knows that the XDG variable isn't empty it will
+instead return a reference to the file in that directory.
+
+All the other functions are just there to make it clear and convenient
+to load these files and not specifically necessary. The good part of
+this function, in my opinion, is that is separates configuration and
+data files from each other in code, but will just grab it all from the
+same directory when working with the $HOME
directory. This, of
+course, can create naming conflicts, but if you have naming conflicts
+this way you might get confused by what you're doing here or there
+anyway.
+