Next: , Previous: , Up: Information about Files   [Contents][Index]


26.6.3 本当の名前

ファイルの実名(truename)とは、全階層においてシンボリックリンクを残らずフォローした後に名前コンポーネントに出現する‘.’と‘..’を除いて簡略化した名前のことです。これはそのファイルにたいする正規名(canonical name)の一種です。ファイルが常に一意な実名をもつ訳ではありません。あるファイルにたいする異なる実名の個数は、そのファイルにたいするハードリンクの個数と同じです。しかし実名はシンボリックリンクによる名前の変動を解消するのに有用です。

Function: file-truename filename

この関数はファイルfilenameの実名をリターンする。引数が絶対ファイル名でなければ、この関数は最初にdefault-directoryにたいしてこれを展開する。

この関数は環境変数を展開しない。これを行うのはsubstitute-in-file-nameのみ。Definition of substitute-in-file-nameを参照のこと。

名前コンポーネントに出現する‘..’に先行するシンボリックリンクリンクをフォローする必要がある場合には直接と間接を問わず、expand-file-nameを呼び出す前にfile-truenameを呼び出すこと。そうしないと‘..’の直前にある名前コンポーネントは、file-truenameが呼び出される前の簡略化により取り除かれてしまう。expand-file-name呼び出しの必要を無くすために、file-truenameexpand-file-nameが行うのと同じ方法で‘~’を扱う。Functions that Expand Filenamesを参照のこと。

シンボリックリンクのターゲットがリモートファイル名の構文をもつ場合には、file-truenameはそれをクォートしてリターンする。Functions that Expand Filenamesを参照のこと。

Function: file-chase-links filename &optional limit

この関数はfilenameで始まるシンボリックリンクを、シンボリックリンクではない名前のファイル名までフォローして、そのファイル名をリターンする。この関数は親ディレクトリーの階層にあるシンボリックリンクをフォローしない

limitに数を指定するとその数のリンクを追跡した後、この関数はたとえそれが依然としてシンボリックリンクであってもそれをリターンする。

file-chase-linksfile-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"
Function: file-equal-p file1 file2

この関数はファイルfile1file2の名前が同じファイルならtをリターンする。これはリモートファイル名も適切な方法で処理することを除いて実名の比較と似ている。file1file2が存在しなければリターン値は不定。

Function: file-name-case-insensitive-p filename

ファイル名やその一部にたいして文字列としての比較を要する場合には、背景にあるファイルシステムが非caseセンシティブ(case-insensitive: 大文字小文字を区別しない)かどうかを知ることが重要になる。この関数はファイルfilenameが非caseセンシティブなファイルシステムにあればtをリターンする。MS-DOSとMS-Windowsでは常にtをリターンする。CygwinとmacOSでは非caseセンシティブかもしれないので、実行時テストによりcaseセンシティブ性の判定を試みる。テストで決定されなければCygwinならt、macOSならnilをリターンする。

この関数は現在のところMS-DOS、MS-Windows、Cygwin、macOS以外のプラットフォームでは常にnilをリターンする。これはSamba共有やNFSマウントされたWindowsボリュームのようにマウントされたファイルシステムのcaseセンシティブ性は検知しない。リモートホストでは‘smb’メソッドにたいしてはtとみなす。

Function: file-in-directory-p file dir

この関数は、fileがディレクトリーdir内のファイルかサブディレクトリーならtをリターンする。またfiledirが同じディレクトリーの場合もtをリターンする。この関数は2つのディレクトリーの実名を比較する。dirが既存のディレクトリーの名前でなければリターン値はnil

Function: vc-responsible-backend file

この関数は与えられた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"))