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
に対してファイル名をエコー領域に表示するように指示する。