tgifの日本語テキストのカーソル位置の話

tgifは古めのアプリケーションではあるが、 私は今でもVine Linux上でそれなりに使っている。 ところが、VineLinuxの最近のリリースでは、 日本語編集時にカーソルの位置が 本来の場所を指さなくなってしまっている。

たとえば、「あいう」という文字列を編集しようとすると、 カーソル移動のキーを押しても、 表示されるカーソルの位置が「あ」の手前から動かなかったりする。 (でも実際に入力してみると文字の挿入位置は移動されている)

脳内カーソルで何とか補完できなくもないが、 やはり不便なので何とかすることにした。

方法

tgifソースのfont.c内にテキストの幅を計算する関数がある。 問題は、この関数内で正しい文字コードを与えていないため、 XTextWidth16と言う関数から、 正しい幅をもらえないことにある。

そこで、ソース内のfont.cで、 テキスト描画の時と同様に0x7fのマスクを掛けるようにした。 (下記のパッチ参照)。
(使ってみると、 カーソルが意図した位置に出るようになり、 とりあえず動いているようなので、 これでOKとする)

ファイル

VineLinux用になっているが、手を加えた部分は ほんの少しなので、パッチのファイルを見れば、 どのような変更かすぐに分かると思う。

その他

実際良く分かっていないので、間違っているかも知れないし、 ちゃんと国際化するか、他のライブラリに頼るかするべきなのかも知れない。 ただまあ、「動いているみたいだからOK」という程度。

Vine Linux 5.0のtgifの問題に関しては別に書くことにする。

追記