日本語OpenVMS
ユーザ・キー定義 利用者の手引き


前へ 次へ 目次 索引


5.7 ACTIONの意味

ACTIONには上に示したものに加えてGOTOが存在します。GOTOは特殊な ACTIONで,KEYBINDファイルの中のSTATEを移動するために使われます。STATEについては, 第 5.8 節 を参照してください。GOTOは,1つのキーにつき最後のACTIONとして1つだけ指定することができます。

5.8 STATEとは?

IMLIBでは,1つのキーに,場面により異なる機能を定義することができるようになっています。これを可能にするのがSTATEです。キー定義は,必ずどれかのSTATE に属しますので,1つのキーには存在するSTATEの数だけ違った機能を持たせることができます。

アプリケーションを起動したとき最初に属するSTATEは"initial"です。STATEの名称のうち"initial"だけはシステムで定義されていて,KEYBINDファイルの中には必ず1つだけSTATE "initial"が存在します。

その他のSTATEの名称はユーザが自由に決めることができます。ただし,STATEの名称とGOTO ACTIONにより指定される次のSTATEは互いに対応がとれていなければなりません。

5.9 STATEの記述方法

例 5-3 にKEYBINDファイルの中でSTATEを記述する例を示します。1つのSTATEはSTATE "string" =で始まり,END;で終了します。この間に書かれるキーとACTIONの関係は,そのSTATE内でのみ有効です。

例 5-3 STATEの記述例

    STATE "initial" = 
        PF1 : START, GOTO "input_state"; 
    END; 
 
    STATE "input_state" = 
        PF1 : DONE, GOTO "initial"; 
        TYPING_KEYS : ECHO; 
    END; 

この例を順に説明します。

  1. 最初のSTATEは"initial"です。このキー定義によると"initial"では[PF1]キーだけが定義されています。

  2. [PF1]キーを押すと,STARTが実行されて入力が始まる状態になります。またGOTOによって"input_state"に移ります。

  3. "input_state"ではTYPING_KEYS(表示されるキー) を押すとECHOが実行されます。

  4. 再び[PF1]キーを押すとDONEによって入力状態を終了して,GOTO "initial"によって"initial"に戻ります。

5.10 マクロの使い方

KEYBINDファイルのキー名の記述には,マクロを使うことができます。マクロを使うことによってキーの割り当ての変更が容易になります。例 5-4 はマクロを使わないKEYBINDファイルの記述例です。同じ記述をマクロを使って書くと 例 5-5 のようになります。

マクロを使うと,あるキーに割り当てられていた機能を他のキーへ変更することが,マクロの変更だけでできるようになります。マクロ部分だけを別ファイルとすることもできますので,本体を記述したファイルを変更せずにキーの割り当てだけを変更できます。

また,マクロを使うと複数のSTATEで定義されたキーの変更が容易になります。キー定義はSTATEごとに行わなければなりません。したがって,複数のSTATEで同じ機能を実行しているようなときに,キー割り当てを変更しようとすると,マクロを使っていない場合は,各STATEに書かれている該当するキーをすべて書き換えなければなりません。しかし,例 5-5 のようにマクロを使って記述すれば,マクロ部分をhiragana_henkan = CTRL_Lというように変更するだけで,すべての STATEにおけるひらがな変換のキーは[Ctrl/L]に変えることができます。

コンパイラは,マクロが展開できなくなるまで,あるいは展開された文字列がキー名に一致するまでマクロ展開を繰り返します。ただし,マクロ展開は最大10回までに制限されています。マクロ展開が10回を超えると,コンパイラはエラーを出力して終了します。

例 5-4 マクロを使わないキー定義

! キー定義本体 
STATE "x" = 
   .
   .
   .
    CTRL_L : HIRAGANA; 
   .
   .
   .
END; 
 
STATE "y" = 
   .
   .
   .
    CTRL_L : HIRAGANA; 
   .
   .
   .
END; 

例 5-5 マクロを使ったキー定義

! マクロ部分 
hiragana_henkan = CTRL_L; 
 
! キー定義本体 
STATE "x" = 
   .
   .
   .
    hiragana_henkan : HIRAGANA; 
   .
   .
   .
END; 
 
STATE "y" = 
   .
   .
   .
    hiragana_henkan : HIRAGANA; 
   .
   .
   .
END; 


第 6 章
KEYBINDコンパイラ

この章ではKEYBINDコンパイラの使い方について説明します。

コンパイラのエラー・メッセージについての詳細は,付録 C を参照してください。

6.1 KEYBINDコンパイラとは?

KEYBINDコンパイラは,テキスト形式のKEYBINDファイルをバイナリ形式のKEYBIND ファイルに変換します。

アプリケーションは,バイナリ形式のKEYBINDファイルからキー定義に関する情報を得ます。したがって,テキスト形式でKEYBINDファイルを作った後は,必ず KEYBINDコンパイラによって,バイナリ形式に変換しておかなければなりません。

6.2 KEYBINDコンパイラのコマンドと修飾子

KEYBINDコンパイラは KEYBINDコマンドで起動されます。KEYBINDコマンドは以下のようなフォーマットになっています。


 
    $ KEYBIND [/修飾子] ファイル名 
 

以下にKEYBINDコマンドの例を示します。


 
     $ KEYBIND /LIST MY_KEYBIND 
 

この例では,MY_KEYBIND.DATというテキスト形式のKEYBINDファイルをMY_KEYBIND.IM$DATというバイナリ形式のKEYBIND ファイルに変換します。またMY_KEYBIND.LISという名前のリスト・ファイルが作られます。

6.2.1 修飾子

以下にKEYBINDコマンドの修飾子の説明をします。

6.2.2 ファイル名

テキスト形式のKEYBINDファイルのファイル名を指定します。ファイル・タイプを省略したときは,.DATがファイル・タイプとして使われます。

6.3 新しい ACTION を含んだファイル

IMLIB 1.1 で新しくサポートされた RESTORE_ECHO ACTION および半角カナ変換ACTION (HANKAKU_KANA,CLA_HANKAKU_KANA)を使用したファイルをコンパイルすると,出力されるバイナリ形式のKEYBINDファイルのサポートレベルが 2になります。アプリケーションは KEYBINDファイルを読み込むときに,自分がサポートしているアクションに従ったレベルを指定します。このとき読み込もうとした KEYBIND ファイルのサポートレベルが,アプリケーションの指定したサポートレベルより高い場合は,KEYBINDファイルの読み込みは失敗します。

PROFILE の DEC-JAPANESE.KEY.keybind で指定された KEYBIND ファイルの読み込みに失敗した場合は,最大9回まで再試行が行われます。再試行に使われるファイル名は上記のINDEX に_1,_2,などを付けた INDEX で指定できます。


第 7 章
KEYBINDファイル作成例

この章では JVMS キーの KEYBIND ファイルを例にして,KEYBIND ファイルを作るときの注意点について書かれています。

JVMS キーの KEYBIND ファイルを 例 7-1 に示します。説明のため実際に提供されているものと違っている部分があります。

例 7-1 JVMSキーのKEYBINDファイル

! 
! JVMS変換キー定義ファイル(システムテンプレート) 
! 
gold            = CTRL_G;(1)
kakutei         = CTRL_N; 
kanji_henkan    = NULL, gold + CTRL_K;(2)
hiragana_henkan = CTRL_L; 
katakana_henkan = CTRL_K; 
zenkaku_henkan  = CTRL_F; 
hankaku_henkan  = gold + CTRL_F; 
kigou_henkan    = GS; 
oomoji          = VOID;(3)
komoji          = VOID; 
ji_bunsetsu     = CTRL_P; 
zen_bunsetsu    = gold + CTRL_P; 
tansyuku        = US; 
sintyou         = gold + US; 
zen_kouho       = gold + (NULL, CTRL_L);(4)
kaijo           = CTRL_N; 
sakujo          = DEL; 
hidari          = LEFT; 
migi            = RIGHT; 
 
%INCLUDE (IM$KEY_COMMON_BODY.DAT)(5)
 

  1. CTRL_G を gold というマクロ名に定義します。

  2. NULL または gold + CTRL_K を kanji_henkan というマクロ名に定義します。

  3. VOID はどのキーにもマッチしないキーのシンボルです。JVMS キーには oomoji や komoji に対応するキーが定義されていないので,VOID を使います。oomoji,komoji は本体で使われているので,ここでこの行を省略することはできません。

  4. zen_kouho というマクロ名は gold + NULL または gold + CTRL_L を意味します。

  5. ディレクティブ%INCLUDEによってキー定義ファイルの本体 (IM$KEY_COMMON_BODY.DAT)を読み込みます。

IM$KEY_COMMON_BODY.DAT の内容を 例 7-2 に示します。

例 7-2 IM$KEY_COMMON_BODY.DAT の内容

 
! 
! JVMS/EVEJ/LEIA変換キー定義ファイル本体(システムテンプレート)
! 
! 
! 初期状態 
! 
STATE "initial" = 
 TYPING_KEYS : START, ECHO, GOTO "inputting";(1)
END; 
! 
! 入力状態 
! 
STATE "inputting" = 
 kanji_henkan : CONVERT, GOTO "kk_converting";(2)
 hiragana_henkan : HIRAGANA, GOTO "converting";(3)
 katakana_henkan : KATAKANA, GOTO "converting"; 
 zenkaku_henkan : ZENKAKU, GOTO "converting"; 
 hankaku_henkan : HANKAKU, GOTO "converting"; 
 kigou_henkan : SYMBOL, GOTO "converting"; 
 oomoji  : UPPER, GOTO "converting"; 
 komoji  : LOWER, GOTO "converting"; 
 kakutei  : DONE, GOTO "initial"; 
 sakujo  : DELETE; 
 hidari  : MOVE_LEFT;(4)
 migi  : MOVE_RIGHT; 
 TYPING_KEYS : ECHO; 
END; 
! 
! かな変換状態 
! 
STATE "converting" = 
 kanji_henkan : CONVERT, GOTO "kk_converting"; 
 hiragana_henkan : HIRAGANA; 
 katakana_henkan : KATAKANA; 
 zenkaku_henkan : ZENKAKU; 
 hankaku_henkan : HANKAKU; 
 kigou_henkan : SYMBOL; 
 oomoji  : UPPER; 
 komoji  : LOWER; 
 kaijo  : RESTORE_STRING, GOTO "inputting";(5)
 TYPING_KEYS : DONE, START, ECHO, GOTO "inputting";(6)
END; 
! 
! 漢字変換状態 
! 
STATE "kk_converting" = 
 kanji_henkan : NEXT_CANDIDATE; 
 hiragana_henkan : CLA_HIRAGANA; 
 katakana_henkan : CLA_KATAKANA; 
 zenkaku_henkan : ZENKAKU; 
 hankaku_henkan : HANKAKU; 
 kigou_henkan : SYMBOL; 
 oomoji  : UPPER; 
 komoji  : LOWER; 
 ji_bunsetsu : NEXT_CLAUSE; 
 zen_bunsetsu : PREV_CLAUSE; 
 tansyuku : SHORTEN_CLAUSE; 
 sintyou  : EXTEND_CLAUSE; 
 zen_kouho : PREV_CANDIDATE; 
 kaijo  : RESTORE_STRING, GOTO "inputting"; 
 TYPING_KEYS : DONE, START, ECHO, GOTO "inputting"; 
END; 
 

  1. STATE"initial" には TYPING_KEYS だけしか定義されていません。画面に表示されるキー以外が入力されるとアプリケーションが動作を決めます。画面に表示されるキーが入力されると入力を START し,入力されたキーを ECHO して,STATE は "inputting" に移ります。

  2. マクロ kanji_henkan に定義されたキーが入力されると CONVERT によってかな漢字変換を行ない,STATE は "kk_converting" に移ります。

  3. マクロ hiragana_henkan, katakana_henkan などに定義されたキーが入力されるとそれぞれの動作を行ない,STATEは "converting" に移ります。

  4. ここで,定義されている MOVE_LEFT, MOVE_RIGHT は入力文字列の編集時のキー定義です。通常の編集時のカーソルの移動はアプリケーションが定義するので,ユーザはキー定義を行ないません。

  5. RESTORE_STRING は,一度変換を始めた文字列をもう一度入力文字列に戻します。STATE も "inputting" に戻すことで,文字列の編集関係のキーが使えるようになります。

  6. STATE が "converting" の時に TYPING_KEYS が入力されると現在の状態が確定して新規に文字列が入力されます。
    DONE によって変換は確定し,初期状態に戻りますので,DONE を省略することはできません。DONEを省略するとSTARTがエラーになります。


前へ 次へ 目次 索引