Next: Loading Non-ASCII, Previous: Load Suffixes, Up: Loading [Contents][Index]
EmacsがLispライブラリーをロードするときは、変数load-path
.<により指定されるディレクトリー内のライブラリーを検索します。
この変数の値は、load
でファイルをロードするとき検索するディレクトリーのリストです。リストの各要素は文字列(ディレクトリー名でなければなりません)、またはnil
(カレントワーキングディレクトリーを意味します)です。
Emacsは起動時にいくつかのステップによりload-path
の値をセットアップします。最初に、Emacsがコンパイルされたときのデフォルトロケーションセット(default
locations set)を使用して、load-path
を初期化します。通常これは以下のようなディレクトリーです
"/usr/local/share/emacs/version/lisp"
(以下の例では、あなたがインストールしたEmacsのインストールプレフィクスに合うように/usr/localを置き換えてください。)これらのディレクトリーには、Emacsとともにインストールされた、標準的なLispファイルが含まれます。Emacsがこれらを見つけられない場合は、正常に起動しないでしょう。
Emacsをビルドしたディレクトリーから起動した場合 −−− つまり正式にインストールされた実行形式ではないEmacsを起動した場合
— 、Emacsはビルドされたディレクトリーのソースのlispディレクトリーを使用してload-path
を初期化します。ソースとは別のディレクトリーでEmacsをビルドした場合は、ビルドしたディレクトリーのlispディレクトリーも追加します。(どちらの場合も、要素は絶対ファイル名になります。)
--no-site-lispオプションでEmacsを起動した場合を除き、load-path
の先頭に2つのさらにsite-lispを追加します。これらはローカルにインストールされたLispファイで、通常は:
"/usr/local/share/emacs/version/site-lisp"
と
"/usr/local/share/emacs/site-lisp"
の形式です。1つ目は特定のバージョンのEmacsにたいしてローカルにインストールされたものです。2つ目はインストールされたすべてのバージョンのEmacsが使用することを意図してローカルにインストールされたものです。(インストールされたものでないEmacsが実行された場合は、もし存在すればソースディレクトリーとビルドディレクトリーのsite-lispディレクトリーも追加します。これらのディレクトリーは通常、site-lispディレクトリーを含みません。)
環境変数EMACSLOADPATH
がセットされている場合は、上述の初期化プロセスが変更されます。Emacsは、この環境変数の値にもとづいてload-path
を初期化します。
EMACSLOADPATH
の構文は、PATH
で使用される構文と同様です。ディレクトリー名は‘:’(オペレーティングシステムによっては‘;’)で区切られます。
以下は、(sh
スタイルのシェルから)EMACSLOADPATH
変数をセットする例です:
export EMACSLOADPATH=/home/foo/.emacs.d/lisp:
環境変数の値内の空の要素は、(上記例のような)末尾、先頭、中間にあるかに関わらず、標準の初期化処理により決定されるload-path
のデフォルト値に置き換えられます。そのような空要素が存在しない場合には、EMACSLOADPATH
によりload-path
全体が指定されます。空要素、または標準のLispファイルを含むディレクトリーへの明示的なパスのどちらかを含めなければなりません。さもないとEmacsが関数を見つけられなくなります。(load-path
を変更する他の方法は、Emacs起動時にコマンドラインオプション-Lを使用する方法です。以下参照。)
load-path
内の各ディレクトリーにたいし、Emacsはそのディレクトリーがファイルsubdirs.elを含むか確認し、もしあればそれをロードします。subdirs.elファイルは、load-path
のディレクトリーみたいして任意のサブディレクトリーを追加するためのコードが含まれており、Emacsがビルド/インストールされたとき作成されます。サブディレクトリーと複数階層下のレベルのサブディレクトリーの両方が、直接追加されます。ただし、名前の最初が英数字でないディレクトリー、名前がRCSまたはCVSのディレクトリー、名前が.nosearchというファイルを含むディレクトリーは除外されます。
Emacsは次に、コマンドラインオプション-L(Action Arguments in The GNU Emacs Manualを参照)で指定したロードディレクトリーを追加します。もしあれば、オプションパッケージ(Packaging Basicsを参照)がインストールされた場所も追加します。
initファイル(Init Fileを参照)で、load-path
に1つ以上のディレクトリーを追加するコードを記述するのは一般的に行なわれています。たとえば:
(push "~/.emacs.d/lisp" load-path)
Emacsのダンプには、load-path
の特別な値を使用します。ダンプされたEmacsをカスタマイズするためにsite-load.elまたはsite-init.elを使用する場合、これらのファイルが行ったload-path
にたいする変更はすべて、ダンプ後失われます。
このコマンドは、ライブラリーlibraryの正確なファイル名を探します。load
と同じ方法でライブラリーを検索し、引数nosuffixもload
の場合と同じ意味です。libraryに指定する名前には、サフィックス‘.elc’または‘.el’を追加しないでください。
pathが非nil
の場合は、load-path
のかわりにディレクトリーのリストが使用されます。
locate-library
がプログラムから呼び出されたときは、ファイル名を文字列としてリターンします。ユーザーがインタラクティブにlocate-library
を実行したときは、引数interactive-callがt
となり、これはlocate-library
にたいしてファイル名をエコーエリアに表示するよう指示します。
このコマンドは、シャドー(shadowed)されたEmacs
Lispファイルを表示します。シャドーされたファイルとは、load-path
のディレクトリーに存在するにも関わらず、load-path
のディレクトリーリスト内で前の位置にある他のディレクトリーに同じ名前のファイルが存在するため、通常はロードされないファイルのことです。
たとえば、以下のようにload-path
がセットされていたとします
("/opt/emacs/site-lisp" "/usr/share/emacs/23.3/lisp")
そして、両方のディレクトリーにfoo.elという名前のファイルがあるとします。この場合、(require
'foo)
は決して2つ目のディレクトリーのファイルをロードしません。このような状況は、Emacsがインストールされた方法に問題があることを示唆します。
Lispから呼び出された場合、この関数はバッファー内に表示するかわりに、シャドーされたファイルリストのメッセージをプリントします。オプション引数stringp
が非nil
の場合は、かわりにシャドーされたファイルを文字列としてリターンします。