-1

当我自动加载一些功能建议时,例如。

;;;###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)

并且自动加载像往常一样创建到启动时加载的文件中。

4

1 回答 1

1

的效果;;;###autoload是根据它注释的东西以一种特别的方式定义的。对于函数定义,它变成了对autoload函数的调用,这将导致在调用带注释的函数时加载文件,但对于几乎所有其他的东西,带注释的 sexp 只是被复制到自动加载文件中。

因此,在您的情况下,;;;###autoloadonmy-java-hook会导致 autoloads 文件包含类似(autoload 'my-java-hook "some-library")的内容,但是;;;###autoload您放在建议前面的内容只会导致 autoloads 文件包含(advice-add 'eclimd-start ...).

你可以做的是:

;;;###autoload
(advice-add 'eclimd-start :before #'my-eclimd-start-advice)
;;;###autoload
(defun my-eclimd-start-advice ()
  ...blablabla...)
于 2018-09-30T02:28:32.567 回答