Spec-Zone.ru › Elisp

Низкоуровневая привязка клавиш

Исторически 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

Spec-Zone.ru

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