Emacs
Lispプログラムが特定の用途のために標準的なファイル名を指定することが必要な場合があります。典型的にはカレントユーザーによって指定された設定データを保持する場合が該当します。そのようなファイルは、通常はuser-emacs-directory
で指定されるディレクトリーに配置されて、
デフォルトでは通常は~/.config/emacs/か~/.emacs.d/です(How
Emacs Finds Your Init File in The GNU Emacs
Manualを参照)。たとえばabbrev(abbreviation:
省略形)の定義は、デフォルトでは~/.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)
ファイル名の標準化のための低レベル関数はconvert-standard-filename
で、これはサブルーチンとしてlocate-user-emacs-file
により使用されます。
この関数はfilenameにもとづいたカレントオペレーティングシステムの慣習に適合するファイル名をリターンする。
GNUや他のPOSIX準拠システムでは単にfilenameをリターンする。その他のオペレーティングシステムではシステム固有のファイル名規約にしたがうだろう。たとえばMS-DOSでは、この関数はMS-DOSファイル名制限にしたがうように先頭の‘.’を‘_’に変換したり、‘.’の後続の文字を3文字に切り詰める等、さまざまな変更を行う。
この関数でGNUとUnixシステムの慣習に適合する名前を指定して、それをconvert-standard-filename
に渡すのが推奨される使用方法である。