Next: File Name Expansion, Previous: Relative File Names, Up: File Names [Contents][Index]
ディレクトリー名(directory name)とは、ディレクトリーの名前のことです。ディレクトリーは実際にはファイルの一種なので、ファイル名をもちます。これはディレクトリー名と関連がありますが、同一ではありません(これは、Unixの通常の用語とは異なる)。同じ実体にたいするこれら2つの異なる名前は、構文的な変換により関連付けられます。GNUおよびUnixシステムでは、ことは単純です。ディレクトリー名はスラッシュで終わり、ファイルとしてのディレクトリーの名前には、そのスラッシュがありません。MS-DOSでは、この関連付けはより複雑です。
ディレクトリー名と、ファイルとしてのディレクトリーの名前の違いは、些細ですが重要です。Emacsの変数、または関数の引数を記述する際、それがディレクトリー名であるとしており、ディレクトリーのファイル名は許されません。file-name-directory
が文字列をリターンするときは、常にディレクトリー名です。
以下の2つの関数は、ディレクトリー名とファイル名の間で変換を行います。これらの関数は、‘$HOME’のような環境変数や、‘~’、‘.’、‘..’などの構文にたいして、特別なことは何も行いません。
この関数は、オペレーティングシステムがディレクトリーの名前と解釈する形式で、filenameを表す文字列をリターンする。ほとんどのシステムでは、(もし終端にそれがなければ)これは文字列にスラッシュを追加することを意味する。
(file-name-as-directory "~rms/lewis") ⇒ "~rms/lewis/"
この関数は、オペレーティングシステムがファイルの名前と解釈する形式で、dirnameを表す文字列をリターンする。ほとんどのシステムでは、これは文字列から最後のスラッシュ(またはバックスラッシュ)を削除することを意味する。
(directory-file-name "~lewis/") ⇒ "~lewis"
ディレクトリーにたいしては、concat
を使用して相対ファイルと組み合わせることができます:
(concat dirname relfile)
これを行う前に、ファイル名が相対的であるか確認してください。絶対ファイル名を使用した場合、結果は構文的に不正になるか、間違ったファイルを参照する可能性があります。
ディレクトリーファイル名作成にこのような組み合わせを使用したい場合は、最初にfile-name-as-directory
を使用して、それをディレクトリー名に変換しなければなりません:
(concat (file-name-as-directory dirfile) relfile)
以下のような、手動によるスラッシュの結合を試みてはなりません
;;; 間違い!
(concat dirfile "/" relfile)
なぜなら、これには可搬性がないからです。常にfile-name-as-directory
を使用してください。
ディレクトリー名をディレクトリーの省略名に変換するには、以下の関数を使用します:
この関数は、filenameの省略された形式をリターンする。これはdirectory-abbrev-alist
(see File Aliases in The GNU Emacs
Manual)で指定される省略形を適用した後、引数のファイル名がユーザーのホームディレクトリー、またはそのサブディレクトリーにある場合は、それを‘~’に置き換える。ホームディレクトリーがルートディレクトリーの場合、多くのシステムでは結果が短縮されないので、‘~’で置き換えない。
これは名前の一部であるような省略形さえも認識するので、ディレクトリー名とファイル名にも使用できる。