特徴

各種入力スタイルのサポート

On-The-Spotスタイルをサポートするのはもちろん、XIMレシーバと併用することでOver-The-SpotOn-The-Rootスタイルにも対応します。

予測入力のサポート

POBoxなどで有名な予測入力をサポートします(入力に対して逐次的に予測候補を表示するにはXIMレシーバが必要です)。

日本語変換エンジンとしてSJ3とCannaをサポート

コンパイル時にSJ3またはCanna†1のどちらかを指定します(予めSJ3またはCannaをインストールしておく必要があります)。

ローマ字かな変換入力・かな入力のサポート

前変換処理を使用してローマ字かな変換などの機能を柔軟に実現できます。またかな入力もサポートしています。

リソースによるカスタマイズ

各種キー定義、前変換規則などを自由に設定できます。

代表的なクライアントでの動作確認

On-The-SpotではOpenOffice 1.1、Mozilla 1.6、Konqueror 3.1(KDE 3.1/Qt 3.2)など、Over-The-SpotではXEmacs 21.4、Emacs 21.3、kterm 6.2などで動作を確認しています。

クライアント毎の動作最適化

XIMの実装に問題があるクライアントの対策として、クライアント毎に動作を最適化することができます。クライアントを修正することなく、より快適に(あるいは正常に)入力できるようになります。

†1 Cannaを選択した場合はRKライブラリ(低レベルAPI)を使用するので、~/.cannaなどの設定は不要です。

予測入力

予測入力とは

POBoxやWnn7で採用されている予測(例示)入力と呼ばれる機能に相当するものです。

この種の予測入力の考え方は、「以前の確定結果」をデータベースに記録しておき、文字が入力されるたびに「入力文字列」をそのデータベースに対してインクリメンタルに検索して、検索結果を候補として選ばせるというものです。予測というよりも、シェルの補完入力や、Emacsのdabbrev-expand(dynamic abbreviation)、SKKの補完機能に近いものと言えます。

予測入力の方法

例えば「お世話になっております」という文字列を入力したいとします。まず「お」と入力すると、XIMレシーバは「お」で始まる予測候補をいくつか表示します。その予測候補のなかに入力したい文字列があれば、Tabキー(デフォルトのキー割り当て)を入力することで、変換状態に移行し、予測候補が変換候補として選択できるようになります。

予測候補のなかに期待しているものがなければ、さらに「せ」を入力します。すると、XIMレシーバは「おせ」で始まる予測候補をいくつか表示します。このように文字を入力するにつれて、予測候補の範囲は徐々に限定されていきます。つまり、文字をいくつか入力してから予測候補を選択することで、キーを押す回数を減らすことができます。

2次予測入力

例えば「ひがし」と入力して変換したとき、変換候補が「東」であったとします。このとき、XIMレシーバは「東」で始まる2次予測候補(例えば「東京」「東海道」など)をいくつか表示します。その予測候補のなかに入力したい文字列があれば、Control-Tabキー(デフォルトのキー割り当て)を入力することで、予測候補が変換候補として選択できるようになります。

予測候補の展開

変換状態でEscapeキー(デフォルトのキー割り当て)を入力すると、その予測候補の読み文字列を前編集文字列に展開して、前編集状態に移行します。ただし、通常の変換候補、2次予測候補を展開した場合は、変換のキャンセルとして扱われます。

問題があるクライアントの対策

世の中のXIMクライアントのなかにはXIM仕様に従っていない「不完全な実装」のものがあります。メジャーなアプリケーションでも正しく実装されているとは限りません。しかし、XIMサーバがクライアント毎に動作を最適化すれば、そのようなクライアントを救済することも可能です。

クライアント毎に動作を最適化するためには、リソースimserver.clientOptimizationを次のような形式で指定します†2

imserver.clientOptimization: \
  "foo" 動作指定1; \n\
  "Bar" 動作指定2, 動作指定3;

"foo""Bar"には実際のクライアントのリソース名(resource name)やリソースクラス(resource class)を指定します。動作指定はカンマで区切り、同時に複数指定することができます。また、リソースの値の途中に改行コードが含まれているのは、記述ミスがあったときに分かりやすくするためであり、本質的には不要です。

以下、クライアント別に問題と対策を説明します。

OpenOffice 1.1のOn-The-Spotスタイル

OpenOfficeはフィードバック(XIMFeedbackの値)の仕様の解釈について、独特な考えをもっているようです。また、フィードバックと文字属性の対応が1.1.0で変更されています。

OpenOffice 1.1.0に適したフィードバックを使用するには、次のようにFeedbackOpenOffice_1_1を指定します。

imserver.clientOptimization: \
  "OpenOffice.org 1.1.0" Feedback=OpenOffice_1_1;

Mozilla 1.3のOn-The-Spotスタイル

Mozilla 1.4(Firebird 0.6)以降では、フィードバックと文字属性の対応が変更されました。詳しくはここを参照してください。

Mozillaは前編集文字列のキャレットを描画しません。キャレットを移動すると実際に挿入位置は移動するのですが、キャレットが描画されていないので、どこに挿入されるか見た目にはわからなくなります。

次のようにReverseCaretを指定すると、入力状態で挿入位置の文字のフィードバックをXIMReverse(反転文字)として描画するので、挿入位置がわかるようになります。

imserver.clientOptimization: \
  "OpenOffice.org 1.1.0" Feedback=OpenOffice_1_1; \n\
  "Mozilla" ReverseCaret;

Konqueror 3.1のOn-The-Spotスタイル

Konquerorではフィードバックの実装がXIM仕様に従ったものになっていません。フィードバックとしてXIMReverse(反転文字)だけを理解しますが、これを指定した文字は黒く塗りつぶされてしまいます。さらに、反転文字を指定できる領域にも制約があるようです。

KDEのアプリケーションでOn-The-Spotスタイルを使用する場合は、Konquerorに限らずKEditなどでも同様の問題があるようです。

次のようにNoFeedbackを指定すると、フィードバックを使用しなくなります。その代わり、変換状態では文節は空白で区切られ、注目文節は"<"と">"で囲まれるようになります。

imserver.clientOptimization: \
  "OpenOffice.org 1.1.0" Feedback=OpenOffice_1_1; \n\
  "Mozilla" ReverseCaret; \n\
  "konqueror" NoFeedback;

なお、Qtは必ずQt 3.1.2以降のバージョンを使用してください。3.1.1では正常に動作しないようです。

そのほかのアプリケーション

ソースコードに付属しているファイルOptimization.adを参考にしてください。

†2 ウィンドウマネージャのなかにはクライアント別に動作や装飾スタイルを設定できるものがありますが、そのような設定と同様なものであると考えていいと思います。

予測辞書の切り替え

クライアント毎に予測辞書(入力履歴)を切り替えることができます†3

リソースimserver.clientOptimizationを次のような形式で指定すると、クライアント毎に予測辞書を指定することができます。

imserver.clientOptimization: \
  "Mozilla" PredictionDatabase="/home/foo/.imserver/mozilla.db"; \n\
  "Emacs" PredictionDatabase="/home/foo/.imserver/emacs.db";

この例では、予測辞書としてMozillaでは/home/foo/.imserver/mozilla.dbを、Emacsでは/home/foo/.imserver/emacs.dbを使用します。また、それ以外のクライアントでは(リソースimserver.predictionDatabaseで指定された)デフォルトの予測辞書を使用します。

なお、この指定は問題があるクライアントの対策で説明した動作指定と併用できます。詳しくはソースコードに付属のファイルOptimization.adを参照してください。

†3 使用するクライアントによって入力する内容が異なる場合、予測辞書を別々にした方が便利なことがあります。

自閉モードと参照モード

状況に応じて、自閉(Autistic)モードと参照(Reference)モードを切り替えることができます。

自閉モード

デフォルトのモードです。このモードは、従来通り、指定した予測辞書だけを使用して、予測候補を提示します。

自閉モードに切り替えるキー割り当ては、入力状態ではリソースimserver.preedit.autisticMode、無入力状態ではリソースimserver.undofix.autisticModeで指定できます(デフォルトはControl-Alt-a)。

このモードでは、状態文字列(入力モードオンのときはリソースimserver.activeLabel、入力モードオフのときはリソースimserver.inactiveLabel)に含まれる「%r」を、リソースimserver.autisticModeで指定する文字列に置換します。

参照モード

このモードは、指定した予測辞書に加えて参照辞書を併用して、予測候補を提示します。参照辞書のパスはリソースimserver.referenceDatabaseで指定することができます(指定しない場合は~/.imserver-reference.dbを使用します)。

参照辞書の生成についてはXwiretapを参照してください。

参照モードに切り替えるキー割り当ては、入力状態ではリソースimserver.preedit.referenceMode、無入力状態ではリソースimserver.undofix.referenceModeで指定できます(デフォルトはControl-Alt-r)。

このモードでは、状態文字列(入力モードオンのときはリソースimserver.activeLabel、入力モードオフのときはリソースimserver.inactiveLabel)に含まれる「%r」を、リソースimserver.referenceModeで指定する文字列に置換します。