Previous: Hooks for Loading, Up: Loading [Contents][Index]
ダイナミックEmacsミジュール(dynamic Emacs module)とは、Emacs Lispで記述されたパッケージのように、Emacs Lispプログラムで使用するための追加機能を提供する共有ライブラリーです。
Emacs Lispパッケージをロードする関数は、ダイナミックモジュールのロードもできます。これらの関数はファイル名の拡張子、いわゆる“サフィックス”を調べることによってダイナミックモジュールを認識します。
この変数はモジュールファイルのファイル名拡張子の、システム依存な値を保持する。Posixホストでは.so、MS-Windowsでは.dll。
すべてのダイナミックモジュールはCから呼び出し可能なemacs_module_init
という名前の関数をエクスポートする必要があります。load
かrequire
でそのモジュールをロードする一部として、Emacsはその関数を呼び出します。モジュールのコードがGPLまたはGPL互換のライセンスの下にリリースされたことを示す、plugin_is_GPL_compatible
という名前のシンボルもエクスポートしてください。Emacsはこのようなシンボルをエクスポートしないモジュールのロードを拒絶するでしょう。
モジュールがEmacs関数を呼び出す必要があるなら、Emacsディストリビューションに含まれるヘッダーファイルemacs-module.hで定義およびドキュメントされているAPIを通じてこれを行ってください。
モジュールは、そのモジールで定義されたC構造体にたいする埋め込みポインターであるuser-ptr
Lispオブジェクトを作成できます。これはモジュールで作成されてそのモジュールの関数に渡される複雑なデータ構造を保持するために有用です。user-ptrオブジェクトはそれに関連付けられるファイナライザー(finalizers)をもつこともできます。ファイナライザーとはオブジェクトがガーベージコレクションされたときに実行される関数のことです。
この関数は引数がuser-ptr
オブジェクトならt
をリターンする。
Emacsのロード可能モジュールは、configure時にオプション--with-modulesを使用することにより有効になります。