22.8.4 Вызов метода ввода

Функции чтения событий вызывают текущий метод ввода, если таковой имеется (см. Методы ввода). Если значение input-method-function не равно nil, то оно должно быть функцией; когда read-event считывает печатаемый символ (включая SPC) без битов модификатора, он вызывает эту функцию, передавая символ в качестве аргумента.

Переменная: input-method-function

Если это не nil, его значение указывает на текущую функцию метода ввода.

Предупреждение: не привязывайте эту переменную с помощью let. Она часто локальна для буфера, и если вы привяжете ее вокруг чтения ввода (что и произойдет, когда вы будете привязывать ее), переключение буферов асинхронно, пока Emacs ожидает, приведет к восстановлению значения в неправильном буфере.

Функция метода ввода должна вернуть список событий, которые должны использоваться в качестве ввода. (Если список равен nil, это означает, что ввода нет, поэтому read-event ожидает другого события.) Эти события обрабатываются до событий в unread-command-events (см. Мелкие функции ввода событий). События, возвращенные функцией метода ввода, не передаются снова в функцию метода ввода, даже если они являются печатаемыми символами без битов модификатора.

Если функция метода ввода вызывает read-event или read-key-sequence, она должна сначала привязать input-method-function к nil, чтобы предотвратить рекурсию.

Функция метода ввода не вызывается при чтении второго и последующих событий последовательности клавиш. Таким образом, эти символы не подлежат обработке методом ввода. Функция метода ввода должна проверять значения overriding-local-map и overriding-terminal-local-map; если одна из этих переменных не равна nil, метод ввода должен поместить свой аргумент в список и вернуть этот список без дальнейшей обработки.