root-window, off-the-spot, over-the-spot, on-the-spot †で,「nicolatter でその場入力・その場変換ができない」という問題について. この問題が発生しているのはどうも gtk+ アプリだけのようである. kterm や XEmacs などの非 gtk+ アプリではその場入力・その場変換できている. また,kinput2 では gtk+ アプリでもその場入力・その場変換できている. というわけで,手元の本で XIM の入力方法について調べてみる. X11R5 が出始めた時代の本なので,内容は古くなってると思うが,基本的なところはそれほど変わっていないだろう.
一口に「その場入力・その場変換」と言っても over-the-spot と on-the-spot の2通りのメソッド(?)が存在する. nicolatter で kterm や XEmacs での入力では,テキスト入力ウィンドウと変換ウィンドウのフォントが違っているので,おそらく over-the-spot なのであろう. kinput2 では,それらしきライブラリがリンクされていないにも関わらずアンチエイリアジングフォントで表示されている. つまり,on-the-spot 入力になっているものと思われる. 一方,nicolatter では,off-the-spot 入力になってしまっている. つまり,状況としては
かつ
というところなのかなぁ. 親指シフト,動作せり †親指シフトキーボードでローマ字入力というのも悲しいので,nicolatter のソースコードと kinput2 のソースコードを追っかける. jserver との接続の部分を見比べてみると,両者をには特に大きな違いはない. nicolatter のほうが jl_open_lang() を使っていて,kinput2 は jl_open() を使っているが,結局はヘッダのマクロで吸収されているので同じことなのである. 最初は C++ と C ライブラリの API ミスマッチかと思ったが,そういうわけではないようである. 試しに C で同様のプログラムをちょろっと書いてみて動かしてみたところ,nicolatter と同様,jserver に接続できない状態. で,「ポート番号が狂ってるのかな」と kinput2 が動いている状態でおもむろに netstat を取ってみると…
引数に -jserver localhost って書いたのに. kinput2 のうそつき. というわけで,nicolatter のほうも強引に UNIX ドメインソケットで接続するよう,jl_open_lang() の引数をいじると… 無事動作しました. けど,オンザスポット,というか,その場変換できないんだよなぁ. あと,文節調整のキープレス・リリースがクライアント側に伝わってたりして,まだなんか妙. まぁ,今日のところは「とりあえず動いた」ということでよしとしよう. |