Gsettings用XMLファイルの調査
GSettings については、以前コマンドで変更する方法を調査したけど、自分でプログラムを書く場合は自分で作らなきゃダメっぽいので、書式について調査してみた。詳細は、 devhelp で GSettings を検索すると GIO Reference Manual に掲載されていることが分かる。基本的には xml 形式のファイルで、サフィックスが .gschema.xml になっていて、サンプルは /usr/share/glib-2.0/schemas にあるものを適当に見ていけば良いと思う。ファイルサイズが大きい物もあるので、
$ ls -Sr /usr/share/glib-2.0/schemas/ | head
で表示されるものを見るほうが楽かもしれません。手元では anjuta 関係が上にあるみたい。
DTD (Document Type Definition) は、マニュアルにもあるけど、 /usr/share/glib-2.0/schemas/gschema.dtd にもあるので、確認してください (GLib の開発系のパッケージを入れていないと見つからないかも)。
DTDには特に記載されてませんが、先頭には version と encoding を入れたほうが良いみたいです。
<?xml version="1.0" encoding="UTF-8"?>
それ以降は、
<schemalist gettext-domain="PACKAGE"> … </schemalist>
の間にアプリケーション独自の設定を書いていきます。 gettext-domain を使うとメッセージの翻訳ができるようになりそうなのですが、残念ながら dconf-editor が対応していないので、現在のところあまりご利益はなさそうです。
<schema path="/apps/hoge/fuga" id="app.hoge.futa" gettext-domain="PACKAGE"> … </schema>
の間に、
<key name="hoge" type="i"> <default>0</default> <summary>short description</summary> <description>long description</description> </key>
のように、設定値(key エンティティ)の名前(name 属性)と形式(type 属性)を書き、デフォルト値(default エンティティ)や、概要(summary エンティティ)や詳細(description エンティティ)を書いていきます。
type 属性のかわりに、 enum エンティティや list エンティティを使って列挙したものを利用したり、 range エンティティと min 属性 max 属性を使って、type="i"で指定される整数の範囲を指定することもできます。その他、 choices エンティティを使って選択式にしたり、 aliases エンティティを使って別名を使うこともできるようです。
type 属性については、 key の形式を意味していて、i は整数、 s は文字列、bは真偽値、 d は倍精度浮動小数などとなっています。
$ cat /usr/share/glib-2.0/schemas/*.xml | tr " \t>\'" "\n\n\n\"" | grep type= | sort -u type="(dd)" type="(ii)" type="a(ss)" type="a(sss)" type="ai" type="as" type="ay" type="b" type="d" type="i" type="q" type="s" type="t" type="u"
いろいろ使われてますね。詳細は、 devhelp で GVariant Type Strings で検索してください。 GVariantType で宣言されている Variant を示す文字になっています。 a は配列 Array を意味し、 ai は整数の配列を示します。()はタプルで、(ss)は文字列2つを()で囲んだものになります。
これでGSettingsの書き方はだいたい分かったので、これらを使うプログラムをどう書くのか調べていく予定です。