Emacs содержит множество карт клавиш, но в любой момент времени активны лишь несколько карт клавиш. Когда Emacs получает ввод от пользователя, он преобразует событие ввода (см. Карты клавиш для преобразования последовательностей событий) и ищет привязку клавиш в активных картах клавиш.
Обычно активными картами клавиш являются: (i) карта клавиш, заданная
свойством keymap, (ii) карты клавиш включенных второстепенных режимов, (iii)
локальная карта клавиш текущего буфера и (iv) глобальная карта клавиш, в указанном
порядке. Emacs ищет каждую входную последовательность клавиш во всех этих
картах клавиш.
Из этих обычных карт клавиш наивысший приоритет имеет карта, заданная
текстовым свойством или свойством наложения keymap в точке, если она есть. (Для
события ввода от мыши Emacs использует позицию события вместо точки;
см. Поиск в активных картах клавиш.)
Следующими по приоритету являются карты клавиш, заданные включенными второстепенными режимами.
Эти карты клавиш, если они есть, задаются переменными
emulation-mode-map-alists,
minor-mode-overriding-map-alist и
minor-mode-map-alist. См. Управление активными картами клавиш.
Следующей по приоритету является локальная карта клавиш буфера, содержащая
привязки клавиш, специфичные для буфера. Минибуфер также имеет локальную
карту клавиш (см. Введение в минибуферы). Если в точке присутствует текстовое
свойство или свойство наложения local-map, оно задает локальную карту клавиш для
использования вместо локальной карты клавиш буфера по умолчанию.
Локальная карта клавиш обычно задается основным режимом буфера, и
каждый буфер с тем же основным режимом использует одну и ту же локальную карту клавиш.
Следовательно, если вы вызываете keymap-local-set (см. Команды для привязки клавиш),
чтобы изменить локальную карту клавиш в одном буфере, это также влияет на локальные
карты клавиш в других буферах с тем же основным режимом.
Наконец, глобальная карта клавиш содержит привязки клавиш, которые
определены независимо от текущего буфера, например C-f. Она
всегда активна и привязана к переменной global-map.
Помимо вышеуказанных обычных карт клавиш, Emacs предоставляет специальные способы
для программ, чтобы сделать другие карты клавиш активными. Во-первых, переменная
overriding-local-map задает карту клавиш, которая заменяет обычные
активные карты клавиш, за исключением глобальной карты клавиш. Во-вторых, терминально-локальная
переменная overriding-terminal-local-map задает
карту клавиш, которая имеет приоритет над всеми другими картами клавиш
(включая overriding-local-map); обычно это используется для
модальных/транзиентных привязок клавиш (функция set-transient-map
предоставляет удобный интерфейс для этого). Подробнее см. Управление активными картами клавиш.
Активация карт клавиш — не единственный способ их использования. Карты клавиш также
используются другими способами, например, для преобразования событий внутри
read-key-sequence. См. Карты клавиш для преобразования последовательностей событий.
Список некоторых стандартных карт клавиш см. в Стандартные карты клавиш.
Эта функция возвращает список активных карт клавиш, которые использовались бы
командным циклом в текущих обстоятельствах для поиска последовательности клавиш.
Обычно она игнорирует overriding-local-map и
overriding-terminal-local-map, но если olp не равен nil,
то она учитывает их. position может быть либо
позицией события, возвращаемой event-start, либо позицией
в буфере, и может изменить карты клавиш, как описано для
keymap-lookup (см. keymap-lookup).