Next: , Previous: , Up: Building   [Contents][Index]


27.8 EmacsのためのLispコードによるライブラリー

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.elcfoo.elfooを見つけようと試みます。デフォルトの動作では、最初に見つかったファイルをロードします。このコマンドは.elより.elcを優先します。それはコンパイルされたファイルの方が、ロードと実行が速いからです。lib.ellib.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も指定できます。これはカレントのデフォルトディレクトリーを意味しますが、これを使うのは大抵間違っています(リストに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-loadnilに変更してください。

デフォルトではEmacsは、XEmacs —Emacsの変更されたバージョン — でコンパイルされたコンパイル済みのLispファイルのロードを拒絶します。なぜならそれはEmacsのクラッシュをさせるからです。これらのロードを試みる場合は、変数load-dangerous-librariestをセットしてください。