Функции поиска клавиш
Здесь описаны функции и переменные, связанные с поиском клавиш.
- Функция: keymap-lookup keymap key &optional accept-defaults no-remap position
-
Эта функция возвращает определение key в keymap. Все остальные функции, описанные в этой главе и выполняющие поиск клавиш, используют
keymap-lookup. Вот примеры:(keymap-lookup (current-global-map) "C-x C-f") ⇒ find-file(keymap-lookup (current-global-map) "C-x C-f 1 2 3 4 5") ⇒ 2Если строка или вектор key не является допустимой последовательностью клавиш согласно префиксным клавишам, указанным в keymap, значит, он слишком длинный и в конце содержит дополнительные события, которые не помещаются в одну последовательность клавиш. В этом случае значением будет число событий в начале key, образующих полную клавишу.
Если accept-defaults не равен
nil, тоkeymap-lookupучитывает привязки по умолчанию, а также привязки для конкретных событий в key. В противном случаеkeymap-lookupсообщает только о привязках для конкретной последовательности key, игнорируя привязки по умолчанию, если только вы явно не запрашиваете их. (Для этого передайтеtкак элемент key; см. Формат карт клавиш.)Если key содержит метасимвол (не функциональную клавишу), этот символ неявно заменяется двухсимвольной последовательностью: значением
meta-prefix-char, за которым следует соответствующий символ без метапрефикса. Поэтому первый пример ниже обрабатывается путём преобразования во второй пример.(keymap-lookup (current-global-map) "M-f") ⇒ forward-word(keymap-lookup (current-global-map) "ESC f") ⇒ forward-wordАргумент keymap может быть
nil, что означает поиск key в текущих картах клавиш (возвращаемыхcurrent-active-maps, см. Активные карты клавиш); либо это может быть карта клавиш или список карт клавиш, что означает поиск key только в указанных картах клавиш.В отличие от
read-key-sequence, эта функция не изменяет указанные события способами, приводящими к потере информации (см. Ввод последовательностей клавиш). В частности, она не преобразует прописные буквы в строчные и не заменяет события перетаскивания щелчками.Как и обычный цикл команд,
keymap-lookupвыполняет повторный поиск команды, полученной в результате поиска key, в текущих картах клавиш. Однако, если необязательный третий аргумент no-remap не равенnil,keymap-lookupвозвращает команду без переназначения.Если необязательный аргумент position не равен
nil, он задаёт позицию мыши, возвращаемуюevent-startиevent-end, и поиск выполняется в картах клавиш, связанных с этой позицией, а не в keymap. Аргумент position также может быть числом или маркером; в этом случае он интерпретируется как позиция в буфере, и функция использует свойства карты клавиш в этой позиции, а не в точке.
- Команда: undefined
Используется в картах клавиш для отмены привязок клавиш. Вызывает
ding, но не приводит к ошибке.
- Функция: keymap-local-lookup key &optional accept-defaults
-
Эта функция возвращает привязку для key в текущей локальной карте клавиш или
nil, если привязка там не определена.Аргумент accept-defaults управляет проверкой привязок по умолчанию, как и
keymap-lookup(выше).
- Функция: keymap-global-lookup key &optional accept-defaults
-
Эта функция возвращает привязку команды key в текущей глобальной карте клавиш или
nil, если привязка там не определена.Аргумент accept-defaults управляет проверкой привязок по умолчанию, как и
keymap-lookup(выше).
- Функция: minor-mode-key-binding key &optional accept-defaults
-
Эта функция возвращает список всех активных привязок key в второстепенных режимах. Точнее, она возвращает список ассоциаций из пар
(modename . binding), где modename — переменная, включающая второстепенный режим, а binding — привязка key в этом режиме. Если у key нет привязок в второстепенных режимах, значением будетnil.Если первая найденная привязка не является префиксным определением (картой клавиш или символом, определённым как карта клавиш), все последующие привязки из других второстепенных режимов опускаются, поскольку они будут полностью перекрыты. Аналогично, список не включает непрефиксные привязки, следующие за префиксными.
Аргумент accept-defaults управляет проверкой привязок по умолчанию, как и
keymap-lookup(выше).
- Пользовательский параметр: meta-prefix-char
-
Эта переменная задаёт код символа метапрефикса. Она используется для преобразования метасимвола в двухсимвольную последовательность, чтобы его можно было найти в карте клавиш. Для получения полезных результатов значение должно быть префиксным событием (см. Префиксные клавиши). Значение по умолчанию — 27, код ASCII для ESC.
Пока значение
meta-prefix-charостаётся равным 27, поиск клавиш преобразует M-b в ESC b, которая обычно привязана к командеbackward-word. Однако, если установитьmeta-prefix-charравным 24 — коду для C-x, — Emacs будет преобразовывать M-b в C-x b, стандартная привязка которой — командаswitch-to-buffer. (Не делайте этого на самом деле!) Вот иллюстрация того, что произойдёт:meta-prefix-char ; The default value. ⇒ 27(key-binding "\M-b") ⇒ backward-word?\C-x ; The print representation ⇒ 24 ; of a character.
(setq meta-prefix-char 24) ⇒ 24(key-binding "\M-b") ⇒ switch-to-buffer ; Now, typing M-b is ; like typing C-x b. (setq meta-prefix-char 27) ; Avoid confusion! ⇒ 27 ; Restore the default value!Такое преобразование одного события в два происходит только для символов, но не для других типов событий ввода. Поэтому M-F1 — функциональная клавиша — не преобразуется в ESC F1.
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/Functions-for-Key-Lookup.html