Add "HI" archive post
This commit is contained in:
parent
350d346625
commit
4faee6984f
1 changed files with 68 additions and 0 deletions
68
posts/HI.mdwn
Normal file
68
posts/HI.mdwn
Normal file
|
@ -0,0 +1,68 @@
|
||||||
|
|
||||||
|
<p>Since I have nothing better to say and still want to say something,
|
||||||
|
here is some nonsense:
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
I've been having an issue with loading configuration and data files.
|
||||||
|
The problem is that I like the <a href="http://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html">XDG Base Directory Specification</a> and am
|
||||||
|
trying to write my software in such a way that it supports both this
|
||||||
|
and the usual(/old) folder in <code>$HOME</code> approach.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
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 <code>$HOME</code> 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.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
I feel that I may have it now, though…
|
||||||
|
</p>
|
||||||
|
|
||||||
|
|
||||||
|
[[!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"))
|
||||||
|
"""]]
|
||||||
|
|
||||||
|
<p>
|
||||||
|
The <code>stored-file</code> function first assumes that we will want to grab it
|
||||||
|
from the directory in <code>$HOME</code>, when it can't verify that <i>that</i> particular
|
||||||
|
file exists and knows that the XDG variable isn't empty it will
|
||||||
|
instead return a reference to the file in that directory.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
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 <code>$HOME</code> 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.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
[[!meta date="2012-10-03 02:35:41"]]
|
||||||
|
[[!tag scheme xdg coding]]
|
Loading…
Reference in a new issue