Previous: , Up: Loading   [Contents][Index]


15.11 Emacs Dynamic Modules

ダイナミックEmacsミジュール(dynamic Emacs module)とは、Emacs Lispで記述されたパッケージのように、Emacs Lispプログラムで使用するための追加機能を提供する共有ライブラリーです。

Emacs Lispパッケージをロードする関数は、ダイナミックモジュールのロードもできます。これらの関数はファイル名の拡張子、いわゆる“サフィックス”を調べることによってダイナミックモジュールを認識します。

Variable: module-file-suffix

この変数はモジュールファイルのファイル名拡張子の、システム依存な値を保持する。Posixホストでは.so、MS-Windowsでは.dll

すべてのダイナミックモジュールはCから呼び出し可能なemacs_module_initという名前の関数をエクスポートする必要があります。loadrequireでそのモジュールをロードする一部として、Emacsはその関数を呼び出します。モジュールのコードがGPLまたはGPL互換のライセンスの下にリリースされたことを示す、plugin_is_GPL_compatibleという名前のシンボルもエクスポートしてください。Emacsはこのようなシンボルをエクスポートしないモジュールのロードを拒絶するでしょう。

モジュールがEmacs関数を呼び出す必要があるなら、Emacsディストリビューションに含まれるヘッダーファイルemacs-module.hで定義およびドキュメントされているAPIを通じてこれを行ってください。

モジュールは、そのモジールで定義されたC構造体にたいする埋め込みポインターであるuser-ptrLispオブジェクトを作成できます。これはモジュールで作成されてそのモジュールの関数に渡される複雑なデータ構造を保持するために有用です。user-ptrオブジェクトはそれに関連付けられるファイナライザー(finalizers)をもつこともできます。ファイナライザーとはオブジェクトがガーベージコレクションされたときに実行される関数のことです。

Function: user-ptrp object

この関数は引数がuser-ptrオブジェクトならtをリターンする。

Emacsのロード可能モジュールは、configure時にオプション--with-modulesを使用することにより有効になります。