16.10 Хуки для загрузки

Вы можете запросить выполнение кода каждый раз, когда Emacs загружает библиотеку, используя переменную after-load-functions:

Переменная: after-load-functions

Этот аномальный хук выполняется после загрузки файла. Каждая функция в хуке вызывается с одним аргументом — абсолютным именем файла, который только что был загружен.

Если вы хотите, чтобы код выполнялся при загрузке определенной библиотеки, используйте макрос with-eval-after-load:

Макрос: with-eval-after-load library body…

Этот макрос организует выполнение body в конце загрузки файла library каждый раз, когда library загружается. Если library уже загружен, он выполняет body немедленно.

Вам не нужно указывать каталог или расширение в имени файла 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" ...)

library также может быть функцией (то есть символом), в этом случае body выполняется в конце любого файла, где (provide library) вызывается.

Ошибка в body не отменяет загрузку, но предотвращает выполнение остальной части body.

Обычно хорошо спроектированные программы на Lisp не должны использовать with-eval-after-load. Если вам необходимо просмотреть и установить переменные, определенные в другой библиотеке (те, которые предназначены для внешнего использования), вы можете сделать это немедленно — нет необходимости ждать, пока библиотека будет загружена. Если вам необходимо вызывать функции, определенные этой библиотекой, вы должны загрузить библиотеку, предпочтительно с помощью require (см. Функции).