Emacs
Lispプログラムでは、特定の用途――通常は現在のユーザーが指定した設定データを保持するため――に、標準的なファイル名を指定する必要がある場合があります。通常、こうしたファイルはuser-emacs-directoryで指定されたディレクトリに配置されるべきであり、デフォルトでは通常~/.config/emacs/または~/.emacs.d/となります(The GNU Emacs
ManualのHow
Emacs Finds Your Init Fileを参照)。例えば、略語の定義はデフォルトで~/.config/emacs/abbrev_defsまたは~/.emacs.d/abbrev_defsに保存されます。このようなファイル名を指定する最も簡単な方法は、関数locate-user-emacs-fileを使用することです。
この関数は、Emacs固有の設定ファイルまたはデータファイルの絶対ファイル名を返します。引数 base-name には相対ファイル名を指定します。戻り値は、user-emacs-directory
で指定されたディレクトリにあるファイルの絶対ファイル名であり、そのディレクトリが存在しない場合は、この関数が作成します。
オプション引数 old-name が nil
以外の場合、ユーザーのホームディレクトリ ~/old-name 内のファイルを指定します。そのようなファイルが存在する場合、戻り値は base-name で指定されたファイルではなく、そのファイルの絶対パスとなります。この引数は、Emacs
パッケージが後方互換性を確保するために使用することを想定しています。例えば、user-emacs-directory が導入される前は、abbrev ファイルは ~/.abbrev_defs に配置されていました。以下は abbrev-file-name の定義です:
(defcustom abbrev-file-name (locate-user-emacs-file "abbrev_defs" ".abbrev_defs") "Default name of file from which to read abbrevs." ... :type 'file)
locate-user-emacs-file
がサブルーチンとして利用している、ファイル名を正規化するための下位レベル関数が convert-standard-filename です。
この関数は、現在のオペレーティングシステムの規約に準拠した filename に基づくファイル名を返します。
GNUやその他のPOSIX準拠システムでは、これは単に filename を返します。その他のオペレーティングシステムでは、システム固有のファイル名規約が適用される場合があります。例えばMS-DOSでは、この関数はMS-DOSのファイル名制限を適用するために、先頭の ‘.’ を ‘_’ に変換したり、‘.’ 以降を3文字に切り詰めたりするなど、さまざまな変更を行います。
この関数の推奨される使い方は、GNUおよびUnixシステムの慣習に沿った名前を指定し、それをconvert-standard-filenameに渡すことです。