Next: , Previous: Executing Lisp, Up: Building


21.7 Emacs用のLispコードのライブラリ

Emacs編集コマンドのLispコードは、習慣的に.elで終る名前の ファイルに格納されています。 これらの拡張子は、 emacs-lispモードで編集するようにEmacsに指示します (see Executing Lisp)。

Emacs Lispコードのファイルを実行するには、 M-x load-fileを使います。 このコマンドは、ミニバッファでファイル名を読み取り、 そのファイルの内容をLispコードとして実行します。 あらかじめファイルを訪問しておく必要はありません。 いずれにしても、このコマンドはディスク上のファイルを読むのであって、 Emacsバッファのテキストを読むのではありません。

LispコードのファイルをEmacs Lispライブラリのディレクトリに置いておけば、 そのファイルはM-x load-libraryでロードできます。 プログラムからは、load-libraryを呼んでロードするか、あるいは、 より基本的な類似の関数で余分な引数も指定できるloadでロードします。

M-x load-libraryM-x load-fileと異なる点は、 一連のディレクトリについて3つのファイル名を順に調べるということです。 引数がlibだとすると、3つのファイル名とは、 lib.elclib.el、そして最後にlibです。 lib.elcというファイルが存在すれば、 これは習慣としてlib.elをコンパイルしたものです。 コンパイル済みのファイルはロードと実行が速いので、 こちらをロードするほうが有利です。

load-librarylib.elcよりも新しい lib.elをみつけると、警告を出力します。 というのは、.elファイルを変更後に再コンパイルし忘れている 可能性があるからです。

load-libraryの引数は、通常、それ自体では 正しいファイル名でないことが多いため、ファイル名の補完はできません。 もちろん、このコマンドを使うとき、 指定すべき正確なファイル名を普通は知らないでしょうが。

M-x load-libraryが探索するディレクトリの順番は、 変数load-pathで指定します。 その値は、ディレクトリ名の文字列から成るリストです。 リストのデフォルト値には、Emacs自身のLispコードを収めたディレクトリが 含まれます。 個人用のLispライブラリがあるならば、それらを1つのディレクトリにまとめ、 そのディレクトリ名をload-pathに追加してください。 リスト内のnilはカレントデフォルトディレクトリを表しますが、 リストにnilを加えることはあまり勧められません。 リストにnilが本当に必要だと感じたときには、 それについてはM-x load-fileを実行するのでは いけないだろうかと考えてみてください。

ライブラリの中で定義されているコマンドに対しては、 そのライブラリを自動的にロード(autoload)するように 設定されているので、ほとんどの場合、ライブラリをロードするコマンドを 指定する必要はないでしょう。 ライブラリをロードするためにloadを呼び出すようなコマンドを1つ 試してみてください。 こうすると、「自動的にロードする」という定義が ライブラリ内の実際の定義で置き換わります。

Emacs Lispコードはバイトコードにコンパイルできます。 コンパイルすると、ロードが速くなり、ロードしても必要な記憶容量が少なくなり、 実行も速くなります。 See バイトコンパイル。 習慣として、ライブラリのコンパイル済みのコードは、 ライブラリのソースファイル名に‘c’を付けた名前の 別のファイルに入ります。 したがって、foo.elのコンパイル済みのコードは、foo.elcに入ります。 これが、load-libraryはまず‘.elc’というファイルを探す理由です。