Next: , Previous: , Up: Reading Input   [Contents][Index]


20.8.2 Reading One Event

read-event,read-charread-char-exclusiveは、コマンド入力にたいするもっとも低レベルの関数です。

Function: read-event &optional prompt inherit-input-method seconds

この関数はコマンド入力の次のイベントを読み取り、リターンする。必要ならイベントが利用可能になるまで待機する。

リターンされるイベントはユーザーから直接のイベントかもしれないし、またはキーボードマクロからのイベントかもしれない。イベントはキーボードの入力コーディングシステム(Terminal I/O Encodingを参照)により復号されない。

オプション引数promptが非nilの場合、それはエコーエリアにプロンプトとして表示される文字列である。nilの場合、read-eventは入力待ちを示すメッセージを何も表示せず、エコーを行うことによりプロンプトの代用とする。エコーで表示されるのはカレントコマンドに至ったイベントや読み取られたイベントの説明である。The Echo Areaを参照のこと。

inherit-input-methodが非nilの場合、(もしあれば)非ASCII文字の入力を可能にするためにカレントの入力メソッドが採用される。それ以外では、このイベントの読み取りにたいして入力メソッドの処理が無効になる。

cursor-in-echo-areaが非nilの場合、read-eventはカーソルを一時的にエコーエリアの、そこに表示されているメッセージの終端に移動する。それ以外では、read-eventはカーソルを移動しない。

secondsが非nilの場合、それは入力を待つ最大秒数を指定する数値である。その時間内に入力が何も到着しない場合、read-eventは待機を終えてnilをリターンする。浮動小数点数secondsは待機する秒の分数を意味する。いくつかのシステムではサポートされるのは整数の秒数だけであり、そのようなシステムではsecondsは切り捨てられる。secondsnilの場合、read-eventは入力が到着するのに必要なだけ待機する。

secondsnilの場合、ユーザー入力が到着するのを待つ間、Emacsはアイドル状態にあるとみなされる。この期間中にアイドルタイマー — run-with-idle-timer(Idle Timersを参照) — を実行できる。しかしsecondsが非nilの場合には、非アイドル状態は変更されずに残る。read-eventが呼び出されたときEmacsが非アイドルだった場合、read-eventの処理を通じて非アイドルのままとなる。Emacsがアイドルだった場合(これはアイドルタイマー内部からその呼び出しが行われた場合に起こり得る)は、アイドルのままとまる。

read-eventがヘルプ文字として定義されたイベントを取得した場合、ある状況においてはread-eventがリターンせずに直接イベントを処理することがある。Help Functionsを参照のこと。その他のスペシャルイベント(special events)(Special Eventsを参照)と呼ばれる特定のイベントもread-eventで直接処理される。

以下はread-eventを呼び出してから右矢印キーを押下したとき何が起こるかの例である:

(read-event)
     ⇒ right
Function: read-char &optional prompt inherit-input-method seconds

この関数はコマンド入力の文字を読み取り、それをリターンする。ユーザーが文字以外(たとえばマウスクリックやファンクションキー)のイベントを生成した場合、read-charはエラーをシグナルする。引数はread-eventと同じように機能する。

1つ目の例では、ユーザーは文字1(ASCIIコード49)をタイプしている。2つ目の例では、eval-expressionを使用してミニバッファーからread-charを呼び出すキーボード定義を示している。read-charは、キーボードマクロの直後の文字1を読み取る。その後、eval-expressionはリターン値をエコーエリアに表示する。

(read-char)
     ⇒ 49

;; M-:を使用して以下を評価するものとする
(symbol-function 'foo)
     ⇒ "^[:(read-char)^M1"
(execute-kbd-macro 'foo)
     -| 49
     ⇒ nil
Function: read-char-exclusive &optional prompt inherit-input-method seconds

この関数はコマンド入力の文字を読み取り、それをリターンする。ユーザーが文字以外のイベントを生成した場合、read-char-exclusiveはそれを無視して文字を取得するまで他のイベントを読み取る。引数はread-eventと同じように機能する。

上記でquitを抑制する関数はありません。

Variable: num-nonmacro-input-events

この変数は端末から受信した入力イベント(キーボードマクロにより生成されたイベントは勘定されない)の総数を保持する。

read-key-sequenceと異なり、関数read-eventread-charread-char-exclusiveTranslation Keymapsで説明した変換を行わないことを強調しておきます。単一キー読み取りでこれらの変換を行いたい場合は、関数read-keyを使用してください。

Function: read-key &optional prompt

この関数は1つのキーを読み取る。これはread-key-sequenceread-eventの間の“中間的”な関数である。read-key-sequenceと異なるのは、キーシーケンスではなく単一キーを読み取ることである。read-eventと異なるのは、rawイベントをリターンせずにinput-decode-maplocal-function-key-mapkey-translation-map(Translation Keymapsを参照)に合わせて復号と変換を行うことである。

引数promptはプロンプトとしてエコーエリアに表示する文字列で、nilはプロンプトを表示しないことを意味する。

Function: read-char-choice prompt chars &optional inhibit-quit

この関数は1つの文字を読み取りリターンするためにread-keyを使用する。これはchars(許容される文字のリスト)のメンバー以外の入力を無視する。オプションで、有効な入力を待つ間のquitイベントも無視する。read-char-choice呼び出しの間にhelp-form(Help Functionsを参照)を非nil値にバインドした場合、help-charの押下によりhelp-formが評価され結果が表示される。その後、有効な入力文字、またはキーボードquitの待機を継続する。