GNOME Seed の imports を調べてみた

GNOME Seed でオブジェクトをインポートするとき、 imports というオブジェクトを利用する。例えば、 Gtk の機能を使いたい場合は、

const Gtk = imports.gi.Gtk;

などとする。

この時に利用する imports オブジェクトを調べてみる。面倒なので、Seedコンソールを使う。

$ seed
> print (imports);
[object importer]

オブジェクトのインポータらしい。当たり前だけど。。。

> for (a in imports) print (a);
Directory
searchPath

importsオブジェクトには、DirectoryとsearchPathというプロパティがあるらしい。

> print (imports.Directory);
[object CallbackConstructor]

imports.Directoryというのは、コンストラクタらしい。

> print (imports.searchPath);
.,/usr/lib/gnome-js,/usr/lib/seed-gtk3,/usr/share/seed-gtk3,/usr/local/lib/seed,/usr/local/share/seed,/usr/lib/seed,/usr/share/seed

imports.searchPath は、importsオブジェクトがSeedモジュールを検索するPathらしい。 http://people.gnome.org/~racarr/seed/runtime.html によると、push というメソッドを使うと、searchPathに追加ができるらしい。
手元では、 /usr/lib/gnome-js と /usr/lib/seed-gtk3 と /usr/share/seed-gtk3 だけ存在している。個人的には /usr/{lib,share}/seed-gtk3 のモジュールが GNOME Seed 独自の重要なモジュールになっているように感じる。
以前、紹介した libxml や gettext などは、ここから呼び出されている。

次に、 imports.gi を調べてみる。

> print (imports.gi);
[object gi_importer]

どうやら、gi (GObject Introspection) 専用のインポータらしい。試しに Gtk をインポートしてみると、

> print (imports.gi.Gtk);
[object Object]

このように、Gtkオブジェクトがインポートされる。

> for (a in imports.gi.Gtk) print (a);

のようにすると、Gtkのclassやemunなどが大量に表示される。
これらは、 Gtk-3.0.girファイルなどと見比べてみると楽しいかもしれない。

これらから、 JavaScript や Seedモジュールは imports.searchPath で表示されるパスに置き、gir ファイルや typelib ファイルは、それぞれ /usr/share/gir-1.0 や /usr/lib/girepository-1.0 に置くと良いようだ。

先ほどのURL http://people.gnome.org/~racarr/seed/runtime.html には、 imports の使い方が書いているので、非常に参考になる。