Next: Quoted Character Input, Previous: Key Sequence Input, Up: Reading Input
コマンド入力用の最低レベルの関数は、単一イベントを読み取る関数です。
この関数は、必要ならばイベントの到着を待って、 コマンド入力のつぎのイベントを読み取って返す。 イベントは、ユーザーか(実行中の)キーボードマクロから直接得る。
promptが
nil
以外であると、 これはプロンプトとしてエコー領域に表示される文字列であること。 さもなければ、read-event
は 入力待ちであることを示すメッセージを表示せずに、 そのかわりに、現在のコマンドを実行するに至ったイベントや 現在のコマンドが読み取ったイベントをプロンプトとして表示する。 see The Echo Area。suppress-input-methodが
nil
以外であると、 このイベントの読み取りに関しては現在の入力方式を使わない。 入力方式の処理をせずにイベントを読みたいときには、 つねにこのようにすること。input-method-function
を束縛してはならない(下記参照)。変数
cursor-in-echo-area
がnil
以外であると、read-event
は、エコー領域に表示されたメッセージの末尾に カーソルを一時的に移動する。 さもなければ、read-event
はカーソルを移動しない。
read-event
がヘルプ文字と定義されたイベントを受け取ると、 それを返さずにread-event
がイベントを直接処理してしまう場合がある。 see Help Functions。 特殊イベント(special event)と呼ばれる他のイベントもread-event
が直接処理する(see Special Events)。
read-event
を呼んで右矢印のファンクションキーを押すとつぎのようになる。(read-event) right
この関数はコマンド入力の文字を読み取りそれを返す。 文字を得るまで、文字以外のイベントはすべて破棄する。
最初の例では、ユーザーは文字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
read-event
は、あれば現在の入力方式も起動します。
input-method-function
がnil
以外であれば、
それは関数であるはずです。
read-event
が修飾ビットのない(<SPC>を含む)印字文字を読み取ると、
引数としてイベントを渡してその関数を呼び出します。
これが
nil
以外であると、その値は現在の入力方式関数を指定する。注意: この変数を
let
で束縛しないこと。 この変数はしばしばバッファローカルであり、 入力を読む周囲で束縛すると(読者がこれをもっとも束縛しそうなところ)、 Emacsが入力を待っているときにバッファが非同期に切り替わると、 誤ったバッファに値を復元してしまうことがある。
入力方式関数は、入力として使われるイベントのリストを返すべきです。
(リストがnil
であると入力がなかったことを意味し、
read-event
は別のイベントを待つ。)
これらのイベントは、
unread-command-events
内のイベントよりまえに処理されます。
入力方式関数が返したイベントは、それらが修飾ビットがない印字文字であっても、
入力方式関数に再度渡されることはありません。
入力方式関数がread-event
やread-key-sequence
を呼び出すときには、
input-method-function
をnil
に束縛して
再帰呼び出しを防ぐべきです。
キー列の2番目以降のイベントを読むときには、入力方式関数を呼び出しません。
したがって、それらの文字は、入力方式処理の対象ではありません。
入力方式の処理では、
overriding-local-map
とoverriding-terminal-local-map
の値を
検査するのがよいです。
これらの変数のいずれかがnil
以外であるときには、
入力方式ではその引数をリストに入れ、
それ以上処理せずにそのリストを返すべきです。