EmacsLispのファイルパス連結

EmacsLispでパスを連結する方法


別に

(concat "/home" "/" "homuhomu")


とかでも事足りてしまうんだけどやっぱり納得いかんよね。


file-name-as-directoryを使いましょう。
後ろに/を付けてくれる。

ELISP> (file-name-as-directory "/home")
"/home/"
ELISP> (file-name-as-directory "/home/")
"/home/"


これ使えばこうなる。

(concat (filename-as-directory "/home") "homuhomu")


こうすればなお便利ね

(defun my-file-path-join (&rest paths)
  (reduce #'(lambda (x y) (concat (file-name-as-directory x) y)) paths))

ELISP> (my-file-path-join "/home" "homu" "homu" "homu" "homu")
"/home/homu/homu/homu/homu"