イベント読み取り関数は、もしあればカレント入力メソッドを呼び出します(入力メソッドを参照)。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
なら入力メソッドは引数をリストにputして、それ以上の処理を行わずにそのリストをリターンするべきです。