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

26.9.2 絶対ファイル名と相対ファイル名

ファイルシステム内のすべてのディレクトリは、ルートディレクトリを起点とするツリー構造を形成しています。ファイル名は、ツリーのルートから始まるすべてのディレクトリ名を指定することができ、この場合、絶対ファイル名と呼ばれます。あるいは、デフォルトディレクトリを基準としたツリー内でのファイルの位置を指定することもでき、この場合、相対ファイル名と呼ばれます。GNUやその他のPOSIX準拠システムでは、先頭の ‘~’ が展開された後、絶対ファイル名は ‘/’ で始まり(abbreviate-file-name を参照)、相対ファイル名はそうではありません。MS-DOSおよびMS-Windowsでは、絶対ファイル名はスラッシュまたはバックスラッシュ、あるいはドライブ指定 ‘x:/’ で始まり、ここで x は ドライブレター を表します。

関数: file-name-absolute-p filename

この関数は、ファイル filename が絶対ファイル名である場合は t を、そうでない場合は nil を返します。ファイル名の最初の構成要素が ‘~’ であるか、または ‘~user’ (ここで user は有効なログイン名)である場合、そのファイル名は絶対ファイル名とみなされます。以下の例では、‘rms’ という名前のユーザーは存在するが、‘nosuchuser’ という名前のユーザーは存在しないものとします。

(file-name-absolute-p "~rms/foo")
     ⇒ t
(file-name-absolute-p "~nosuchuser/foo")
     ⇒ nil
(file-name-absolute-p "rms/foo")
     ⇒ nil
(file-name-absolute-p "/user/rms/foo")
     ⇒ t

相対パスである可能性のあるファイル名が与えられた場合、先頭の ‘~’ を展開し、その結果を expand-file-name を用いて絶対パスに変換できます(ファイル名を展開する関数を参照)。この関数は、絶対ファイル名を相対ファイル名に変換します:

関数: file-relative-name filename &optional directory

この関数は、結果が directory(絶対ディレクトリ名またはディレクトリファイル名)を基準として解釈されることを前提に、filename と等価な相対名を返そうとします。directory が省略された場合や nil が指定された場合は、現在のバッファのデフォルトディレクトリが使用されます。

On some operating systems, an absolute file name begins with a device name. On such systems, filename has no relative equivalent based on directory if they start with two different device names. In this case, file-relative-name returns filename in absolute form.

(file-relative-name "/foo/bar" "/foo/")
     ⇒ "bar"
(file-relative-name "/foo/bar" "/hack/")
     ⇒ "../foo/bar"

空文字列のファイル名は、現在のバッファのデフォルトディレクトリを表します。