Reputation: 4184
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.
Upvotes: 4
Views: 1808
Reputation: 85883
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/"
Upvotes: 9
Reputation: 139311
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/"
Upvotes: 4