kinput2-v2fix4 + rxvt の謎の動き(オレだけ?)


RedHat 5.1でコンダラ環境を作りはじめたとき、JRPMのftpサイトからrxvt-2.4.4-1.i386.rpmを持ってきたのだが、なんとしてもkinput2で日本語の入力がコンソールからはできなかった。

~/.inputrcに

set convert-meta off
set meta-flag on
set output-meta on

といくら書いておいても、ktermではkinput2が使えるにもかかわらず、rxvtではShift+Spaceを押してもkinput2がアクティブにならなかったのだ。JRPMのpakkage MLで質問してみたところ、例によって永繁さんが修正してrxvt-2.4.4-3.src.rpmをputしてくださった。これできちんとShift+Spaceでkinput2が立ち上がるようになったのは実に幸せだったのだが…

jed + Canna の悲しみに書いたとおり、Ctrl+Oでkinput2がなぜか立ち上がってしまうという悲しい現象に悩まされることになってしまったのだ。

最初はやはりrxvtを疑っていたのだが、どうもいろいろ調べていると、その他の入力可能なエリア、たとえばモジラなどでも、Ctrl+Oを押すと、kinput2がやはり立ち上がってしまうでわないか。てことは、こりゃrxvtじゃなくてkinput2のほうになにかあるに違いない。

で、いろいろと実験してみた。kinput2は、かな漢字変換サーバ(たとえばcannaserverとかjserverとか)とのやりとりに、kinput、ximp、xim と3種のプロトコルを持っていて、主に使っているのはximだ。で、これらのプロトコルごとに、どのキーをトリガにするかをリソースファイルで指定することができる。

おそらくCtrl+Oが何かの間違いでトリガとして認識されてしまっているに違いない、と思ったオレは、リソースファイルをいじってみることにした。
/usr/X11R6/lib/X11/app-defaults/Kinput2がそのリソースファイルなのだが、これにはもともと

*ConversionStartKeys: Shiftspace
と書いてある。というか、このキーしかトリガとして指定されてないぞ! で、イヤな予感のとおり、このファイルをどういじっても、Shift+Spaceでkinput2を起動しないようにはできても、Ctrl+Oで起動しないようにはとうとうできなかった。なのに、起動時に kinput2 -xim などとしてximを無効にして試すと、Shift+SpaceもCtrl+Oも両方とも効かなくなってしまうのだ。うむ〜。

かくなる上は、デバッガで追いかけてみるしかあるまい、というわけで、
kinput2-v2fix4-4.src.rpmをもらってきて、デバッグ・オプション付きでmakeしてみることにした。このパッケージってすごく良くできてて、Canna用、Wnn用、Canna-Wnn両用のパッケージを同時に作ってくれちゃうのだ。が、オレはWnnは使ってないのでWnn用の開発環境がなく、通してmakeするとエラーになってしまった。

で、仕方なくWnnに関係する部分を全部コメントアウトして、Canna版だけを作るようにSPECファイルを書き替えてみた。これでデバッガで追う準備はできたわけだ。

で、追いかけてみると、現象そのものはすぐに判明した。kinput2起動後にリソースファイルを読み、トリガとなるキーを判定し初期化する際に、kinput2のリソースファイルの記述にかかわらず、どういうわけだかCannaにお伺いをたてて、トリガとなるキーを問い合わせているのだ。

場所としては lib/Canna.c の中の GetTriggerKeys() という関数でそれをやっている。で、問い合わせを受けたCannaの側では正直に、Ctrl+Oがトリガだよ、と答えてくれちゃうのだ。実はCtrl+OはコンソールからCannaを使う際のデフォルトのトリガなので、当然問い合わせられればそう答えちゃうよねぇ。

そもそもリソースファイルにShift+Spaceでいけよ、と記述があり、それを確かに読んで初期化したにもかかわらず、さらにCannaに問い合わせるなぞ、いらんことして騒ぎをデカくするだけのどっかのマネージャみたい(笑)

思うに、オレのCannaの環境が変、という可能性は捨て切れないんだが、実はSlackwareにPJEを入れて使っていたときもこの症状は出てたんだよね。でいくつかのMLで聞いてもみたんだけど、なんか同じ症状の人がいなくて解決には至らなかったのだ。とはいえ、PJEにしろJRPMにしろ、黙ってCannaのパッケージをブチ込んだだけでなにもいじってない状況で、この現象が出てしまうんだから困るよねぇ。もしも同じ症状が出てる人がいたら、是非メールください(笑)

とりあえず、GetRriggerKeys()を全部コメントにするとか、#if 0しちゃうとかの大ナタは副作用が心配だったので、Cannaに問い合わせるところまではそのままにしておくことにし、Cannaからの戻り値をだまってNULLで潰して知らん顔する(笑)という即席パッチをあててもう一度makeしてみることにした。

rxvt、モジラ、Tcl/Tkなど、X上でkinput2を受け付ける箇所で試してみたが、どうやら不都合はないようだ。懸案のjed + Cannaで文節の伸び縮みも、Ctrl+I、Ctrl+Oでサクサクだし。嬉しいぜ。

ただ、これはあくまで対症療法なのと、現象のサンプル数が1、つまりオレだけで、オレの環境が腐っている可能性は常にある。だもんでパッケージにはしないで、パッチそのものと、SPECファイルだけをパッケージ置場に置いといた。もしも奇特な人がいて、Canna + rxvtを使っているけどオレと同じ症状は出ないけど(つまりCtrl+Oはフリー)試しにパッチをあててmakeしたら不都合が出たor出なかったってのを教えてくれると嬉しい。

問題がないなら、ベースの方でなぜCannaに問い合わせるのか、不要な処理なんじゃないの?と聞けるしね。


メール 戻る