Next: Lisp Eval, Previous: Executing Lisp, Up: Building [Contents][Index]
Emacs Lispのコードは、慣習として.elで終わる名前のファイルに保存されます。このようなファイルは、自動的にEmacs Lispモードでvisitされます。
Emacs Lispのコードは、loadが速く省スペースで、実行も速いバイトコードにコンパイルできます。慣習により、コンパイルされたEmacs Lispのコードは‘.elc’で終わる名前の別のファイルに保存されます。たとえば、foo.elをコンパイルしたコードはfoo.elcになります。Byte Compilation in the Emacs Lisp Reference Manualを参照してください。
Emacs Lispファイルをロード(load)するには、M-x load-fileとタイプします。このコマンドはミニバッファーを使ってファイル名を読み取り、そのファイル内容をEmacs Lispコードとして実行します。最初にファイルをvisitしておく必要はありません。このコマンドは、既存のEmacsバッファーからではなく、ディスクからファイルを直接読み込みます。
Emacs Lispファイルが、Emacs Lispのロードパス(load path:
以下で定義)にインストールされている場合、M-x load-fileではなくM-x
load-libraryとタイプしてロードできます。M-x
load-libraryコマンドは、ファイル名ではなくライブラリー名(library name)の入力を求めます。これはEmacs
Lispのロードパスの各ディレクトリーを検索して、そのライブラリー名にマッチするファイルを見つけようと試みます。ライブラリー名が‘foo’の場合、ファイル名foo.elc、foo.el、fooを見つけようと試みます。デフォルトの動作では、最初に見つかったファイルをロードします。このコマンドは.elより.elcを優先します。それはコンパイルされたファイルの方が、ロードと実行が速いからです。lib.elがlib.elcより新しい場合、警告を発します。この場合、誰かが.elを変更したもののリコンパイルを忘れたようだが、ともかく.elcをロードする、という警告です(この振る舞いにより、編集が終わっておらず、まだリコンパイルする準備ができていないEmacs
Lispのソースファイルを保存することができます)。しかしオプションload-prefer-newer
を非nil
値にセットした場合、上記の手順ではなく、Emacsは新しいファイルのバージョンをロードします。
Emacs Lispプログラムは通常、load
関数を使用してEmacs
Lispファイルをロードします。これはload-library
と似ていますが、より低レベルで追加の引数を指定できます。How
Programs Do Loading in the Emacs Lisp Reference Manualを参照してください。
Emacs
Lispのロードパスは、変数load-path
により指定されます。この変数の値は、ディレクトリー(文字列)のリストです。これらのディレクトリーは、M-x
load-libraryコマンド、低レベルのload
関数、その他のEmacs
Lispライブラリーを探すEmacs関数により、指定された順に検索されます。load-path
のリストの要素には、特別な値nil
も指定できます。これはカレントのデフォルトディレクトリーを意味しますが、その意味するところはEmacsがload-path
を使用する際のカレントディレクトリーに依存するはずなので、これを使うのは大抵間違っています(リストにnil
を含めたいと思うとき、大抵の場合は、本当に望んでいるのはM-x
load-fileを使用することです)。
load-path
のデフォルト値は、Emacs自身がLispコードを格納するディレクトリーのリストです。他のディレクトリーに独自のライブラリーがある場合、ロードパスにそのディレクトリーを追加できます。このマニュアルで説明されている他の大半の変数とは異なり、load-path
はCustomizeインターフェース(Easy Customizationを参照してください)を通じての変更はできません。しかしinitファイルに以下のような行を記述して、ディレクトリーを追加できます(Init Fileを参照してください):
(add-to-list 'load-path "/path/to/my/lisp/library")
いくつかのコマンドは、自動ロード(autoload)されます。これらを実行するとき、Emacsは最初に関連するライブラリーを自動的にロードします。たとえばM-x
compileコマンド(Compilationを参照してください)は、自動ロードされます。これを呼び出した場合、Emacsは最初に、自動的にcompile
ライブラリーをロードします。対照的にコマンドM-x
recompileは、自動ロードされません。そのため、このコマンドはcompile
ライブラリーをロードするまで利用できません。
自動的なロードは、自動ロードされたコマンドのドキュメントを探すとき(Name Helpを参照してください)にも発生します。それは、ドキュメントがライブラリーの他の関数や変数を参照する場合です(ライブラリーのロードにより*Help*バッファーのハイパーリンクが適切にセットアップされます)。この機能を無効にするには、変数help-enable-auto-load
をnil
に変更してください。
デフォルトではEmacsは、XEmacs —Emacsの変更されたバージョン —
でコンパイルされたコンパイル済みのLispファイルのロードを拒絶します。なぜならそれはEmacsのクラッシュをさせるからです。これらのロードを試みる場合は、変数load-dangerous-libraries
にt
をセットしてください。