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