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の書き方はだいたい分かったので、これらを使うプログラムをどう書くのか調べていく予定です。