Хуки загрузки
Вы можете указать код, который будет выполняться при каждой загрузке библиотеки Emacs, используя переменную after-load-functions:
- Переменная: after-load-functions
Этот нестандартный хук выполняется после загрузки файла. Каждая функция в хуке вызывается с одним аргументом — абсолютным именем только что загруженного файла.
Если вы хотите, чтобы код выполнялся при загрузке определённой библиотеки, используйте макрос with-eval-after-load:
- Макрос: with-eval-after-load library body…
-
Этот макрос обеспечивает вычисление body в конце загрузки файла library при каждой загрузке library. Если library уже загружена, он сразу же вычисляет body.
Обычно library — это признак (то есть символ); в этом случае body вычисляется в конце любого файла, в котором вызывается
(provide library).library также может быть именем файла (то есть строкой). В имени файла library не нужно указывать каталог или расширение. Обычно достаточно указать только имя файла, например:
(with-eval-after-load "js" (keymap-set js-mode-map "C-c C-c" 'js-eval))
Чтобы ограничить список файлов, которые могут запускать вычисление, укажите в library каталог, расширение или и то и другое. Совпадать будет только файл, абсолютное имя которого соответствует всем указанным компонентам имени. В следующем примере вычисление запустит my_inst.elc или my_inst.elc.gz в каком-либо каталоге
..../foo/bar, но не my_inst.el:(with-eval-after-load "foo/bar/my_inst.elc" ...)
Ошибка в body не отменяет загрузку, но препятствует выполнению оставшейся части body.
Как правило, хорошо спроектированные программы на Lisp не должны использовать with-eval-after-load. Если вам нужно просмотреть или задать значения переменных, определённых в другой библиотеке (предназначенных для внешнего использования), это можно сделать сразу — ждать загрузки библиотеки не нужно. Если вам нужно вызвать функции, определённые в этой библиотеке, следует загрузить её, желательно с помощью require (см. Признаки).
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-for-Loading.html