Совет автозагрузке требовать файл перед запуском функции
Почему, когда я загружаю некоторые советы по функциям, например.
;;;###autoload
(advice-add 'eclimd-start :before #'(lambda () (require 'some-library))
а затем позвоните eclimd-start
библиотека, из которой загружается совет, не загружается? Я думал, что смогу просто использовать следующее, чтобы получить файл с настройками, загруженными перед вызовом функции,
;;;###autoload
(advice-add 'eclimd-start :before (lambda () nil)
В этом случае библиотека содержит настройки, которые будут использоваться функцией eclimd-start
, Таким образом, в качестве воспроизводимого примера, это может быть
(setq eclimd-default-workspace "/hdd/workspace")
;;;###autoload
(defun my-java-hook () nil)
;;;###autoload
(advice-add 'eclimd-start :before
#'(lambda () (require 'some-library))
(provide 'some-library)
и автозагрузки создаются как обычно в файл, загружаемый при запуске.
1 ответ
Эффект от ;;;###autoload
определяется специальным образом в зависимости от того, что он комментирует. Для определения функций это превращается в вызов autoload
функция, которая будет вызывать загрузку файла при вызове аннотированной функции, но почти во всем остальном аннотированный sexp просто копируется в файл автозагрузки.
Так что в вашем случае ;;;###autoload
на my-java-hook
заставляет файл автозагрузки содержать что-то вроде (autoload 'my-java-hook "some-library")
, но то же самое ;;;###autoload
Вы поместили перед советом просто заставит файл автозагрузки содержать (advice-add 'eclimd-start ...)
,
Что вы можете сделать, это:
;;;###autoload
(advice-add 'eclimd-start :before #'my-eclimd-start-advice)
;;;###autoload
(defun my-eclimd-start-advice ()
...blablabla...)