GTK+-1.0.4 + wc-patch と新しい wcsmbs


注:
現在パッケージ置場に置いてあるGTK+およびGIMPのバイナリはgtkconvのパッチを組み込まずにmakeしてあります。つまり、日本語のメニューは出すことができません。ソース・パッケージにパッチ自体は含まれているので、どうしてもgtkconvが必要な人はSPECファイルを読んでコメントアウトされている部分を適宜元に戻してmakeしなおしてください。


GTK+というライブラリがある。GIMPという超グレートなグラフィクス・ツールのために開発されたWidgetセットなのだが、汎用性に富み、プログラミングしやすく、Athena等の伝統のWidgetを使わずGTK+を使ったアプリケーションも続々と出てきているようだ。

GIMPは長らくβステータスだったのだが、先頃待望の安定版GIMP 1.0が正式にリリースされ、その時点での対応するGTK+が1.0.4だったので、すでにGTK+ 1.0.5や開発版の1.1.1などが出ているものの、今の時点ではやはり1.0.4を使うのが手堅いと思う。

またGTK+-1.0.4には、動作実績のある日本語化パッチが存在しており、これをあてることによって、GTK+を使ったアプリで日本語が扱えるようになるのだ。もちろん、GIMPでも。

オレもGIMPを使ってはいるが、絵心0なので実際にはスキャナのフロントエンドとしてレタッチ用途にしか使っていない。だからGIMPで日本語が扱えることそのものにはあまり大きなメリットはないのだが、WidgetセットとしてのGTK+には多いに関心ありだ。Slackwareを使っていた時には、日本語化したGTK+を使って、archieクライアントだの辞書ビューワだのと、小ぶりなアプリなぞをちょこちょこ書いてみたりしはじめていたので、赤帽でも当然、その程度の環境は欲しかった。

というワケで、例によってJRPMでお世話になっている永繁さんのページに行って説明を読み、JRPMのftpサイトからgtk+-1.0.4jp-3.src.rpmを頂いてきてベースにすることにする。

このソース・パッケージにはGTK MLにパッチを投げて下さった民斗さんのページからGtkText ウィジェットを国際化するためのgtk+-1.0.4-wc-patch.gzと、GIMP MLで紹介されたasuraさんのGTKCONVのページから、Gimpのメニューを非英語にすることができるgtkconv-1.0.4.2.tgzと日本語のメニューファイルjapanese-menu.tgzが取り込まれている。

が、悲しいことにX_LOCALEを前提にしているので、このままではオレのwcsmbsのみというコンダラ環境では使うことはできないのだ。なので、早速パッケージを展開して、X_LOCALEなしで再makeしてみた。オレ的にはgimpのメニューを日本語にできるというgtkconvそのものには特に必要性を感じないのだが、まぁ入ってるもんをわざわざ取り除くこともあるまい、と思ってそのままmakeしたのだ。

だがダメだった…

X_LOCALEなしで再makeすること自体は非常に簡単で、サクサクできたのだが、どうにも日本語がうまく扱えぬ。

パッチの有無にかかわらず、例えばGTK+ 1.0.4のソースを ~/src/gtk+-1.0.4 に展開したとすると、~/src/gtk+-1.0.4/gtkにtestgtkというサンプル・プログラム兼動作チェックプログラムも同時に作られる。これは非常に参考になるプログラムで、GTK+でのプログラミングをする上で何度も目を通すことになるプログラムなのだが、GTK+に対する民斗さんのwc-patchの主眼は、このtestgtkの「text」メニューで開かれるフリーエディットなText Widgetで日本語が編集できるようになる、というところにある。また同時に「entry」メニューで開かれるEntry Widget(1行のみのテキストエリア)でも日本語を編集できるようになる。

だが、glibc+wcsmbsな環境で、X_LOCALEなしで再makeしたGTK+-1.0.4 + wc-patchではEntry Widgetにkinput2から日本語を入力すると、一見正しく入力できたかのようにエコーバックするものの、まったく編集できない。カーソルが正しく動かないばかりか、削除することすらできないのだ。さらには、Text Widgetに入力しようとすると、kinput2でなにか文字を入れた瞬間にcore dumpしてしまうのだ… 目の前真っ暗。

だが、コンダラ道を行くと決めた以上、調べるしかあるまい。GTK MLに以前流れたtest_mblen.cというチェックプログラムを自分の環境に合わせて、こんなMakefileでmakeしてみた。

できたtest_mblenを./test_mblenとして実行してみると…

locale type: LIBC_LOCALE
set to ja_JP.ujis
current locale: ja_JP.ujis
[ 4] 漢字
[ 3] ABC
set to fr_FR
current locale: fr_FR
[-1] 漢字
[ 1] ABC
set to C
current locale: C
[-1] 漢字
[ 1] ABC
set to ja_JP.ujis
current locale: ja_JP.ujis
[-1] 漢字
[ 1] ABC

などとなっているではないか。

確かに、LOCALE文字列にはそれらしくja_JP.ujisやらfr_FRやらと返してはくれるが、肝心の文字数がバイト数のまんまやんけ。しかも、他のLOCALEを経てja_JP.ujisに戻ってくると、最初にja_JP.ujisを指定したときと振舞いが違うし… 少なくとも、最初にja_JP.ujisを指定したとにだけでも

current locale: ja_JP.ujis
[ 2] 漢字
[ 1] ABC

と返してほしいぞ。これは思うに、wcsmbsのバグというか未完成さゆえの振舞いだな。早速、コソクにもDebian-JPのパッケージにもっと新しいwcsmbsはないのか漁りに行くことにした(笑)

すると、さすがDebian、ちゃ〜んとあるでわないくぁ!速攻でwcsmbs-locale-0.4.1.tar.gzというのをもらってくる。だが、もともとオレが今つかっているwcsmbsは、佐藤さんが個人的に公開なさっている物で、こちらを見たら佐藤さんもとっくに新しいwcsmbsを公開なさっているではないか! とほほ。単にオレの使っているのが古かったのね。

気を取り直してもらってきたwcsmbs-locale-0.4-1.i386.rpmをインストールし、再度test_mblenを実行してみると…

locale type: LIBC_LOCALE
set to ja_JP.ujis
current locale: ja_JP.ujis
[ 2] 漢字
[ 1] ABC
set to fr_FR
current locale: fr_FR
[-1] 漢字
[ 1] ABC
set to C
current locale: C
[-1] 漢字
[ 1] ABC
set to ja_JP.ujis
current locale: ja_JP.ujis
[ 2] 漢字
[ 1] ABC

おぉ!完璧でわないの!!

ja_JP.ujisへの再設定でもちゃんと動いている。wcsmbs.soのリロードもきっちり動くようになったのだな。さすが、バリバリ進歩するぜ、どっかのOSと違って(笑)

今度は平気だろ、と願いつつtestgtkを動かしてみる。するとまだちょっど変なようだ。Entry Widgetにkinput2から日本語を入力すると、一見正しく入力できたかのようにエコーバックするものの、まったく編集できないという症状は直っていない。それなのに、Text Widgetにはサクサク入力できるし、消したり書いたりと編集しても、カット&ペーストを繰り返しても、ビクともせずに動いている…。

不思議だ。いい線まできてるんだが… なぜ、より複雑なText Widgetが平気で、1行入力のEntry Widgetがうまく動かないのかなぁ。GTK+の中で、setlocaleしてるところを片っ端からgrepで見付けて、xxgdbでその周辺の動きを見るしかあるまい。

と思って見てみたら、なんかクサそうなところをすぐに見付けることができた。gtkmain.cの中、それもmain()の中のLOCALEをチェックするところで、ちょっと不思議というか凝ったことをしていて、わざわざLOCALEをCにいったん設定し、その状態でMulti Byteな文字が使えるかどうか調べた後にLOCALEをja_JP.ujisに戻しているのだ。なんで? その辺をちょっと書き換え、最初からLOCALEはja_JP.ujisのままで、Cを経由しないようにしてmakeしなおしてみた。

ちゃんと入力できたぞ。

よしよし。Text WidgetもEntry Widgetもバッチリ動くぜ。こりゃX_LOCALEなしでも平気だな。GTK+でさえも日本語が使えるとなれば、もはやX_LOCALEには用はない。佐藤さんのページからglibcとwcsmbsを持っていき、オレのパッケージ置場 のgtk+で一応、テキストにkinput2なりskkinputで日本語が入力できる。

ついでにgimpもX_LOCALEなしでmakeしてみた。これも一応置いておく。

GIMPの方は本当にただmakeしなおしただけなんだけど、この手のX_LOCALEなしで作ったものも本当はJRPMのftpサイトにでも置いてもらいたい気もするなぁ… X_LOCALEが主流な間は仕方ないか。せめてオレのディスクスペースを提供して、パッケージを置いておくことにしよう。

とりあえずgtk+-1.0.6jpとgimp-1.0.0jpがインストールできたら、まずおもむろにgimpを実行しよう。かっちょいいSplashが画面の真ん中に表示され、うまく起動できたらここで一旦gimpを抜ける。

gimpが初回起動時に自動的に~/.gimpというディレクトリを掘って、必要なファイルを置いてくれるので、そのうち日本語を使うために必要なものを編集する。

/usr/share/gimpにある、gtkrc.jaを~/.gimp/gtkrcとしてコピーしちゃうのがてっ取り早いのだが、要は
font = "-adobe-helvetica-medium-r-normal--*-80-*-*-*-*-*-*"
のようになっているのを
fontset = "-adobe-helvetica-medium-r-normal--*-80-*-*-*-*-*-*,*"
のように、fontをfontsetに変えればよいだろう。

さらに、export GDK_CONV=/usr/share/gtk/などとすると、日本語のメニューが使えるようだ(オレはbashなんでね。Cシェル系の人はそれらしくやってちょ)。menuの内容そのものは/usr/share/gtkに各種置いてあるので、参考にして関西弁でもピカチュウ語でも好きに作れるそうだ(笑) でも、現時点でパッケージ置場に置いてあるgimpのソースパッケージは普通にmakeするとgtkconvを含めないので注意だ。

さぁ、次はSANEを入れて、SCSI接続なスキャナをGIMPのPlug-inから使えるようにしよう。


メール 戻る