Next: File Attributes, Previous: Kinds of Files, Up: Information about Files [Contents][Index]
ファイルの実名(truename)とは、全階層においてシンボリックリンクを残らずフォローした後に名前コンポーネントに出現する‘.’と‘..’を除いて簡略化した名前のことです。これはそのファイルにたいする正規名(canonical name)の一種です。ファイルが常に一意な実名をもつ訳ではありません。あるファイルにたいする異なる実名の個数は、そのファイルにたいするハードリンクの個数と同じです。しかし実名はシンボリックリンクによる名前の変動を解消するのに有用です。
この関数はファイルfilenameの実名をリターンする。引数が絶対ファイル名でなければ、この関数は最初にdefault-directory
にたいしてこれを展開する。
この関数は環境変数を展開しない。これを行うのはsubstitute-in-file-name
のみ。Definition of substitute-in-file-nameを参照のこと。
名前コンポーネントに出現する‘..’に先行するシンボリックリンクをフォローする必要があるなら、直接間接を問わずexpand-file-name
を呼び出す前にfile-truename
を呼び出すこと。そうしないと‘..’の直前にある名前コンポーネントは、file-truename
が呼び出される前に簡略化によって取り除かれてしまう。expand-file-name
呼び出しの必要を無くすため、file-truename
はexpand-file-name
が行うのと同じ方法で‘~’を扱う。Functions that Expand Filenamesを参照のこと。
この関数はfilenameで始まるシンボリックリンクを、シンボリックリンクではない名前のファイル名までフォローして、そのファイル名をリターンする。この関数は親ディレクトリーの階層にあるシンボリックリンクをフォローしない。
limitに数を指定するとその数のリンクを追跡した後、この関数はたとえそれが依然としてシンボリックリンクであってもそれをリターンする。
file-chase-links
とfile-truename
の違いを説明するために、/usr/fooがディレクトリー/home/fooへのシンボリックリンク、/home/foo/helloが(少なくともシンボリックリンクではない)通常ファイル、または存在しないファイルだとします。この場合には以下のようになります:
(file-chase-links "/usr/foo/hello") ;; 親ディレクトリーのリンクはフォローしない ⇒ "/usr/foo/hello" (file-truename "/usr/foo/hello") ;; /homeはシンボリックリンクではないと仮定 ⇒ "/home/foo/hello"
この関数はファイルfile1とfile2の名前が同じファイルならt
をリターンする。これはリモートファイル名も適切な方法で処理することを除いて実名の比較と似ている。file1かfile2が存在しなければリターン値は不定。
この関数は、fileがディレクトリーdir内のファイルかサブディレクトリーならt
をリターンする。またfileとdirが同じディレクトリーの場合もt
をリターンする。この関数は2つのディレクトリーの実名を比較する。dirが既存のディレクトリーの名前でなければリターン値はnil
。
この関数は与えられたfileにたいしてVCバックエンドが責任を負うかどうかを判断する。たとえばemacs.cがGitでトラック(track:
追跡)されていれば(vc-responsible-backend "emacs.c")
は‘Git’をリターンする。fileがシンボリックリンクならvc-responsible-backend
はシンボリックリンクを解決せずに、シンボリックリンクにたいするバックエンドが報告されることに注意。fileが参照するファイルのバックエンドVCを取得するには、file-chase-links
のようなシンボリックリンク解決用の関数でfileをラップすること。
(vc-responsible-backend (file-chase-links "emacs.c"))