前章までは,かな漢字変換のキーの割り当ての変更およびPROFILEの変更という 比較的簡単にキー定義を変更する方法について説明してきました。 この章以降の章では,より細かいキー定義の変更 (入力シーケンスのカスタマイズ)を行う方法が説明されています。
入力シーケンスのカスタマイズは,かな漢字変換入力に関する基本的な知識が必要です。 少しの変更でも,かな漢字変換の動作全体に影響を与えることがありますので,注意してください。
キー定義のシンタックスは 付録 Bを参照してください。
キー定義はキーボード上のキーの名称と,実行される機能(ACTION)の関係を記述した KEYBINDファイルを作ることで行います。 1つのKEYに対して複数のACTIONを定義することも, 複数のキーに対して1つのACTIONを定義することもできます。
例 5-1にKEYBINDファイルの中で,KEYと ACTIONの関係を記述した部分を示します。この例では <Ctrl/K>キーを押すとカタカナ変換, <Ctrl/L>キーを押すとひらがな変換をするように記述されています。 また例の3行目に示されるように, コンマ(,)で区切ることで複数のACTIONを指定することもできます。
CTRL_K : KATAKANA; CTRL_L : HIRAGANA; TYPING_KEYS : START, ECHO;
IMLIBのかな漢字変換キー定義が対象とするキーは,VT280シリーズ端末および VT382端末でサポートされるすべてのキーおよびいくつかの特殊キーです。 IMLIBがサポートするキー名は, 付録 A を参照してください。 IMLIBがサポートするキー名のうち注意が必要なキーについて以下に説明します。
[Ctrl/C]キーは,OpenVMSでは"Cancel"に使われますので, 通常の端末設定では定義した動作を実行させることはできません。
[Ctrl/O]キーは,OpenVMSでは画面出力のON/OFFを切り替える目的で使われますので, 通常の端末設定では定義した動作を実行させることはできません。
[Ctrl/Q]キーは,OpenVMSではフロー・コントロールの"XON"に使われますので, 通常の端末設定では定義した動作を実行させることはできません。
[Ctrl/S]キーは,OpenVMSではフロー・コントロールの"XOFF"に使われますので, 通常の端末設定では定義した動作を実行させることはできません。
[Ctrl/Y]キーは,OpenVMSでは"Interrupt"に使われますので, 通常の端末設定では定義した動作を実行させることはできません。
すべてのキーにマッチします。 どのキーを押しても同じ動作をさせたいときに使用します。
すべての画面に表示されるキー(文字キー,数字キー)にマッチします。
どのキーともマッチしません。マクロ定義において, ある機能にどのキーも定義したくないときに使用します。
KEYBINDファイルには,複数のキーの組合せで1つの機能を実行させたり, 2つのキーに同じ機能を持たせるような記述をすることができます。 例 5-2に組み合わせたキーの記述の例を示します。
複数のキーの組合せで1つの機能を実行させるにはキー名をプラス記号 (+)でつなぎます。例の1行目は,KEYBINDファイルの中の1行を抜き出したもので, <PF1>キーを押した後<KP7>キーを押すことで, カタカナ変換を実行することを指示しています。
2つのキーのどちらを押しても同じ機能を実行させるにはキー名をコンマ (,)でつなぎます。例の2行目は,KEYBINDファイルの中の1行を抜き出したもので, <Ctrl/L>キーを押しても, <Ctrl/H>キーを押してもひらがな変換を実行することを指示しています。
また例の3行目のようにかっこを使ってより複雑なキーの記述をすることもできます。 この例は,<PF1>キーを押した後<Ctrl/F>キーを押しても,あるいは <Ctrl/G>キーを押した後<Ctrl/F>キーを押しても, 半角変換を実行することを指示しています。
PF1 + KP7 : KATAKANA; CTRL_L, CTRL_H : HIRAGANA; (PF1, CTRL_G) + CTRL_F : HANKAKU;
かな漢字変換を行うための個々の機能のことをACTIONと呼びます。 かな漢字変換のキー定義を行う時,キーに対応する機能をACTIONの組合せで記述します。
ACTIONによって実行される機能は,細かく規定されています。 ユーザはACTIONによって,かな漢字変換におけるアプリケーションの動作をコントロールできます。
かな漢字変換を実行しているときには,内部的にいくつかの状態が存在します。 ACTIONの実行は内部状態によって変わりますので, KEYBINDファイルをカスタマイズするユーザはこれらの内部状態を意識しておかなければなりません。 図 5-1は,内部状態と状態間の遷移を説明しています。
かな漢字変換を行っていない状態です。この状態にあるときアプリケーションは, かな漢字変換に関係しないアプリケーションの機能を実行します。 たとえば,ユーザがかな漢字変換に関係しないところでカーソルを移動しているときが, この状態にあたります。カーソル移動はアプリケーションの機能であり,IMLIBは関係しません。
ユーザがかな漢字変換をするために, 「ひらがな」や「ローマ字」を入力しているときがこの状態です。 アプリケーションによっては, かな漢字変換の対象となる部分を高輝度やボールド表示にすることがあります。 入力途中で間違いに気づいたときの編集は,入力状態で行われます。 漢字変換をした後に入力の間違いに気づき,入力文字列に戻したときもこの状態になります。
入力した文字列を「カタカナ」,「全角」などに変換した状態です。 さらに,RESTORE_ECHOアクションによって一時的に変換が解除されたときもこの状態になります。
かな漢字変換を行った後の状態です。文節縮小,文節移動, 文節カタカナ変換などを行っているときはこの状態にあたります。
図 5-1に示される状態の間の遷移は, ACTIONやその他の条件によって起こります。 ここでは,状態間の遷移を引き起こす条件について説明します。
表 5-1はACTIONによる状態間の遷移を示す表です。 この表は,ACTIONを実行する前の状態と実行後の状態をまとめたものです。 表の中で使われている表記は以下の通りです。
カーソル移動に関連したACTIONです。MOVE_LEFT, MOVE_RIGHT, HEAD, TAIL, DELETE がこれにあたります。
単純な変換を行うACTIONです。 HIRAGANA, KATAKANA, HANKAKU_KANA, HANKAKU, ZENKAKU, SYMBOL, UPPER, LOWERがこれにあたります。
漢字変換中の文節に関連したACTIONです。CLA_HIRAGANA, CLA_ KATAKANA, CLA_HANKAKU_KANA, CLA_ZENKAKU, CLA_HANKAKU, NEXT_ CLAUSE, PREV_CLAUSE, SHORTEN_CLAUSE, EXTEND_CLAUSE, NEXT_ CANDIDATE, PREV_CANDIDATE がこれにあたります。
今の状態でこのようなACTIONは許されないことを示します。KEYBINDファイルに, このようなACTIONが記述されていると,KEYBINDコンパイラは警告を出します。
このACTIONが来たときにはアプリケーションは何も実行しないことを示します。
ACTION | 初期状態 | 入力状態 | かな変換状態 | 漢字変換状態 |
---|---|---|---|---|
START | 入力状態(1) | error | error | error |
START_SELECTED | 入力状態(1) | error | error | error |
ECHO | error | 入力状態(2) | error | error |
カーソル | error | 入力状態(2) | error | error |
かな変換 | error | かな変換状態(3) | かな変換状態(6) | かな変換状態(13) |
CONVERT | error | 漢字変換状態(4) | 漢字変換状態(7) | no action |
DONE | no action | 初期状態(5) | 初期状態(8) | 初期状態(11) |
文節操作 | error | error | error | 漢字変換状態(10) |
RESTORE_ STRING | error | no action | 入力状態(9) | 入力状態(12) |
RESTORE_ECHO | error | かな変換状態(3) | かな変換状態(6) | かな変換状態(13) |
新しい入力を開始します。STARTの後,状態は「入力状態」に移ります。
アプリケーションのセレクトの部分を変換対象にします。START_ SELECTEDの後, 状態は「入力状態」に移ります。
入力されたキーに対応した文字を表示します。 自動ローマ字かな変換が指定されているときには, ローマ字をかなに変換して表示します。 入力されたキーがかなキーのときの表示方法(半角カタカナ,全角ひらがななど) はアプリケーションの任意です。もしその文字が表示できる文字でないときには, 何も実行しません。アプリケーションは関係するバッファにこの文字を格納します。 この機能は「入力状態」にあるときのみ有効です。
カーソルの直前の文字を削除します。この機能は「入力状態」にあって, カーソルが変換領域の中にあるときのみ有効です。
カーソルを左に移動します。この機能は「入力状態」にあって, カーソルが変換領域の中にあるときのみ有効です。
カーソルを右に移動します。この機能は「入力状態」にあって, カーソルが変換領域の中にあるときのみ有効です。
カーソルを変換領域の先頭に移動します。 この機能は「入力状態」にあるときのみ有効です。
カーソルを変換領域の末尾に移動します。 この機能は「入力状態」にあるときのみ有効です。
変換領域の中のアルファベットとカタカナをひらがなに変換します。
変換領域の中のアルファベットとひらがなをカタカナに変換します。
変換領域の中のアルファベットとひらがな,カタカナを半角カナに変換します。
変換領域の中の半角文字を全角に変換します。
変換領域の中の全角文字を半角に変換します。
変換領域の中のアルファベットの小文字を大文字に変換します。
変換領域の中のアルファベットの大文字を小文字に変換します。
変換領域の中のシンボル変換を実行します。JIS区点入力,DEC漢字コード入力ができます。
変換領域に対してかな漢字変換を実行します。 この機能は「入力状態」または「かな変換状態」にあるときのみ有効です。
現在の文節に対して次候補を得る操作を実行します。 この機能は「漢字変換状態」にあるときのみ有効です。
現在の文節に対して前候補を得る操作を実行します。 この機能は「漢字変換状態」にあるときのみ有効です。
現在の文節中のカタカナをひらがなに変換します。 この機能は「漢字変換状態」にあるときのみ有効です。
現在の文節中のひらがなをカタカナに変換します。 この機能は「漢字変換状態」にあるときのみ有効です。
現在の文節中のひらがな,カタカナを半角カナに変換します。 この機能は「漢字変換状態」にあるときのみ有効です。
現在の文節中の半角のアルファベットを全角に変換します。 この機能は「漢字変換状態」にあるときのみ有効です。 現在のかな漢字変換の方法では,この機能はサポートできません。
現在の文節中の全角のアルファベットを半角に変換します。 この機能は「漢字変換状態」にあるときのみ有効です。 現在のかな漢字変換の方法では,この機能はサポートできません。
現在の文節を文末方向に1つ移動します。 この機能は「漢字変換状態」にあるときのみ有効です。
現在の文節を文頭方向に1つ移動します。 この機能は「漢字変換状態」にあるときのみ有効です。
現在の文節を縮小します。この機能は「漢字変換状態」にあるときのみ有効です。
現在の文節を拡大します。この機能は「漢字変換状態」にあるときのみ有効です。
「初期状態」に戻ります。「漢字変換状態」にある場合は,変換の学習を行います。 バッファの内容をすべてクリアし,画面上のビデオ属性を消します。
変換領域内を入力文字列に戻して,「入力状態」になります。 これにより,文字列の編集ができるようになります。
変換領域内を入力文字列に戻して,「かな変換状態」へ移ります。 次の入力文字が変換操作以外の入力であれば,確定後,入力に応じた操作を行います。
そのキーが定義されていないことを明示的に指定します。NONEを指定したときには, NONEに対して他のACTIONを同時に指定することはできません。 NONEで他のACTIONを同時に指定したときの結果は保証されません。
ACTIONには上に示したものに加えてGOTOが存在します。 GOTOは特殊なACTIONで,KEYBINDファイルの中のSTATEを移動するために使われます。 STATEについては,第5.8節を参照してください。 GOTOは,1つのキーにつき最後の ACTION として1つだけ指定することができます。
IMLIBでは,1つのキーに,場面により異なる機能を定義することができるようになっています。 これを可能にするのがSTATEです。キー定義は,必ずどれかのSTATEに属しますので, 1つのキーには存在するSTATEの数だけ違った機能を持たせることができます。
アプリケーションを起動したとき最初に属するSTATEは"initial"です。 STATEの名称のうち"initial"だけはシステムで定義されていて, KEYBINDファイルの中には必ず1つだけSTATE "initial"が存在します。
その他のSTATEの名称はユーザが自由に決めることができます。 ただし,STATEの名称とGOTO ACTIONにより指定される次の STATEは互いに対応がとれていなければなりません。
例 5-3にKEYBINDファイルの中で
STATEを記述する例を示します。1つのSTATEはSTATE "string" =
で始まり,END;
で終了します。
この間に書かれるキーとACTIONの関係は,そのSTATE内でのみ有効です。
STATE "initial" = PF1 : START, GOTO "input_state"; END; STATE "input_state" = PF1 : DONE, GOTO "initial"; TYPING_KEYS : ECHO; END;
この例を順に説明します。
KEYBINDファイルのキー名の記述には,マクロを使うことができます。 マクロを使うことによってキーの割り当ての変更が容易になります。 例 5-4はマクロを使わないKEYBINDファイルの記述例です。 同じ記述をマクロを使って書くと例 5-5のようになります。
マクロを使うと,あるキーに割り当てられていた機能を他のキーへ変更することが, マクロの変更だけでできるようになります。 マクロ部分だけを別ファイルとすることもできますので, 本体を記述したファイルを変更せずにキーの割り当てだけを変更できます。
また,マクロを使うと複数のSTATEで定義されたキーの変更が容易になります。
キー定義はSTATEごとに行わなければなりません。
したがって,複数のSTATEで同じ機能を実行しているようなときに,
キー割り当てを変更しようとすると,
マクロを使っていない場合は,各STATEに書かれている該当するキーをすべて
書き換えなければなりません。
しかし,例 5-5のようにマクロを使って記述すれば,
マクロ部分をhiragana_henkan = CTRL_L
というように変更するだけで,
すべてのSTATEにおけるひらがな変換のキーは[Ctrl/L]に変えることができます。
コンパイラは,マクロが展開できなくなるまで,あるいは展開された文字列が キー名に一致するまでマクロ展開を繰り返します。 ただし,マクロ展開は最大 10回までに制限されています。 マクロ展開が10回を超えると,コンパイラはエラーを出力して終了します。
! キー定義本体 STATE "x" = . . . CTRL_L : HIRAGANA; . . . END; STATE "y" = . . . CTRL_L : HIRAGANA; . . . END;
! マクロ部分 hiragana_henkan = CTRL_L; ! キー定義本体 STATE "x" = . . . hiragana_henkan : HIRAGANA; . . . END; STATE "y" = . . . hiragana_henkan : HIRAGANA; . . . END;