CEDET我需要eassist( eassist-list-methods 非常方便)。在eassist.el中有一行
(require 'semantic)
如果未加载CEDET则失败。问题是我一直不需要CEDET,加载需要很长时间,所以我想推迟加载,直到我调用 eassist-list-methods 。
有没有办法运行
(load "cedet")
当语义(或其他由CEDET提供的内容)必需时?
我正在寻找一种不会改变eassist.el的简单解决方案。
答案 0 :(得分:4)
Genehack可能是对的;我在回答这个问题时过于文字化了。处理这类事情的最佳方法是确定外部代码需要哪些函数,并为它们添加autoload
。
但如果autoload
在你的情况下不起作用,那么在加载文件时执行某些操作的正常方法就是
(eval-after-load "semantic" '(load "cedet"))
但我只是注意到你说如果没有先加载CEDET,semantic.el就无法加载。正如名称所暗示的那样,eval-after-load
在加载指定文件后运行代码。
您可以尝试查找不同的文件来触发加载,而不是使用semantic.el。 (也许是semantic.el需要的其他文件。)
如有必要,您可以加入require
:
(defadvice require (before CEDET-require activate)
(if (eq 'semantic (ad-get-arg 0))
(load "cedet")))
虽然(load "cedet")
可能应该是(require 'cedet)
,但您每次都会重新加载它。 (我不确定CEDET是否有(provide 'cedet)
,所以在我的例子中我没有这样做。)
请注意,如果已加载语义,则在require
上提供建议将不会执行任何操作,因此您可能需要首先检查(featurep 'semantic)
并在必要时立即加载cedet.el。
答案 1 :(得分:1)
假设您的load-path
中包含所有CEDET内容:
(autoload 'eassist-list-methods "cedet" nil t)
你的.emacs.d/init.el
(或其他初始文件)中的应该可以解决问题。
答案 2 :(得分:0)
我可能会误解你,但如果不是,答案是 autoload
:你只想在调用其中一个命令时加载eassist.el
。当它加载时,它将加载semantic
或CEDET或它需要的任何东西 - 这不是你的问题(它应该由库eassist.el
的设计来处理。)
(autoload 'eassist-list-methods "eassist" nil t)