Низкоуровневая привязка клавиш
Исторически Emacs поддерживал несколько разных синтаксисов для определения клавиш. Сегодня документированным способом привязки клавиши является синтаксис, поддерживаемый key-valid-p, который используют все функции, такие как keymap-set и keymap-lookup. В этом разделе описываются старый синтаксис и интерфейсные функции; их не следует использовать в новом коде.
define-key (и другие низкоуровневые функции, используемые для переназначения клавиш) понимают несколько разных синтаксисов для клавиш.
- Вектор, содержащий списки клавиш.
-
Можно использовать список, содержащий названия модификаторов и одно базовое событие (символ или название функциональной клавиши). Например,
[(control ?a) (meta b)]эквивалентно C-a M-b, а[(hyper control left)]эквивалентно C-H-left. - Строка символов с модификаторами
-
Внутри Emacs последовательности клавиш часто представлены строками, в которых используются специальные escape-последовательности для модификаторов shift, control и meta (см. Тип строк), но пользователи также могут использовать это представление при переназначении клавиш. Строка вида
"\M-x"интерпретируется как содержащая один M-x,"\C-f"— как содержащая один C-f, а"\M-\C-x"и"\C-\M-x"интерпретируются как содержащие по одному C-M-x. - Вектор символов и символов клавиш
Это другое внутреннее представление последовательностей клавиш. Оно поддерживает более широкий набор модификаторов, чем строковое представление, а также функциональные клавиши. Например, ‘[?\C-\H-x home]’ представляет последовательность клавиш C-H-x home. См. Тип символов.
- Функция: define-key keymap key binding &optional remove
-
Эта функция подобна
keymap-set(см. Изменение привязок клавиш), но понимает только устаревший синтаксис клавиш.Кроме того, у этой функции есть аргумент remove. Если он не равен
nil, определение будет удалено. Это почти то же самое, что задать для определения значениеnil, но есть различие, если у keymap есть родительская карта, а key затеняет такую же привязку в родительской карте. При использовании remove последующие поиски вернут привязку из родительской карты, тогда как при определенииnilпоиск вернётnil.
Ниже перечислены другие устаревшие функции и команды для определения клавиш, а также современные функции, которые следует использовать вместо них в новом коде.
- Команда: global-set-key key binding
Эта функция задаёт для key в текущей глобальной карте привязку binding. Вместо неё используйте
keymap-global-set.
- Команда: global-unset-key key
Эта функция удаляет привязку key из текущей глобальной карты. Вместо неё используйте
keymap-global-unset.
- Команда: local-set-key key binding
Эта функция задаёт для key в текущей локальной карте клавиш привязку binding. Вместо неё используйте
keymap-local-set.
- Команда: local-unset-key key
Эта функция удаляет привязку key из текущей локальной карты. Вместо неё используйте
keymap-local-unset.
- Функция: substitute-key-definition olddef newdef keymap &optional oldmap
Эта функция заменяет olddef на newdef для всех клавиш в keymap, которым назначена привязка olddef. Другими словами, olddef заменяется на newdef везде, где встречается. Функция возвращает
nil. Вместо неё используйтеkeymap-substitute.
- Функция: define-key-after map key binding &optional after
Определяет привязку для key в map со значением binding, как и
define-key, но помещает привязку в map после привязки для события after. Аргумент key должен иметь длину один — быть вектором или строкой, содержащей только один элемент. Аргумент after должен быть одним типом события — символом или знаком, а не последовательностью. Новая привязка помещается после привязки для after. Если after равенtили не указан, новая привязка помещается последней, в конце карты клавиш. Однако новые привязки добавляются перед любой унаследованной картой клавиш. Вместо этой функции используйтеkeymap-set-after.
- Функция: keyboard-translate from to
Эта функция изменяет
keyboard-translate-table, чтобы преобразовывать код символа from в код символа to. При необходимости она создаёт таблицу преобразования клавиатуры. Вместо неё используйтеkey-translate.
- Функция: key-binding key &optional accept-defaults no-remap position
-
Эта функция возвращает привязку для key в соответствии с текущими активными картами клавиш. Если key не определён в картах клавиш, результатом будет
nil. Аргумент accept-defaults управляет проверкой стандартных привязок, как и вlookup-key(см. Функции поиска клавиш). Если no-remap не равенnil,key-bindingигнорирует переназначения команд (см. Переназначение команд) и возвращает привязку, непосредственно указанную для key. Необязательный аргумент position должен быть либо позицией в буфере, либо позицией события, например значениемevent-start; он указывает функции использовать карты, определённые для этой позиции position.Emacs сигнализирует об ошибке, если key не является строкой или вектором.
Вместо этой функции используйте
keymap-lookup.
- Функция: lookup-key keymap key &optional accept-defaults
-
Эта функция возвращает определение key в keymap. Если строка или вектор key не является допустимой последовательностью клавиш с учётом префиксных клавиш, указанных в keymap, значит, она слишком длинная и содержит в конце лишние события, не входящие в одну последовательность клавиш. В таком случае значением будет число событий в начале key, составляющих полную клавишу.
Если accept-defaults не равен
nil, тоlookup-keyучитывает как стандартные привязки, так и привязки для конкретных событий в key. В противном случаеlookup-keyсообщает только о привязках для конкретной последовательности key, игнорируя стандартные привязки, если вы явно не запрашиваете их.Вместо этой функции используйте
keymap-lookup.
- Функция: local-key-binding key &optional accept-defaults
-
Эта функция возвращает привязку для key в текущей локальной карте клавиш или
nil, если она там не определена.Аргумент accept-defaults управляет проверкой стандартных привязок, как и в
lookup-key(выше).Вместо этой функции используйте
keymap-local-lookup.
- Функция: global-key-binding key &optional accept-defaults
-
Эта функция возвращает привязку для команды key в текущей глобальной карте клавиш или
nil, если она там не определена.Аргумент accept-defaults управляет проверкой стандартных привязок, как и в
lookup-key(выше).Вместо этой функции используйте
keymap-global-lookup.
- Функция: event-convert-list list
-
Эта функция преобразует список названий модификаторов и базового типа события в тип события, указывающий их все. Базовый тип события должен быть последним элементом списка. Например:
(event-convert-list '(control ?a)) ⇒ 1 (event-convert-list '(control meta ?a)) ⇒ -134217727 (event-convert-list '(control super f1)) ⇒ C-s-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/Low_002dLevel-Key-Binding.html