Next: , Previous: , Up: Other I/O   [Contents][Index]


6.20.7 Single-key input

単一の印刷可能な文字を取得したい場合は、 key を使用できます。 文字が key に使用できるかどうかを確認するには、 key? を使用できます。

key ( – char  ) core “key”

1 文字 char を受け取ります(ただし表示はされません)。

key-ior ( – char|ior  ) gforth-1.0 “key-ior”

1 文字 char を受け取ります (ただし表示はされません)。 エラーまたは割り込みの場合は、 代わりに、 負数の ior を返します。

key? ( – flag  ) facility “key-question”

文字が key で使用可能かどうかを判断します。 文字が使用可能な場合、flag は true です。 次に key を呼び出すと、 文字が生成されます。 一度 key? が true を返すと、 その後に key または ekey を呼び出す前に key? を呼び出した場合も true が返されます。

xkey? ( – flag  ) xchar “x-key-query”
\ 訳注: UTF-8 な環境では key? は xkey? のエイリアスです。
\ xchar 文字が xkey で使用可能かどうかを判断します(たぶん) 

印刷可能な文字と印刷不可能な文字を組み合わせて処理したい場合は、ekey とそのファミリーを使用して実行できます。 ekey は、 ekey>char で文字に変換するか、 ekey>fkey でキー識別子に変換する必要があるキーボード・イベントを生成します。

ekey を使用するための一般的なコードは以下のようになります:

ekey ekey>xchar if ( xc )
  ... \ do something with the character
else ekey>fkey if ( key-id )
  case
    k-up                                  of ... endof
    k-f1                                  of ... endof
    k-left k-shift-mask or k-ctrl-mask or of ... endof
    ...
  endcase
else ( keyboard-event )
  drop \ just ignore an unknown keyboard event type
then then
ekey ( – u  ) facility-ext “e-key”

キーボード・イベント u を受け取りす(実装定義のエンコーディングです) 。

ekey>xchar ( u – u false | xc true  ) xchar-ext “e-key-to-x-char”

可能であれば、 キーボード・イベント u を xchar xc に変換します。

ekey>char ( u – u false | c true  ) facility-ext “e-key-to-char”

可能であれば、 キーボード・イベント u を文字 c に変換します。 注意: 非 ASCII 文字は、 ekey>charekey>fkey の両方から false が返ることに注意してください。 利用可能な場合は、 ekey>char の代わりに ekey>xchar を使用します。

ekey>fkey ( u1 – u2 f  ) facility-ext “e-key-to-f-key”

u1 が特殊キー(special key)セット内のキーボード・イベントの場合、 キーボード・イベント u1 をキー ID u2 に変換し、 true を返します。それ以外の場合は、 u1 と false を返します。

ekey? ( – flag  ) facility-ext “e-key-question”

キーボード・イベントが利用可能な場合は True。

カーソル・キーのキー識別子は以下のとおりです:

k-left ( – u  ) facility-ext “k-left”
k-right ( – u  ) facility-ext “k-right”
k-up ( – u  ) facility-ext “k-up”
k-down ( – u  ) facility-ext “k-down”
k-home ( – u  ) facility-ext “k-home”

別名 Pos1

k-end ( – u  ) facility-ext “k-end”
k-prior ( – u  ) facility-ext “k-prior”

別名 PgUp

k-next ( – u  ) facility-ext “k-next”

別名 PgDn

k-insert ( – u  ) facility-ext “k-insert”
k-delete ( – u  ) facility-ext “k-delete”

著者の xterm 上ではDEL キーで、 Backspace ではありません

ファンクション・キー(別名キーパッド・キー)のキー識別子は以下のとおりです:

k-f1 ( – u  ) facility-ext “k-f-1”
k-f2 ( – u  ) facility-ext “k-f-2”
k-f3 ( – u  ) facility-ext “k-f-3”
k-f4 ( – u  ) facility-ext “k-f-4”
k-f5 ( – u  ) facility-ext “k-f-5”
k-f6 ( – u  ) facility-ext “k-f-6”
k-f7 ( – u  ) facility-ext “k-f-7”
k-f8 ( – u  ) facility-ext “k-f-8”
k-f9 ( – u  ) facility-ext “k-f-9”
k-f10 ( – u  ) facility-ext “k-f-10”
k-f11 ( – u  ) facility-ext “k-f-11”
k-f12 ( – u  ) facility-ext “k-f-12”

k-f11k-f12 はそれほど広くには利用可能ではないことに注意してください。

これらのキー識別子をさまざまなシフト・キーのマスクと組み合わせることができます:

k-shift-mask ( – u  ) facility-ext “k-shift-mask”
k-ctrl-mask ( – u  ) facility-ext “k-ctrl-mask”
k-alt-mask ( – u  ) facility-ext “k-alt-mask”

ASCII 値を持つキーが多数あるため、 特殊キーとして報告される可能性は低いですが、 以下のキーとシフト・キーの組み合わせは特殊キーとして報告される可能性があります:

k-enter ( – u  ) gforth-1.0 “k-enter”
k-backspace ( – u  ) gforth-1.0 “k-backspace”
k-tab ( – u  ) gforth-1.0 “k-tab”

さらに、 キーおよびその他のイベントには以下のキー・コードがあります:

k-winch ( – u  ) gforth-1.0 “k-winch”

ユーザーがウィンドウ・サイズを変更したときに生成される可能性のあるキー・コード。

k-pause ( – u  ) gforth-1.0 “k-pause”
k-mute ( – u  ) gforth-1.0 “k-mute”
k-volup ( – u  ) gforth-1.0 “k-volup”
k-voldown ( – u  ) gforth-1.0 “k-voldown”
k-sel ( – u  ) gforth-1.0 “k-sel”

Androidでの選択(selections)のキー・コード

k-eof ( – u  ) gforth-1.0 “k-eof”

注意: Forth システムに ekey>fkey とキー識別子のワードがある場合でも、 そのキーが必ずしも利用可能であるとは限らず、 すべてのキーとシフト・マスクとの可能なすべての組み合わせを報告できるとは限らないことに注意してください。 したがって、キーやキーの組み合わせが押せない場合や認識されない場合でも、プログラムが使えるようにプログラムを作成してください。

例: 古いキーボードには F11 キーと F12 キーがないことがよくあります。 xterm で Gforth を実行すると、xterm は多数の組み合わせ(例: Shift-Up)を捕捉しますが、それを Gforth に渡すことはありません。 最後に、Gforth は現在、 複数のシフト・キーの組み合わせを認識して報告しません(そのため、上記の例の shift-ctrl-left のケースは決して入力されません)。

Gforth は、ANSI 端末で利用可能なさまざまなキーを認識します(MS-DOS では、 その動作を実現するには ANSI.SYS ドライバーが必要です)。 これは、 そのようなキーが押されたときに ANSI 端末が送信するエスケープ・シーケンスを認識することによって機能します。 他のエスケープ・シーケンスを送信する端末を使用している場合、 Gforth では有益な結果は得られません。 他の Forth システムは異なる方法で動作する可能性があります。

Gforth には、 ファンクション・キーの名前を出力するためのいくつかのワードも用意されています:

fkey. ( u –  ) gforth-1.0 “fkey-dot”

ファンクション・キー u の文字列表現を出力します。 U はファンクション・キー(おそらく修飾子マスク付き)でなければなりません。 そうでない場合は例外が発生する可能性があります。

simple-fkey-string ( u1 – c-addr u  ) gforth-1.0 “simple-fkey-string”

c-addr u は、ファンクション・キー u1 の文字列名です。 修飾子マスクのない単純なファンクション・キーに対してのみ機能します。 現在、 単純なファンクション・キーでない u1 では例外を生成します。


Next: Line input and conversion, Previous: Terminal output, Up: Other I/O   [Contents][Index]