Show page source of GConf #40428

= [http://www.gnome.org/projects/gconf/ GConf]

== GConfとは

GConfは、アプリケーションの設定を保存するためのシステムです。Microsoft Windowsのレジストリに似ていますが、よりベターな実装になっています。

=== 設定可能な値の種類

 * 整数型
 * 浮動小数点型
 * 文字列
 * 論理値(TRUEまたはFALSE)
 * スキーマ型
 * リスト型(ネスト不可)
 * ペア型(ネスト不可)

== GConfの利用手順

基本的に[http://developer.gnome.org/doc/API/2.0/gconf/gconf-GConfClient.html GConfClient]を介して利用します。これは、非常に良くできたラッパーでGConfの初期化処理やエラー処理などの面倒を見てくれます。

=== [http://developer.gnome.org/doc/API/2.0/gconf/gconf-GConfClient.html GConfClient]の取得

通常は、gconf_client_get_default()を使ってGConfClientを取得します。

{{{ code c
	GConfClient *client;

	client = gconf_client_get_default()
}}}

=== 監視させるディレクトリのセット

GConfClientに監視させるディレクトリをセットします。これは、ファイルシステム上のディレクトリではなく、GConfの仮想ディレクトリでいくつかの規則があります。

||ディレクトリ名||目的||
||/apps||アプリケーションの設定を保存する||
||/desktop||デスクトップ環境の設定を保存する||
||/system||システムレベルの設定を保存する||
||/extra||以上のカテゴリに分類できない特殊な設定を保存する。通常は、使用しない。||

上記のディレクトリに直接、設定を保存することは避けるべきです。例えば、アプリケーションhogeのための設定であれば、/apps/hoge以下に設定を保存する様にしましょう。この場合、次の様にします。

{{{ code c
	gconf_client_add_dir (client, "/apps/hoge", GCONF_CLIENT_PRELOAD_NONE, NULL);
}}}

一番目の引数は、適切なGConfClientを指定します。二番目の引数は、監視させるディレクトリです。三番目の引数は、事前に設定をキャッシュしておくかどうかを表すフラグで以下の三種類が指定可能です。

||GCONF_CLIENT_PRELOAD_NONE||事前にキャッシュしない||
||GCONF_CLIENT_PRELOAD_ONELEVEL||指定したディレクトリ直下の設定のみキャッシュする||
||GCONF_CLIENT_PRELOAD_RECURSIVE||再帰的にサブディレクトリの設定もキャッシュする。場合によっては非常に負荷がかかります。||

=== 設定値の取得

主に以下の関数を利用します。

||[http://developer.gnome.org/doc/API/2.0/gconf/gconf-GConfClient.html#gconf-client-get-int gconf_client_get_int]||整数型||
||gconf_client_get_float||浮動小数点型||
||gconf_client_get_string||文字列||
||gconf_client_get_bool||論理値型||
||gconf_client_get_schema||スキーマ型||
||gconf_client_get_list||リスト型||
||gconf_client_get_pair||ペア型||

=== 設定値の設定

主に以下の関数を利用します。

||gconf_client_set_int||整数型||
||gconf_client_set_float||浮動小数点型||
||gconf_client_set_string||文字列||
||gconf_client_set_bool||論理値型||
||gconf_client_set_schema||スキーマ型||
||gconf_client_set_list||リスト型||
||gconf_client_set_pair||ペア型||

== 注意事項

=== キー名に関する注意

基本的にASCIIコードの範囲で構成される文字列を使える。ただし、以下の文字は使えない。

 *  (空白)
 * \t(タブ)
 * \r(キャリッジリターン)
 * \n(改行)
 * "
 * $
 * &
 * <
 * >
 * ,(カンマ)
 * +
 * =
 * #
 * !
 * (
 * )
 * '
 * |
 * {
 * }
 * [
 * ]
 * ?
 * ~(チルダ)
 * `
 * ;
 * %
 * \(バックスラッシュ)

GConf-2.10.0では、gconf/gconf.cの2573行で以下の様に定義されている。

{{{ code c
static const gchar invalid_chars[] = " \t\r\n\"$&<>,+=#!()'||{}[]?~`;%\\";
}}}

=== gconf_client_set_pairでGCONF_VALUE_STRINGをセットするには

{{{ code c
	GConfClient *client;
	gchar *first;
	gchar *second;
	... (それぞれの値がセットされた)
	gconf_client_set_pair (client, "/apps/hoge/key", GCONF_VALUE_STRING, GCONF_VALUE_STRING, &first, &second, NULL)
}}}


の様にgchar型へのポインタへのポインタを渡す。