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 の使い方が書いているので、非常に参考になる。