GObjectIntrospectionでは、高水準言語でCオブジェクトを使用できます。 https://live.gnome.org/GObjectIntrospection(GObjectIntrospection)javascriptを使用してibusエンジンを作成しようとするとセグメンテーションエラーが発生する
IBusは、Linux用の入力メソッドフレームワークです。 code.google.com/p/ibus
私はGObjectIntrospection/javascriptを使用して問題が少しあります。私は を試して、ibusエンジンを作成しました。同じコードがvala、pythonで動作します。しかし のjavascript seg faultにあります。 私はopensuse 12.1 gnome3を使用しています。 "ibus-devel"パッケージは、GObjectIntrospectionに必要な/usr/share/gir-1.0/IBus-1.0.girを提供します。
次のコードを実行する必要があります。
#!/usr/bin/env gjs
const IBus = imports.gi.IBus;
//get the ibus bus
var bus = new IBus.Bus();
if(bus.is_connected()){
var factory = new IBus.Factory({
connection: bus.get_connection()
});
factory.add_engine({
engine_name:"ibus-sarim",
engine_type:typeof(this)
});
}
「new IBus.Factory」の6行目でクラッシュします。
ターミナル出力、
(gjs:13353): GLib-GIO-CRITICAL **: g_dbus_connection_register_object:
assertion `object_path != NULL && g_variant_is_object_path
(object_path)' failed
Segmentation fault
問題がどこにあるか私は理解することはできません。私はvalaテストコードを試しました は、ibusで提供されました https://github.com/ibus/ibus/blob/master/bindings/vala/test/enchant.vala コンパイルして正常に動作します。 enchant.valaライン148において 、
var factory = new Factory(bus.get_connection());
ファクトリーを作成するためのコードは、私はJavaScriptで試みたのと同じです。 もPythonで、
from gi.repository import IBus
from gi.repository import GLib
from gi.repository import GObject
IBus.init()
bus = IBus.Bus()
if bus.is_connected():
factory = IBus.Factory.new(bus.get_connection())
また、これは罰金、無ワンセグ障害を動作するようです。しかし、javascriptでは毎回失敗します。 私は無駄なしで数日間、この上で叩いてる:(IBusFactoryで
cのIBus.Factoryコンストラクタは、https:// githubにあります。そこCOM/IBUS/IBUS/BLOB /マスター/ SRC/ibusfactory.cライン352 'IBusEngine *物体= g_object_new(IBUS_TYPE_FACTORY、 "オブジェクト・パス"、IBUS_PATH_FACTORY、 "接続"、接続、 NULL);' とhttps://github.com/ibus/ibus/blob/master/src/ibusshare.hライン81 'の#define IBUS_PATH_FACTORY "/ ORG/freedesktop/Iバス/ファクトリー"' だから方法はありません報告アサーションが失敗する可能性があります。なぜ失敗したのか分かりません! – Sarim