当我自动加载一些功能建议时,怎么会这样?
;;;###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)
会像往常一样将自动加载创建为启动时加载的文件。
答案 0 :(得分:1)
;;;###autoload
的效果是根据其注释内容以临时方式定义的。对于函数 definitions ,它将变成对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...)