Переназначение команд
Можно использовать специальный вид привязки клавиш для переназначения одной команды на другую, не указывая последовательность клавиш, привязанную к исходной команде. Для использования этой функции создайте привязку клавиш для последовательности, начинающейся с фиктивного события remap, за которым следует имя команды, которую вы хотите переназначить; для привязки укажите новое определение (обычно имя команды, но возможно любое другое допустимое определение для привязки клавиш).
Например, предположим, что режим My предоставляет специальную команду my-kill-line, которая должна вызываться вместо kill-line. Для этого его карта клавиш режима должна содержать следующее переназначение:
(define-key my-mode-map [remap kill-line] 'my-kill-line)
Затем, когда my-mode-map активен, если пользователь набирает C-k (стандартная глобальная последовательность клавиш для kill-line) Emacs вместо этого выполнит my-kill-line.
Обратите внимание, что переназначение происходит только через активные карты клавиш; например, размещение переназначения в карте префиксных клавиш, например, ctl-x-map обычно не оказывает никакого эффекта, так как такие карты клавиш сами по себе не активны. Кроме того, переназначение работает только через один уровень; в следующем примере,
(define-key my-mode-map [remap kill-line] 'my-kill-line) (define-key my-mode-map [remap my-kill-line] 'my-other-kill-line)
kill-line не переназначается на my-other-kill-line. Вместо этого, если обычная привязка клавиш указывает kill-line, она переназначается на my-kill-line; если обычная привязка указывает my-kill-line, она переназначается на my-other-kill-line.
Чтобы отменить переназначение команды, переназначьте ее на nil; например,
(define-key my-mode-map [remap kill-line] nil)
- Функция: command-remapping command &optional position keymaps
-
Эта функция возвращает переназначение для command (символ), учитывая текущие активные карты клавиш. Если command не переназначен (что обычно и есть), или не является символом, функция возвращает
nil.positionможет необязательно указать позицию буфера или позицию события для определения используемых карт клавиш, как вkey-binding.Если необязательный аргумент
keymapsнеnil, он указывает список карт клавиш, в которых следует искать. Этот аргумент игнорируется, еслиpositionнеnil.
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/Remapping-Commands.html