Активные карты клавиш
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).
Copyright © 1990-1996, 1998-2026 Free Software Foundation, Inc.
Licensed under the GNU GPL license.
https://www.gnu.org/software/emacs/manual/html_node/elisp/Active-Keymaps.html