Клавиши-префиксы
Клавиша-префикс — это последовательность клавиш, привязкой которой является карта клавиш. Карта клавиш определяет, что делать с последовательностями клавиш, продолжающими клавишу-префикс. Например, C-x — это клавиша-префикс, для которой используется карта клавиш, также хранящаяся в переменной ctl-x-map. Эта карта клавиш задаёт привязки для последовательностей клавиш, начинающихся с C-x.
Некоторые стандартные клавиши-префиксы Emacs используют карты клавиш, которые также находятся в переменных Lisp:
-
esc-map— глобальная карта клавиш для клавиши-префикса ESC. Таким образом, глобальные определения всех метасимволов фактически находятся здесь. Эта карта также является определением функцииESC-prefix. -
help-map— глобальная карта клавиш для клавиши-префикса C-h. -
mode-specific-map— глобальная карта клавиш для клавиши-префикса C-c. Эта карта фактически является глобальной, а не специфичной для режима, но её имя даёт полезную информацию о C-c в выводе команды C-h b (display-bindings), поскольку эта клавиша-префикс в основном используется для привязок, специфичных для режима. -
ctl-x-map— глобальная карта клавиш, используемая для клавиши-префикса C-x. Эта карта доступна через ячейку функции символаControl-X-prefix. -
mule-keymap— глобальная карта клавиш, используемая для клавиши-префикса C-x RET. -
ctl-x-4-map— глобальная карта клавиш, используемая для клавиши-префикса C-x 4. -
ctl-x-5-map— глобальная карта клавиш, используемая для клавиши-префикса C-x 5. -
2C-mode-map— глобальная карта клавиш, используемая для клавиши-префикса C-x 6. -
tab-prefix-map— глобальная карта клавиш, используемая для клавиши-префикса C-x t. -
vc-prefix-map— глобальная карта клавиш, используемая для клавиши-префикса C-x v. -
goto-map— глобальная карта клавиш, используемая для клавиши-префикса M-g. -
search-map— глобальная карта клавиш, используемая для клавиши-префикса M-s. - Другие клавиши-префиксы Emacs — это C-x @, C-x a i, C-x ESC и ESC ESC. Для них используются карты клавиш без специальных имён.
Привязка клавиши-префикса к карте клавиш используется для поиска события, следующего за клавишей-префиксом. (Вместо этого она может быть символом, определение функции которого является картой клавиш. Эффект тот же, но символ служит именем клавиши-префикса.) Таким образом, привязкой C-x является символ Control-X-prefix, в ячейке функции которого хранится карта клавиш для команд C-x. (Эта же карта клавиш является значением ctl-x-map.)
Определения клавиш-префиксов могут находиться в любой активной карте клавиш. Определения C-c, C-x, C-h и ESC как клавиш-префиксов находятся в глобальной карте, поэтому эти клавиши-префиксы всегда доступны. Основные и дополнительные режимы могут переопределить клавишу как префикс, добавив её определение в качестве клавиши-префикса в локальную карту или карту режима. См. Активные карты клавиш.
Если клавиша определена как префикс более чем в одной активной карте, то различные определения фактически объединяются: сначала идут команды, определённые в картах клавиш дополнительных режимов, затем — в определении префикса локальной карты, а после них — команды из глобальной карты.
В следующем примере мы делаем C-p клавишей-префиксом в локальной карте клавиш так, чтобы C-p была идентична C-x. Тогда привязкой для C-p C-f становится функция find-file, как и для C-x C-f. В отличие от этого, последовательность клавиш C-p 9 не найдена ни в одной активной карте клавиш.
(use-local-map (make-sparse-keymap))
⇒ nil
(keymap-local-set "C-p" ctl-x-map)
⇒ (keymap #^[nil nil keymap ...
(keymap-lookup nil "C-p C-f")
⇒ find-file
(keymap-lookup nil "C-p 9")
⇒ nil
- Функция: define-prefix-command symbol &optional mapvar prompt
-
Эта функция подготавливает symbol к использованию в качестве привязки клавиши-префикса: она создаёт разреженную карту клавиш и сохраняет её как определение функции для symbol. Впоследствии привязка последовательности клавиш к symbol превратит эту последовательность в клавишу-префикс. Возвращаемое значение —
symbol.Эта функция также задаёт symbol как переменную, значением которой является карта клавиш. Однако если mapvar не-
nil, она задаёт вместо этого mapvar как переменную.Если prompt не-
nil, эта строка становится общей строкой подсказки для карты клавиш. Строку подсказки следует задавать для карт клавиш меню (см. Определение меню).
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/Prefix-Keys.html