事件读取函数会调用当前输入法(如果有)(see Input Methods)。
如果 input-method-function 的值非 nil,它应当是一个函数;
当 read-event 读取到不带任何修饰位的可打印字符(包括 SPC)时,
会调用该函数,并将该字符作为参数传入。
如果该变量非 nil,其值指定当前输入法函数。
警告: 不要使用 let 绑定此变量。它通常是缓冲区局部的,
如果你在读取输入时绑定它(这也正是你 会 去绑定它的时机),
那么当 Emacs 处于等待状态时异步切换缓冲区,会导致该变量的值在错误的缓冲区中被恢复。
输入法函数应当返回一个事件列表,这些事件将被用作输入。
(如果列表为 nil,表示没有输入,因此 read-event 会等待下一个事件。)
这些事件会在 unread-command-events 中的事件之前被处理(see 事件输入的杂项功能)。
由输入法函数返回的事件不会再次被传给输入法函数,即使它们是不带修饰位的可打印字符。
如果输入法函数调用了 read-event 或 read-key-sequence,
它应当先将 input-method-function 绑定为 nil,以避免递归。
读取按键序列的第二个及后续事件时,不会调用输入法函数。
因此,这些字符不会经过输入法处理。
输入法函数应当检查 overriding-local-map 和
overriding-terminal-local-map 的值;
如果其中任一变量非 nil,输入法应将其参数放入列表并直接返回该列表,不再做其他处理。