Spec-Zone.ru › Elisp

Поиск по ключу

Поиск по ключу — это процесс поиска привязки последовательности нажатий клавиш из заданной раскладки. Выполнение или использование привязки не является частью поиска по ключу.

Поиск по ключу использует только тип события каждого события в последовательности нажатий; остальная часть события игнорируется. Фактически, последовательность нажатий клавиш, используемая для поиска по ключу, может обозначать событие мыши только своими типами (символ), а не всем событием (список). См. События ввода. Такая последовательность нажатий клавиш недостаточна для command-execute , но ее достаточно для поиска или перепривязки ключа.

Когда последовательность нажатий клавиш состоит из нескольких событий, поиск по ключу обрабатывает события последовательно: находится привязка первого события, и она должна быть раскладкой; затем привязка второго события находится в этой раскладке, и так далее, пока не будут использованы все события в последовательности нажатий. (Привязка, найденная таким образом для последнего события, может или не может быть раскладкой.) Таким образом, процесс поиска по ключу определяется в терминах более простого процесса поиска одного события в раскладке. Как это делается, зависит от типа объекта, связанного с событием в этой раскладке.

Давайте будем использовать термин элемент раскладки для описания значения, найденного при поиске типа события в раскладке. (Это не включает строку элемента и другие дополнительные элементы в элементе раскладки для пункта меню, потому что lookup-key и другие функции поиска по ключу не включают их в возвращаемое значение.) Хотя любой объект Lisp может храниться в раскладке как элемент раскладки, не все из них имеют смысл для поиска по ключу. Вот таблица значимых типов элементов раскладки:

nil

nil означает, что события, используемые до сих пор в процессе поиска, образуют неопределённый ключ. Когда раскладка вообще не упоминает тип события и не имеет стандартной привязки, это эквивалентно привязке nil для этого типа события.

команда

Используемые до сих пор события в процессе поиска образуют полный ключ, и команда является его привязкой. См. Что такое функция.

массив

Массив (либо строка, либо вектор) — это макрос клавиатуры. События, используемые до сих пор в процессе поиска, образуют полный ключ, а массив является его привязкой. См. Макросы клавиатуры для получения дополнительной информации.

раскладка

Используемые до сих пор события в процессе поиска образуют префиксный ключ. Следующее событие последовательности нажатий ищется в раскладке.

список

Значение списка зависит от его содержимого:

  • Если CAR списка является символом keymap, то список является раскладкой и обрабатывается как раскладка (см. выше).
  • Если CAR списка является lambda, то список является лямбда-выражением. Предполагается, что это функция, и она обрабатывается как таковая (см. выше). Для корректного выполнения в качестве привязки ключа эта функция должна быть командой — она должна иметь спецификацию interactive. См. Определение команд.
символ

Определение функции символа используется вместо символа. Если это тоже символ, то этот процесс повторяется любое количество раз. В конечном итоге это должно привести к объекту, который является раскладкой, командой или макросом клавиатуры.

Обратите внимание, что раскладки и макросы клавиатуры (строки и векторы) не являются допустимыми функциями, поэтому символ с раскладкой, строкой или вектором в качестве определения функции недопустим в качестве функции. Однако он допустим как привязка ключа. Если определение является макросом клавиатуры, то символ также допустим в качестве аргумента command-execute (см. Интерактивный вызов).

Символ undefined заслуживает особого упоминания: он означает, что ключ следует рассматривать как неопределённый. Строго говоря, ключ определён, а его привязкой является команда undefined; но эта команда делает то же, что делается автоматически для неопределённого ключа: она звонит в колокольчик (вызывая ding), но не сигнализирует об ошибке.

undefined используется в локальных раскладках, чтобы переопределить глобальную привязку ключа и сделать ключ локально неопределённым. Локальная привязка nil не смогла бы сделать этого, потому что не переопределила бы глобальную привязку.

любой другой тип

Если найден любой другой тип объекта, то события, используемые до сих пор в процессе поиска, образуют полный ключ, а объект является его привязкой, но привязка не может быть выполнена как команда.

Короче говоря, элемент раскладки может быть раскладкой, командой, макросом клавиатуры, символом, ведущим к одному из них, или nil.

Copyright © 1990-1996, 1998-2022 Free Software Foundation, Inc.
Licensed under the GNU GPL license.
https://www.gnu.org/software/emacs/manual/html_node/elisp/Key-Lookup.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API