Next: 非ASCII文字のロード, Previous: ロードでの拡張子, Up: ロード [Contents][Index]
EmacsがLispライブラリーをロードするときは、変数load-path
により指定されるディレクトリー内のライブラリーを検索します。
この変数の値はload
でファイルをロードするとき検索するディレクトリーのリスト。リストの各要素は文字列(ディレクトリーでなければならない)、またはnil
(カレントワーキングディレクトリーを意味する)。
Emacsは起動時にいくつかのステップによりload-path
の値をセットアップします。まずEmacsがコンパイルされたときのデフォルトロケーションセット(default
locations set)を使用して初期化を行います。これは以下のようなディレクトリーです
"/usr/local/share/emacs/version/lisp"
(これ以降の例では、/usr/localをあなたがインストールしたEmacsに合わせたインストール先に置き換えてください)。これらのディレクトリーには、Emacsに付属している標準Lispファイルが含まれています。Emacsが自身のLispファイルを見つけられなければ、正常に起動しないでしょう。
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用にローカルにインストールされたファイルです(アンインストールされた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)
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
なら、かわりにシャドーされたファイルを文字列としてリターンする。
ネイティブコンパイルのサポート付きでLispからネイティブコードへのコンパイルを参照がコンパイルされている場合には、Emacsはload-path
の検索時にバイトコンパイル済みの‘.elc’ファイルを見つけた際に、それに対応するネイティブコンパイル済みコードを保持する‘.eln’を探します。ネイティブコンパイル済みファイルはnative-comp-eln-load-path
にリストされたディレクトリーから検索されます。
この変数はEmacsがネイティブコンパイル済み‘.eln’ファイルを探すディレクトリーのリストを保持する。絶対ファイル名ではないリスト内のファイル名は、invocation-directory
(オペレーティングシステムの環境を参照)と相対的なファイル名に解釈される。このリストの最後のディレクトリーはシステムディレクトリー(Emacsのビルドおよびインストール手続きで‘.eln’がインストールされるディレクトリー)である。このリストの各ディレクトリーにたいして、EmacsのバージョンとカレントのネイティブコンパイルのABIに応じた8文字のハッシュから構成される名前のサブディレクトリーで、Emacsは‘.eln’ファイルを探す。このサブディレクトリー名は変数comp-native-version-dir
に格納されている。