相対パスがある場合、読み込んでいる elisp ファイルがある場所から絶対パスに変換するにはどうすればよいですか。つまり、読み込んでいる elisp ファイルがあり、相対パスがあり、絶対パスが必要です。
7455 次
3 に答える
25
'file-truename
ドキュメントから:
FILENAME の真の名前を返します。これは絶対でなければなりません。ファイル名の真の名前は、ファイルのレベルとそれを含むディレクトリのレベルの両方でシンボリック リンクをたどって、どのレベルにもリンクがなくなるまで見つけます。
提案されたもう 1 つのソリューション ('expand-file-name) では、シンボリック リンクがそのまま残されますが、これは必要な場合とそうでない場合があります。'file-truename は 'expand-file-name を使用するため、どちらもバッファーの相対パス default-directory を決定します (これはあなたが求めているものです)。
別の回答へのコメント/質問を見た後、問題は、デフォルトディレクトリが「ロード」を呼び出しているバッファのものであることです.
幸いなことに、ロードされるファイルへのパスを格納する「ロード セット」という変数があります。次のコード スニペットを試してください。
;; this is in the file being loaded
(let ((default-directory (file-name-directory load-file-name)))
(file-truename "blih"))
于 2008-11-15T05:06:50.860 に答える
13
私は最終的に使用しました:
(expand-file-name "relative/path" (file-name-directory load-file-name))
于 2008-11-15T02:41:56.127 に答える
9
このexpand-file-name
関数を使用して、相対ファイル名またはパスを絶対ファイル名/パスに変換できます。追加情報については、こちらをご覧ください。
于 2008-11-15T02:03:32.570 に答える