Информация о том, где сочетания клавиш связаны с функциями, не хранится в Emacs. На самом деле ответ обычно не определен.
Часто привязки клавиш устанавливаются как побочный эффект второстепенного режима или через перехват мод. Привязка клавиш для второстепенных режимов часто хранится в некоторой переменной, например comint-mode-map
. Эта раскладка клавиатуры включается установкой переменной режима comint-mode
. Однако эта карта режимов является глобальной переменной, и любой, где угодно, может добавить к ней привязки клавиш. Таким образом, выполнение того, что вы хотите, по существу отслеживает, кто устанавливает переменную с определенным значением. Аналогично для привязок клавиш, которые устанавливаются локально с помощью ловушек режима (используя local-set-key
). Кроме того, вы даже можете установить привязки клавиш через файловые переменные . Все это просто говорит о том, что привязки клавиш в Emacs эфемерны.
Самое лучшее, что вы можете сделать, - это найти функцию, связанную с клавишей, и посмотреть в этом файле (или любых связанных файлах, если режим разделен на несколько файлов).
Поиск связывания ключей в emacs довольно сложен из-за множества способов, которыми вы можете устанавливать / связывать нажатия клавиш (глобально, основной режим, второстепенные режимы, переопределение второстепенных режимов, локальный для буферов, свойства текста и т. Д.). Для быстрого обзора, ознакомьтесь с этой документацией .
Вы можете написать такую функцию, чтобы просматривать второстепенные режимы, чтобы увидеть, где может быть установлена привязка клавиш, но, конечно, мой первый тест показал, что привязка клавиш там не была определена. Но, возможно, код будет поучительным.
(defun guess-where-keybinding-is-defined (key)
"try to guess where a key binding might be defined"
(interactive (list (read-key-sequence "Describe key: ")))
(let ((bindings (minor-mode-key-binding key))
found)
(while (and bindings (not found))
(if (setq found (caar bindings))
(find-function (cdar bindings)))
(setq bindings (cdr bindings)))))
Есть ли конкретная проблема, которую вы пытаетесь решить (кроме этого вопроса)?