Spec-Zone.ru › Elisp

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

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

Spec-Zone.ru

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