我应该在我的 Emacs Lisp 包中的哪里添加自动加载 cookie?有明确的指南吗?
Posted
技术标签:
【中文标题】我应该在我的 Emacs Lisp 包中的哪里添加自动加载 cookie?有明确的指南吗?【英文标题】:Where should I add autoload cookies in my Emacs Lisp package? Is there a definitive guide? 【发布时间】:2013-11-19 23:12:56 【问题描述】:我维护了一个比较流行的 Emacs 包 (ido-ubiquitous),我想将 ;;;###autoload
cmets 添加到我的包中,以便在激活其模式之前不需要加载它。前段时间我用同一个包尝试过这个,它导致了一些只在包被自动加载时发生的神秘错误,所以我删除了所有自动加载的东西,问题就消失了。我想再试一次,但前提是我能找到有关如何操作的权威文档,这样我就不会再次引入相同的错误。
那么有没有明确的指南来将自动加载 cookie 添加到 Emacs Lisp 包中?
编辑:查看我的包的 Git 日志,我看到几个提交涉及自动加载:
283f9e9 删除不必要的自动加载 66b782f 自动加载覆盖变量的默认值 f6086e5 自动加载修复 0eed206删除不必要的自动加载cookie这些提交表明我真的不确定要添加自动加载到什么。特别是,f6086e5 和 66b782f 表明我认为我应该自动加载自定义变量,并得出结论我还需要自动加载定义其默认值的 defconst
表单。如果我没记错的话,这是对 void-variable 错误的响应,因为自动加载的 defcustom 无法访问非自动加载的默认值 (issue link)。最后,在 283f9e9 中,我看到了未来,并采纳了 Stefan 的建议,移除了所有自动加载,除了次要模式定义中的自动加载。
【问题讨论】:
【参考方案1】:;;;###autoload
cookie 只是标记需要提升到 <pkg>-autoloads.el
文件中的代码。然后在启动时急切地加载该文件,但这可以快速完成,因为它是一个小得多的文件。因此,您通常只需要在几个主要入口点上使用这样的 cookie。例如。我会先在ido-ubiquitous-mode
上只放一个这样的cookie。
【讨论】:
是否需要为defcustom
s 和其他交互功能(在这种情况下只有其中之一)设置自动加载cookie?
通常不希望将自动加载 cookie 放在变量上。它对可能在任何其他函数之前调用的交互式函数很有用/必要(即可能在 org-ubiquitous.el 尚未加载时调用)。
defadvice
呢?
默认提示通常不需要自动加载cookie,因为通常只需要在加载包后安装/激活提示。【参考方案2】:
自动加载的文档在这里:
C-hig (elisp) Autoload
RET
您能否详细说明您遇到的错误?
【讨论】:
我想我的意思是我知道如何将事物标记为自动加载,但我不确定应该将哪些内容标记为自动加载。您引用的信息页面实际上只解决了第一个问题。无论如何,当我有时间时,我会挖掘一个示例错误。以上是关于我应该在我的 Emacs Lisp 包中的哪里添加自动加载 cookie?有明确的指南吗?的主要内容,如果未能解决你的问题,请参考以下文章