GNU Emacs 32.0.50 (9008bf64c3) のマニュアルを PLaMo 翻訳で機械翻訳したものです。誤訳を含むことがあります。原文: https://www.gnu.org/software/emacs/manual/html_node/elisp/Truenames.html ・ emacs-doc.conao3.com

26.6.3 Truenames

ファイルのtruenameとは、すべての階層でシンボリックリンクを辿り、リンクがなくなるまで進んだ後、名前の構成要素として現れる‘.’や‘..’を簡略化して取り除いた名前のことである。これにより、ファイルの一種の正準名が得られる。ファイルが常に一意のtruenameを持つとは限らず、ファイルが持つ異なるtruenameの数は、そのファイルへのハードリンクの数に等しい。しかし、truenameは名前の変動要因となるシンボリックリンクを排除できるため、有用である。

関数: file-truename filename

この関数は、ファイル filename の真名を返します。引数が絶対ファイル名でない場合、この関数はまずそれを default-directory に照らして展開します。

この関数は環境変数を展開しません。展開を行うのは substitute-in-file-name のみです。ファイル名内の置換の定義を参照してください。

名前構成要素として現れる ‘..’ より前のシンボリックリンクを辿る必要がある場合は、expand-file-name への直接的または間接的な呼び出しを事前に行わずに file-truename を呼び出してください。そうでない場合は、file-truename が呼び出される前に、‘..’ の直前にあるファイル名構成要素が簡略化されます。expand-file-name への呼び出しを不要にするため、file-truename は ‘~’ を expand-file-name と同様の方法で処理します。

シンボリックリンクのリンク先にリモートファイル名の構文が含まれている場合、file-truename はそれをクォート付きで返します。ファイル名を展開する関数を参照してください。

この関数は、filename を起点として、シンボリックリンクではないファイル名が見つかるまでシンボリックリンクを辿ります。その後、そのファイル名を返します。この関数は、親ディレクトリレベルのシンボリックリンクは辿りません。

limit に数値を指定すると、その数だけリンクを辿った後、たとえそれが依然としてシンボリックリンクであっても、関数は単に現在の値を返します。

file-chase-links と file-truename の違いを説明するため、/usr/foo がディレクトリ /home/foo へのシンボリックリンクであり、/home/foo/hello が通常のファイル(あるいは少なくともシンボリックリンクではない)であるか、または存在しないと仮定します。すると、次のようになります。

(file-chase-links "/usr/foo/hello")
     ;; This does not follow the links in the parent directories.
     ⇒ "/usr/foo/hello"
(file-truename "/usr/foo/hello")
     ;; Assuming that /home is not a symbolic link.
     ⇒ "/home/foo/hello"
関数: file-equal-p file1 file2

この関数は、ファイル file1 と file2 が同一のファイルを指している場合に t を返します。これは truenames を比較するのと同様ですが、リモートファイル名も適切に処理される点が異なります。file1 または file2 が存在しない場合、戻り値は未規定となります。

関数: file-name-case-insensitive-p filename

ファイル名やその一部を文字列として比較する必要がある場合があり、その際は基盤となるファイルシステムが大文字小文字を区別しないかどうかを知ることが重要です。この関数は、ファイル filename が大文字小文字を区別しないファイルシステム上にある場合に t を返します。MS-DOS および MS-Windows では常に t を返します。Cygwin および macOS では、ファイルシステムが大文字小文字を区別する場合としない場合があり、この関数は実行時のテストによって大文字小文字の区別を判定しようとします。テストで判定がつかない場合、この関数は Cygwin では t を、macOS では nil を返します。

現在、この関数は MS-DOS、MS-Windows、Cygwin、および macOS 以外のプラットフォームでは常に nil を返します。Samba 共有や NFS マウントされた Windows ボリュームなど、マウントされたファイルシステムの大文字小文字の区別は判定しません。リモートホストでは、‘smb’ メソッドに対して t とみなします。それ以外のすべての接続メソッドについては、ランタイムテストが実行されます。

関数: vc-responsible-backend file

この関数は、指定された file に対応する VC バックエンドを特定します。例えば、emacs.c が Git で追跡されているファイルの場合、(vc-responsible-backend "emacs.c") は ‘Git’ を返します。なお、file がシンボリックリンクである場合、vc-responsible-backend はそれを解決せず、シンボリックリンクファイル自体のバックエンドが報告されます。file が参照するファイルのバックエンド VC を取得するには、file を file-chase-links のようなシンボリックリンク解決関数でラップしてください:

(vc-responsible-backend (file-chase-links "emacs.c"))