Час від часу спостерігаю несподівану поведінку під час редагування тексту. Моє перше звернення, як правило, використовувати C-h kдля з'ясування, які функції викликаються заданою послідовністю клавіш. Однак іноді документація суперечить спостережуваній поведінці. У цих випадках я зазвичай припускаю, що якийсь інший пакет приєднався до цієї функції або послідовності ключів і змінює свою поведінку.
Як я можу дізнатися, які функції залучаються до моєї послідовності ключів?
Один із прикладів, з якими я стикався нещодавно, - це те, що я натиснув "клавішу, а лапки було вставлено на початку та в кінці активної області. У мене була підозра, що це не поведінка Emacs за замовчуванням, тому я C-h k "з'ясовував, яка функція насправді викликається.
У describe-keyдокументації мені сказано, що self-insert-commandвикликається функція , яка є вбудованою функцією. Якщо коротко розповісти, після деякої кількості спроб і помилок я зміг визначити, що поведінка викликана 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+ стандартні гачки == повна поведінка (більш-менш). Звичайно, це іноді залишає багато можливостей, але це все-таки набагато прозоріше, ніж будь-яка інша складна програмна система, про яку я знаю.


electric-pair-modeактивовано тільки в деяких основних режимах? Ви все ще бачитеself-insert-commandдля"коли ви робите вC-h kтой час якelectric-pair-modeактивний?