Spec-Zone.ru › Elisp

Вспомогательные функции режима

Каждая основная команда режима должна завершаться выполнением независимой от режима нормальной функции 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-derived-mode, эти соглашения автоматически соблюдаются. Если вы определяете основной режим «вручную», не используя define-derived-mode, используйте следующие функции для автоматического соблюдения этих соглашений.

Функция: run-mode-hooks &rest hookvars

Основные режимы должны выполнять свою функцию режима с помощью этой функции. Она похожа на 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…

Когда одна команда основного режима вызывает другую, она должна делать это внутри delay-mode-hooks.

Этот макрос выполняет body, но сообщает всем вызовам run-mode-hooks во время выполнения body отложить выполнение своих функций. Функции фактически будут выполнены во время следующего вызова run-mode-hooks после окончания конструкции delay-mode-hooks.

Переменная: change-major-mode-after-body-hook

Это обычная функция, выполняемая run-mode-hooks. Она выполняется до функций режима.

Переменная: after-change-major-mode-hook

Это обычная функция, выполняемая run-mode-hooks. Она выполняется в самом конце каждой правильно написанной команды основного режима.

Copyright © 1990-1996, 1998-2022 Free Software Foundation, Inc.
Licensed under the GNU GPL license.
https://www.gnu.org/software/emacs/manual/html_node/elisp/Mode-Hooks.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API