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