I want to be able to translate a certain directory in my homedirectory on any OS to the actual absolute path on that OS e.g. (make-pathname :directory '(:absolute :home "directoryiwant")
should be translated to "/home/weirdusername/directoryiwant" on a unixlike system.
What would be the function of choice to do that? As
(directory-namestring
(make-pathname :directory '(:absolute :home "directoryiwant"))
> "~/"
does not actually do the deal.
If you need something relative to your home directory, the Common Lisp functions user-homedir-pathname and merge-pathnames can help you:
CL-USER> (merge-pathnames
(make-pathname
:directory '(:relative "directoryyouwant"))
(user-homedir-pathname))
#P"/home/username/directoryyouwant/"
The namestring functions (e.g., namestring, directory-namestring) work on this pathname as expected:
CL-USER> (directory-namestring
(merge-pathnames
(make-pathname
:directory '(:relative "directoryyouwant"))
(user-homedir-pathname)))
"/home/username/directoryyouwant/"
CL-USER > (make-pathname :directory (append (pathname-directory
(user-homedir-pathname))
(list "directoryiwant"))
:defaults (user-homedir-pathname))
#P"/Users/joswig/directoryiwant/"
The function NAMESTRING
returns it as a string.
CL-USER > (namestring #P"/Users/joswig/directoryiwant/")
"/Users/joswig/directoryiwant/"
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With