Next: , Previous: , Up: Loading   [Contents][Index]


15.3 Library Search

EmacsがLispライブラリーをロードするときは、変数load-path.<により指定されるディレクトリー内のライブラリーを検索します。

Variable: 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にたいする変更はすべて、ダンプ後失われます。

Command: locate-library library &optional nosuffix path interactive-call

このコマンドは、ライブラリーlibraryの正確なファイル名を探します。loadと同じ方法でライブラリーを検索し、引数nosuffixloadの場合と同じ意味です。libraryに指定する名前には、サフィックス‘.elc’または‘.el’を追加しないでください。

pathが非nilの場合は、load-pathのかわりにディレクトリーのリストが使用されます。

locate-libraryがプログラムから呼び出されたときは、ファイル名を文字列としてリターンします。ユーザーがインタラクティブにlocate-libraryを実行したときは、引数interactive-calltとなり、これはlocate-libraryにたいしてファイル名をエコーエリアに表示するよう指示します。

Command: list-load-path-shadows &optional stringp

このコマンドは、シャドー(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の場合は、かわりにシャドーされたファイルを文字列としてリターンします。