gconf を使ってみる
gconfは、アプリケーションを終了しても残したいデータを保存するため、データベースに登録するアプリケーション。これまでは、"/etc"ディレクトリにシステム全体のファイルを、dotファイル(ピリオドではじまるファイル名)に各ユーザごとのデータを保存していた。でも、GNOMEでは.gconfというフォルダにxml形式で保存するようになっている。
基本的には、アプリケーションごとの初期設定値を保存することがほとんどなので、そんなに難しく考えずに、簡単なアプリを作ってみる。
今回は、gconf-helloというアプリで、gconfで指定する初期値(int型)の回数だけ"Hello World!"と表示してみる。
はじめに、プロジェクト用のディレクトリを作る。
$ mkdir gconf-hello $ cd gconf-hello/
ソース作成。glib-hello.cをほぼそのまま。。。
$ cat gconf-hello.c #include <config.h> #include <stdio.h> #include <glib.h> #include <glib/gi18n.h> #include <gconf/gconf-client.h> int main (int argc, char* argv[]) { GConfClient* client; gint i, count; setlocale (LC_ALL, ""); bindtextdomain (GETTEXT_PACKAGE, LOCALEDIR); bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8"); textdomain (GETTEXT_PACKAGE); client = gconf_client_get_default (); count = gconf_client_get_int (client, "/extra/gconf-hello/times", NULL); for (i = 0; i < count; i++) { printf (_("Hello, World!\n")); } return 0; }
説明すべきなのは2点あって、
GConfClient* client;
これは、GConfClient型のポインタ宣言して、後で利用する。
client = gconf_client_get_default (); count = gconf_client_get_int (client, "/extra/gconf-hello/times", NULL);
これは、GConfClientのデフォルトを作成して、そこから"/extra/gconf-hello/times"の値(int型)を取得している。後の説明は不要だろう。
configure.ac の作成。
$ cat configure.ac # -*- Autoconf -*- # Process this file with autoconf to produce a configure script. AC_PREREQ([2.63]) AC_INIT([gconf-hello], [0.0.1], [futoshi _at_ momonga-linux.org]) AC_CONFIG_SRCDIR([gconf-hello.c]) AC_CONFIG_HEADERS([config.h]) AM_INIT_AUTOMAKE([foreign 1.11]) # Checks for programs. AC_PROG_CC AC_PATH_PROG(PKG_CONFIG, pkg-config, no) IT_PROG_INTLTOOL GETTEXT_PACKAGE=$PACKAGE AC_SUBST(GETTEXT_PACKAGE) AC_PATH_PROG(GCONFTOOL, gconftool-2) AM_GCONF_SOURCE_2 # Checks for libraries. PKG_CHECK_MODULES([GH], [glib-2.0 gconf-2.0]) # Checks for header files. # Checks for typedefs, structures, and compiler characteristics. # Checks for library functions. AC_CHECK_FUNCS([setlocale]) AC_CONFIG_FILES([Makefile po/Makefile.in]) AC_OUTPUT
変更点は二つ。
AC_PATH_PROG(GCONFTOOL, gconftool-2) AM_GCONF_SOURCE_2
これは、gconftool-2の存在調査と、AM_GCONF_SOURCE_2というマクロですが、今回はschemasファイルを使わないので不要だと思う。(schemasファイルは別途書こうと思う)
PKG_CHECK_MODULES([GH], [glib-2.0 gconf-2.0])
こちらは、gconf_client_get_default()とgconf_client_get_int()を使うために必要。
後は、glib-gettextize intltoolize autoreconf等を使って、ja.poを作ってビルドインストールする。
$ gconf-hello $
何も表示されなくて正解。
$ gconftool-2 --set /extra/gconf-hello/times 5 --type int $ gconf-hello 今日は、世界! 今日は、世界! 今日は、世界! 今日は、世界! 今日は、世界!
intで5に設定すると5回表示される。
ということで、結構いい加減なgconfの説明は終わり。。。気が向いたら真面目に書こうと思う。