次: Loading Non-ASCII, 前: How Programs Do Loading, 上: Loading
EmacsがLispライブラリをロードするときには、
変数load-pathで指定したディレクトリ群でライブラリを探します。
この変数の値は、
loadでファイルをロードするときに探索する ディレクトリのリストである。 各要素は、(ディレクトリ名である)文字列か (カレント作業ディレクトリを表す)nilである。
load-pathの値は、環境変数EMACSLOADPATHがあれば、
それで初期化します。
さもなければ、デフォルト値は、
Emacsを構築したときにemacs/src/paths.hで指定したものです。
そして、リスト内のディレクトリのサブディレクトリをリストに追加して
拡張します。
EMACSLOADPATHの構文はPATHと同じです。
`:'(オペレーティングシステムによっては`;')で
ディレクトリ名を区切ります。
デフォルトのカレントディレクトリには`.'を使います。
cshの.loginファイルで環境変数EMACSLOADPATHを
指定する例はつぎのとおりです。
setenv EMACSLOADPATH .:/user/bil/emacs:/usr/local/share/emacs/20.3/lisp
shを使っている場合はつぎのようにします。
export EMACSLOADPATH
EMACSLOADPATH=.:/user/bil/emacs:/usr/local/share/emacs/20.3/lisp
.emacsファイルで、
デフォルトのload-pathの先頭に複数のディレクトリを追加するには、
つぎのようなコードを書きます。
(setq load-path
(append (list nil "/user/bil/emacs"
"/usr/local/lisplib"
"~/emacs")
load-path))
この例では、Lispコードを、まずカレント作業ディレクトリで探索し、 続いて、/user/bil/emacsディレクトリ、 /usr/local/lisplibディレクトリ、~/emacsディレクトリ、 さらに、標準のディレクトリで探索します。
Emacsのダンプには、load-pathの特別な値を使います。
ダンプ終了時にload-pathの値が未変更(つまり、同じ特別な値)であれば、
ダンプ版Emacsは起動時に、上に述べたように、普通のload-pathの値を
使います。
しかし、ダンプ終了時にload-pathの値が別の値であれば、
ダンプ版Emacsの実行でもその(別の)値を使います。
したがって、site-init.elやsite-load.elで
少数のライブラリをロードするために
一時的にload-pathを変更したい場合には、
loadの呼び出しをletで囲んで
load-pathをローカルに束縛するべきです。
システムにインストールしたEmacsを実行中は、
load-pathのデフォルト値には、2つの特別なディレクトリ
(とそれらのサブディレクトリ)が含まれます。
"/usr/local/share/emacs/version/site-lisp"
と
"/usr/local/share/emacs/site-lisp"
です。 前者は、Emacsの特定の版向けにローカルにインストールしたパッケージ用です。 後者は、Emacsの任意の版向けにローカルにインストールしたパッケージ用です。
Emacsのある版向けのパッケージが別の版ではトラブルを引き起こす理由は いくつかあります。 Emacsの互換性のない変更のために更新を必要とするパッケージもあります。 予告なしに変更される可能性のある明文化していない Emacsの内部データに依存するものもあります。 Emacsの新しい版では、パッケージの特定の版と一体になっているものもあり、 その版だけで使うべきです。
Emacsは、起動すると、ディレクトリのサブディレクトリを捜し出して、
それらをload-pathに追加します。
直下のサブディレクトリも複数レベル下のサブディレクトリも
load-pathに追加します。
しかし、サブディレクトリすべてを含むわけではありません。 英数字で始まらない名前のサブディレクトリは除外します。 RCSという名前のサブディレクトリも除外します。 また、.nosearchという名前のファイルを置いた サブディレクトリも除外します。 これらの方法を用いれば、site-lispディレクトリ下の 特定のサブディレクトリの探索を防げます。
Emacsを構築したディレクトリでEmacsを起動すると、
つまり、正式にインストールしてない実行形式を起動すると、
load-pathには、普通、2つのディレクトリを追加します。
主構築ディレクトリのサブディレクトリ、lispとsite-lispです。
(どちらも、絶対ファイル名で表される。)
このコマンドは、ライブラリlibraryの正確なファイル名を探す。
loadと同様にライブラリを探索する。 引数nosuffixの意味はloadと同じであり、 指定した名前libraryに接尾辞`.elc'や`.el'を付加しない。pathが
nil以外であると、 それはload-pathのかわりに使うディレクトリのリストである。
locate-libraryをプログラムから呼び出した場合、 文字列でファイル名を返す。 ユーザーがlocate-libraryを対話的に実行した場合、 引数interactive-callはtであり、これはlocate-libraryに対してファイル名をエコー領域に表示するように指示する。