Каждая команда основного режима должна завершаться выполнением не зависящего от режима нормального хука
change-major-mode-after-body-hook, хука этого режима и нормального хука
after-change-major-mode-hook.
Она делает это, вызывая run-mode-hooks. Если основной режим является
производным режимом, то есть если он вызывает другой основной режим (родительский режим)
в своем теле, он должен делать это внутри delay-mode-hooks, чтобы родитель
не выполнял эти хуки сам. Вместо этого вызов run-mode-hooks в
производном режиме также выполняет хук родителя.
См. Соглашения для основных режимов.
Версии Emacs до Emacs 22 не имели delay-mode-hooks.
Версии до 24 не имели change-major-mode-after-body-hook.
Когда реализованные пользователем основные режимы не используют run-mode-hooks и
не были обновлены для использования этих новых функций, они не будут полностью
следовать этим соглашениям: они могут выполнить хук родителя слишком рано или
не выполнить after-change-major-mode-hook. Это может иметь
нежелательные последствия, такие как предотвращение включения второстепенных режимов,
определенных с помощью define-globalized-minor-mode, в буферах,
использующих эти основные режимы. Если вы столкнулись с таким основным режимом,
пожалуйста, исправьте его, чтобы он соответствовал этим соглашениям.
Когда вы определяете основной режим с помощью define-derived-mode,
он автоматически гарантирует соблюдение этих соглашений. Если вы определяете
основной режим «вручную», не используя define-derived-mode,
используйте следующие функции для автоматической обработки этих соглашений.
Основные режимы должны выполнять свой хук режима, используя эту функцию. Она
похожа на run-hooks (см. Хуки), но также
выполняет change-major-mode-after-body-hook, hack-local-variables
(когда буфер просматривает файл) (см. Локальные переменные файла)
и after-change-major-mode-hook. Последнее, что она делает, — это
вычисляет любые формы :after-hook, объявленные родительскими режимами
(см. Определение производных режимов).
Когда эта функция вызывается во время выполнения формы
delay-mode-hooks, она не выполняет хуки или
hack-local-variables и не вычисляет формы немедленно. Вместо этого
она организует следующий вызов run-mode-hooks для их выполнения.
Когда одна команда основного режима вызывает другую, она должна делать это внутри
delay-mode-hooks.
Этот макрос выполняет body, но сообщает всем вызовам
run-mode-hooks во время выполнения body отложить
выполнение их хуков. Хуки фактически выполнятся во время следующего вызова
run-mode-hooks после завершения конструкции
delay-mode-hooks.
Это нормальный хук, выполняемый run-mode-hooks. Он выполняется
перед хуками режима.
Это нормальный хук, выполняемый run-mode-hooks. Он выполняется
в самом конце каждой правильно написанной команды основного режима.