Next: 非ASCII文字のロード, Previous: ロードでの拡張子, Up: ロード   [Contents][Index]


16.3 ライブラリー検索

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

Variable: load-path ¶

この変数の値はloadでファイルをロードするとき検索するディレクトリーのリスト。リストの各要素は文字列(ディレクトリーでなければならない)、またはnil (カレントワーキングディレクトリーを意味する)。

Emacsは起動時にいくつかのステップによりload-pathの値をセットアップします。まずEmacsのコンパイル時にセットされたデフォルトの場所から、自身のLispファイルを含むディレクトリーを探します。Emacsはこのディレクトリーをlisp-directoryに保存します。このディレクトリーには、通常なら*.elcやその種のファイルがインストールされています。

"/usr/local/share/emacs/version/lisp"

ここでversionとはEmacsのバージョンのことです(以降の例では/usr/localをあなたがインストールしたEmacsに合わせてインストール先に置き換えること)。これらのディレクトリーとサブディレクトリーには、Emacsに付属している標準Lispファイルが含まれています。Emacsが自身のLispファイルを見つけられなければ、正常に起動しないでしょう。

EmacsをビルドしたディレクトリーのEmacs(つまりまだインストールしていない実行可能ファイル)を起動した場合には、そのファイルをビルドしたソースを含むディレクトリーにあるサブディレクトリーlispをかわりに用いてlisp-directoryを初期化します。

Emacsはその後このlisp-directoryでload-pathを初期化します。ソースとは別のディレクトリーでEmacsをビルドした場合にも、そのビルドしたディレクトリーのサブディレクトリーlispを追加します。

これらのディレクトリーは上記2つの変数に絶対ファイル名として格納されています。

--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のカレントのversion用にローカルにインストールされたファイル、2つ目はEmacsのすべてのバージョンの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を参照)で指定したロードディレクトリーを追加する。もしあればオプションパッケージ(パッケージ化の基礎を参照)がインストールされた場所も追加する。

initファイル(initファイルを参照)でload-pathに1つ以上のディレクトリーを追加するコードを記述するのは一般的に行なわれている。たとえば:

(push "~/.emacs.d/lisp" load-path)

pushの説明についてはpushを参照してください。

Emacsのダンプにはload-pathの特別な値を使用する。ダンプされたEmacsをカスタマイズするためにsite-load.elかsite-init.elを使用する場合、これらのファイルが行ったload-pathにたいする変更はすべてダンプ後に失われる。

Variable: lisp-directory ¶

この変数にはEmacsが自身の*.elおよび*.elcファイルを保持するディレクトリーを命名する文字列が格納されている。これは通常ならEmacsのインストールツリーにおいてこれらのファイルが配置される場所になるが、ビルドディレクトリーからEmacsを実行した場合にはそのEmacsをビルドしたソースディレクトリーのサブディレクトリーlispを指す文字列になる。

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

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

pathが非nilならload-pathのかわりにそのディレクトリーのリストが使用される。

locate-libraryがプログラムから呼び出されたときはファイル名を文字列としてリターンする。ユーザーがインタラクティブにlocate-libraryを実行したときは、引数interactive-callがtとなり、これは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/29.1/lisp")

そして両方のディレクトリーにfoo.elという名前のファイルがあるとする。この場合、(require 'foo)は決して2つ目のディレクトリーのファイルをロードしない。このような状況はEmacsがインストールされた方法に問題があることを示唆する。

Lispから呼び出されたると、この関数はシャドーされたファイルリストをバッファー内に表示するかわりに、それのメッセージをプリントする。オプション引数stringpが非nilなら、かわりにシャドーされたファイルを文字列としてリターンする。

ネイティブコンパイルのサポート付きでLispからネイティブコードへのコンパイルを参照がコンパイルされている場合には、Emacsはload-pathの検索時にバイトコンパイル済みの‘.elc’ファイルを見つけた際に、それに対応するネイティブコンパイル済みコードを保持する‘.eln’を探します。ネイティブコンパイル済みファイルはnative-comp-eln-load-pathにリストされたディレクトリーから検索されます。

Variable: native-comp-eln-load-path ¶

この変数はEmacsがネイティブコンパイル済み‘.eln’ファイルを探すディレクトリーのリストを保持する。絶対ファイル名ではないリスト内のファイル名は、invocation-directory (オペレーティングシステムの環境を参照)と相対的なファイル名に解釈される。このリストの最後のディレクトリーはシステムディレクトリー(Emacsのビルドおよびインストール手続きで‘.eln’がインストールされるディレクトリー)である。このリストの各ディレクトリーにたいして、EmacsのバージョンとカレントのネイティブコンパイルのABIに応じた8文字のハッシュから構成される名前のサブディレクトリーで、Emacsは‘.eln’ファイルを探す。このサブディレクトリー名は変数comp-native-version-dirに格納されている。