23.7 Активные карты клавиш

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. См. Карты клавиш для преобразования последовательностей событий.

Список некоторых стандартных карт клавиш см. в Стандартные карты клавиш.

Функция: current-active-maps &optional olp position

Эта функция возвращает список активных карт клавиш, которые использовались бы командным циклом в текущих обстоятельствах для поиска последовательности клавиш. Обычно она игнорирует overriding-local-map и overriding-terminal-local-map, но если olp не равен nil, то она учитывает их. position может быть либо позицией события, возвращаемой event-start, либо позицией в буфере, и может изменить карты клавиш, как описано для keymap-lookup (см. keymap-lookup).