Я хотел объединить несколько вложенных каталогов в путь.Первоначально я использовал несколько expand-file-name
вызовов, например:
(expand-file-name "b" (expand-file-name "a" "/tmp"))
"/tmp/a/b"
Однако это довольно многословно и читает в обратном направлении.
Вместо этого я написал функцию, которая действует как Python's os.path.join
:
(defun joindirs (root &rest dirs)
"Joins a series of directories together, like Python's os.path.join,
(dotemacs-joindirs \"/tmp\" \"a\" \"b\" \"c\") => /tmp/a/b/c"
(if (not dirs)
root
(apply 'joindirs
(expand-file-name (car dirs) root)
(cdr dirs))))
Работает так:
(joindirs "/tmp" "a" "b")
"/tmp/a/b"
(joindirs "~" ".emacs.d" "src")
"/Users/dbr/.emacs.d/src"
(joindirs "~" ".emacs.d" "~tmp")
"/Users/dbr/.emacs.d/~tmp"