Хуки
Хук — это переменная, в которой можно сохранить одну или несколько функций (см. Что такое функция?), чтобы существующая программа вызывала их в определённый момент. В Emacs хуки предусмотрены для настройки. Чаще всего хуки задаются в файле инициализации (см. Файл инициализации), но их могут задавать и программы на Lisp. Список некоторых стандартных переменных-хуков см. в разделе Стандартные хуки.
Большинство хуков в Emacs — это нормальные хуки. Эти переменные содержат списки функций, вызываемых без аргументов. По соглашению, если имя хука заканчивается на «-hook», это означает, что он нормальный. Мы стараемся по возможности делать все хуки нормальными, чтобы ими можно было пользоваться единообразно.
Предполагается, что каждая команда основного режима на одном из последних этапов инициализации запускает нормальный хук, называемый хуком режима. Благодаря этому пользователю легко настроить поведение режима, переопределив уже сделанные режимом присваивания переменных, локальных для буфера. Большинство функций второстепенных режимов также запускают хук режима в конце. Но хуки используются и в других случаях. Например, хук suspend-hook запускается непосредственно перед тем, как Emacs приостанавливает работу (см. Приостановка работы Emacs).
Если имя переменной-хука не заканчивается на «-hook», это, вероятно, означает, что она представляет собой аномальный хук. Он отличается от нормального хука двумя особенностями: его можно вызывать с одним или несколькими аргументами, а его возвращаемые значения могут использоваться тем или иным образом. В документации к хуку указано, как вызываются функции и как используются возвращаемые ими значения. Все функции, добавляемые в аномальный хук, должны соответствовать принятому для него соглашению о вызове. По соглашению, имена аномальных хуков заканчиваются на «-functions».
Если имя переменной заканчивается на «-predicate» или «-function» (в единственном числе), её значением должна быть функция, а не список функций. Как и в случае с аномальными хуками, ожидаемые аргументы и смысл возвращаемого значения у таких хуков-одиночных функций различаются. Подробности приведены в строке документации каждой переменной.
Поскольку хуки (как состоящие из нескольких функций, так и из одной) являются переменными, их значения можно изменять с помощью setq или временно — с помощью let. Однако часто бывает полезно добавить или удалить из хука определённую функцию, сохранив при этом все остальные функции, которые в нём могут содержаться. Для хуков из нескольких функций рекомендуется делать это с помощью add-hook и remove-hook (см. Настройка хуков). Большинство переменных нормальных хуков изначально имеют значение void; add-hook умеет это учитывать. Добавлять хуки глобально или локально для буфера можно с помощью add-hook. Для хуков, содержащих только одну функцию, add-hook не подходит, но для объединения новых функций с хуком можно использовать add-function (см. Добавление советов к функциям Emacs Lisp). Обратите внимание, что некоторые хуки с одной функцией могут быть nil, с чем add-function не умеет работать, поэтому перед вызовом add-function это необходимо проверить.
Copyright © 1990-1996, 1998-2026 Free Software Foundation, Inc.
Licensed under the GNU GPL license.
https://www.gnu.org/software/emacs/manual/html_node/elisp/Hooks.html