Время от времени я наблюдаю неожиданное поведение при редактировании текста. Мой первый C-h k
выход - обычно использовать, чтобы узнать, какие функции вызываются данной последовательностью клавиш. Однако иногда документация расходится с наблюдаемым поведением. В этих случаях я обычно предполагаю, что какой-то другой пакет подключился к этой функции или последовательности клавиш и изменяет свое поведение.
Как я могу узнать, какие функции подключаются к моей последовательности клавиш?
Один из примеров, с которым я недавно столкнулся, это то, что я нажал "клавишу, и кавычки были вставлены в начало и конец активной области. У меня было подозрение, что это не было поведением Emacs по умолчанию, поэтому я обычно C-h k "
выяснял, какая функция на самом деле вызывается.
В describe-key
документации сказано self-insert-command
, что вызывается функция , которая является встроенной функцией. Короче говоря, после некоторого количества проб и ошибок я смог определить, чем вызвано поведение electric-pair-mode
. Есть ли в будущем более быстрый способ прийти к такому выводу, чем отключать подозрительные пакеты по одному, пока не будет найден виновник?
electric-pair-mode
был активирован только в некоторых основных режимах? Вы все еще видитеself-insert-command
для"
когда вы делаете вC-h k
то время какelectric-pair-mode
активен?electric-pair-mode
работает путем подключенияpost-self-insert-hook
, а не путем изменения привязки клавиш.C-h k
говорит вам точно, что происходит для нажатия клавиши. Если вы посмотрите на документациюself-insert-command
, там очень четко написано, чтоpost-self-insert-hook
она запускается после завершения команды.after-change-functions
как упоминает Джордон в своем ответе? Документация для функции, вероятно, не будет упоминать этот хук, не так ли?C-h k
+ стандартные зацепки == полное поведение (более или менее). Конечно, иногда это оставляет много возможностей, но все же гораздо прозрачнее, чем любая другая сложная программная система, о которой я знаю.Ответы:
Нет простого способа точно узнать, что будет делать нажатие одной клавиши.
Если вы видите дополнительное поведение, всегда проверяйте общие хуки. См. Список здесь: http://www.gnu.org/software/emacs/manual/html_node/elisp/Standard-Hooks.html.
В большинстве случаев важными являются:
Вам нужно будет проверить эти хуки и посмотреть, какие функции они содержат, чтобы определить, какой из них изменяет ваше поведение.
Если функции в этих хуках не полностью описывают наблюдаемое поведение, обратитесь к функциям за советом, который появится в их документации от
describe-function
.Редактировать: я написал несколько функций, чтобы помочь описать ловушку лучше, чем проходить функции по очереди: https://gist.github.com/jordonbiondo/bad03e44bb053db0f1eb Вы можете использовать
describe-hook
определенные здесь, как и другие функции описания. Вот пример его вывода:И вот весь код на случай, если суть исчезнет:
источник
documentation
обновляется для отражения.Возможно, не полный ответ на ваш вопрос, но пакет
helm-descbinds
помогает вам искать все определенные привязки клавиатуры из представления ярлыка ascii. Для каждого удара, он показывает вам интерактивную функцию , связанную с клавиши быстрого доступа, и вы можете попросить ,helm-descbinds
чтобы описать его, или выполнить его непосредственно из результатов поиска.Вот описание пакета с сайта GitHub:
источник
C-h b
. Мое единственное желание, чтобы я мог перейти к элементу в списке, введя фактическую последовательность клавиш вместо того, чтобы набиратьC
-
c
_
C
-
p