Активные наборы клавиш
Emacs содержит множество наборов клавиш, но в любой момент времени активны только несколько из них. Когда Emacs получает пользовательский ввод, он преобразует событие ввода (см. Наборы клавиш для преобразования) и ищет привязку клавиши в активных наборах клавиш.
Обычно активными наборами клавиш являются: (i) набор клавиш, указанный свойством keymap, (ii) наборы клавиш включенных второстепенных режимов, (iii) локальный набор клавиш текущего буфера и (iv) глобальный набор клавиш, в указанном порядке. Emacs ищет последовательность нажатия каждой клавиши во всех этих наборах клавиш.
Из этих обычных наборов клавиш, набор с наивысшим приоритетом определяется свойством keymap или наложением (overlay) свойств в точке, если таковые имеются. (Для события ввода мыши Emacs использует позицию события вместо точки; см. Поиск наборов клавиш.)
Следующими по приоритету являются наборы клавиш, указанные включенными второстепенными режимами. Эти наборы клавиш, если таковые имеются, определяются переменными emulation-mode-map-alists, minor-mode-overriding-map-alist, и minor-mode-map-alist. См. Управление активными наборами.
Далее по приоритету следует локальный набор клавиш буфера, содержащий привязки клавиш, специфичные для буфера. Минибуфер также имеет локальный набор клавиш (см. Вступление в минибуферы). Если в точке есть свойство local-map типа текст или наложение (overlay), то оно определяет используемый локальный набор клавиш вместо стандартного локального набора клавиш буфера.
Локальный набор клавиш обычно устанавливается основным режимом буфера, и все буферы с одинаковым основным режимом используют один и тот же локальный набор клавиш. Следовательно, если вы вызовете local-set-key (см. Команды привязки клавиш), чтобы изменить локальный набор клавиш в одном буфере, это также повлияет на локальные наборы клавиш в других буферах с тем же основным режимом.
Наконец, глобальный набор клавиш содержит привязки клавиш, определенные независимо от текущего буфера, такие как 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, или позицией в буфере, и может изменить наборы клавиш, как описано дляkey-binding.
- Функция: key-binding key &optional accept-defaults no-remap position
-
Эта функция возвращает привязку для key в соответствии с текущими активными наборами клавиш. Результат равен
nil, если key не определен в наборах клавиш.Аргумент accept-defaults управляет проверкой на наличие стандартных привязок, как в
lookup-key(см. Функции для поиска клавиш).При переназначении команд (см. Переназначение команд),
key-bindingобычно обрабатывает переназначения команд, чтобы вернуть переназначенную команду, которая фактически будет выполнена. Однако, если no-remap не равноnil,key-bindingигнорирует переназначения и возвращает непосредственно указанную привязку для key.Если key начинается с события мыши (возможно, после события префикса), наборы, которые будут просмотрены, определяются на основе позиции события. В противном случае они определяются на основе значения точки. Однако вы можете переопределить любой из них, указав position. Если position не равно
nil, оно должно быть либо позицией в буфере, либо позицией события, как значениеevent-start. Затем наборы, которые будут просмотрены, определяются на основе position.Emacs сигнализирует об ошибке, если key не является строкой или вектором.
(key-binding "\C-x\C-f") ⇒ find-file
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/Active-Keymaps.html