23.14 Переназначение команд

Можно использовать особый вид привязки клавиш для переназначения одной команды на другую, без необходимости ссылаться на последовательность (последовательности) клавиш, привязанных к исходной команде. Чтобы использовать эту функцию, создайте привязку клавиш для последовательности, начинающейся с фиктивного события remap, за которым следует имя команды, которую вы хотите переназначить; для привязки укажите новое определение (обычно имя команды, но может быть любое другое допустимое определение для привязки клавиш).

Например, предположим, что мой режим предоставляет специальную команду my-kill-line, которая должна вызываться вместо kill-line. Чтобы это настроить, его карта клавиш должна содержать следующее переназначение:

(keymap-set my-mode-map "<remap> <kill-line>" 'my-kill-line)

Тогда, всякий раз, когда my-mode-map активен, если пользователь нажмет C-k (стандартная глобальная последовательность клавиш для kill-line), Emacs вместо этого выполнит my-kill-line.

Обратите внимание, что переназначение происходит только через активные карты клавиш; например, помещение переназначения в префиксную карту клавиш, такую как ctl-x-map, обычно не дает эффекта, поскольку такие карты клавиш сами по себе не активны. Кроме того, переназначение работает только на одном уровне; в следующем примере:

(keymap-set my-mode-map "<remap> <kill-line>" 'my-kill-line)
(keymap-set 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; например:

(keymap-set my-mode-map "<remap> <kill-line>" nil)
Функция: command-remapping command &optional position keymaps

Эта функция возвращает переназначение для command (символ), исходя из текущих активных карт клавиш. Если command не переназначен (что является обычным случаем) или не является символом, функция возвращает nil. position может опционально указывать позицию буфера или позицию события для определения карт клавиш, как в key-binding.

Если необязательный аргумент keymaps не равен nil, он указывает список карт клавиш для поиска. Этот аргумент игнорируется, если position не равен nil.