Next: , Previous: Loading, Up: Loading


14.1 プログラムからのロード方法

Emacs Lispには、ロードのためのインターフェイスがいくつかあります。 たとえば、autoloadは、 ファイルで定義された関数向けに場所を確保するオブジェクトを作成します。 自動ロードする関数を呼び出すと、 ファイルの実際の定義を得るためにファイルをロードします(see Autoload)。 requireは、ファイルをすでにロードしていなければロードします (see Named Features)。 これらの機構はすべて、最終的には、関数loadを呼び出して動作します。

— Function: load filename &optional missing-ok nomessage nosuffix must-suffix

この関数は、Lispコードのファイルを探してオープンし、 その中のフォームすべてを評価してから、ファイルをクローズする。

ファイルを探すために、 loadはまずfilename.elcという名前のファイル、 つまり、filenameに‘.elc’を付加した名前のファイルを探す。 そのようなファイルが存在すれば、それをロードする。 そのような名前のファイルがなければ、 loadfilename.elという名前のファイルを探す。 そのファイルが存在すれば、それをロードする。 いずれの名前のファイルもみつからなければ、 最終的に、loadは、なにも付加しないfilenameという名前のファイルを 探し、存在すればそれをロードする。 (関数loadfilenameを探す手順は賢くない。 (load "foo.el")を評価すると、 foo.el.elという名前のファイルを探してしまう。)

省略可能な引数nosuffixnil以外であれば、 ‘.elc’と‘.el’の接尾辞を試さない。 この場合、目的のファイルの正確な名前を指定する必要がある。 正確なファイル名を指定し、かつ、nosuffixtを使えば、 foo.el.elのようなファイル名を探してしまうことを防げる。

省略可能な引数must-suffixnil以外であれば、 loadは、ディレクトリ名を明示していない限り、 ファイル名は‘.el’か‘.elc’で終るものと仮定する。 filenameにディレクトリ名が明示してなく、かつ、 接尾辞も指定してなければ、loadは接尾辞を必ず付加する。

filenamefoobaz/foo.barのように 相対ファイル名であると、loadは変数load-pathを使って ファイルを探す。 filenameload-pathに指定した各ディレクトリを付加し、 最初にみつかったファイルをロードする。 デフォルトディレクトリを表すnilload-pathに 指定されている場合に限り、カレントディレクトリを試す。 loadは、まず最初のディレクトリで3つの可能な接尾辞を試し、 続いて2番目のディレクトリで3つの可能な接尾辞を試し、 というように行う。 see Library Search

foo.elcfoo.elより古いという旨の警告を受け取った場合には、 foo.elの再コンパイルを考えるべきである。 see Byte Compilation

(コンパイルしていない)ソースファイルをロードするときには、 Emacsがファイルを訪問する場合と同様に、 loadは文字集合を変換する。 see Coding Systems

nomessagenilであると、 ロード中にはエコー領域に ‘Loading foo...’や‘Loading foo...done’のメッセージを表示する。

ファイルをロード中に処理できないエラーに出会うと、ロードを終了する。 autoloadによるロードの場合には、 ロード中に行われた関数定義はすべてもとに戻す。

loadがロードすべきファイルをみつけられないと、 普通、(‘Cannot open load file filename’を伴った) エラーfile-errorを通知する。 missing-oknil以外であれば、 loadnilを返すだけである。

変数load-read-functionを使って、 式を読み取るためにreadのかわりにloadが使う関数を指定できる。 下記参照。

ファイルを正しくロードできるとloadtを返す。

— コマンド: load-file filename

このコマンドはファイルfilenameをロードする。 filenameが相対ファイル名であると、 現在のデフォルトディレクトリを仮定する。 load-pathを使わず、接尾辞も付加しない。 ロードするファイル名を正確に指定したい場合にこのコマンドを使う。

— コマンド: load-library library

このコマンドは、libraryという名前のライブラリをロードする。 loadと等価であるが、引数を対話的に読み取る点が異なる。

— Variable: load-in-progress

Emacsがファイルをロード処理中であると、 この変数はnil以外であり、さもなければnilである。

— Variable: load-read-function

この変数は、loadeval-regionが、 readのかわりに使う、式を読み取る関数を指定する。 その関数はreadと同様に引数を1つとること。

通常、この変数の値はnilであり、 これらの関数がreadを使うことを意味する。

注意: この変数を使うかわりに、eval-regionの引数read-functionとして 関数を渡す新しい別の機能を使ったほうが見通しがよい。 see Eval

Emacs構築時のloadの使い方についての情報は、 See Building Emacs