Emacs包加载机制
前言
Emacs的包加载机制应该是Emacs学习的必修课 因为Emacs之所以被成为「操作系统」就是因为有大量的包 可因为从Emacs 24开始有了自带的包管理机制和各种「仓库」(Archive) 理解加载机制变的不那么重要了 这是好事也是坏事 因为没有需求所以学习的动力就不强了 我对这个加载机制一直稀里糊涂 我在23.x版本的时候还为安装那些第三方的包折腾过 后来升级到24后就没有再动过 直到最近要把之前写的一些东西分离出来(成果见这个) 所以折腾了一下 写一写心得
加载机制
Emacs加载一个函数有下面几种机制
load
provide
和require
autoload
load
load
是比较底层的函数(这个之前我也误解了) 还有一个封装的可供交互调用的load-file
都是加载一个el或者编译的elc文件
provide和require的组合
这个比上面的高级一点 如果一个文件以(provide 'helloworld)
结尾 就表明这个文件定义了一个名为helloworld
的feature 可以用(require 'helloworld)
加载 Emacs会自动加载相关的文件而且不会重复加载 比load
更智能高效
但有一个问题:相关的el文件必须放在Emacs能「找到」的地方 就是说需要在load-path
里
另外 文件放在load-path
里不表示Emacs会自动加载这个文件 这也是我之前的一个误解
autoload
autoload
比上面的两个更高级更智能:它不会加载文件 而是在调用某些函数的时候加载相关的文件 具体有两种实现方式:显示调用autoload
或者在你想设为autoload的函数前面加;;;###autoload
又一个误解:对于自己写的mode 在函数前面加;;;###autoload
是无效的
因为这个东西只有调用generate-file-autoloads
将这些autoload生成到一个文件里才管用 说白了 直接把这个东西(名字叫cookie 定义在generate-autoload-cookie
里)写进去是无效的
关于这个autoload
我还没有完全搞明白 所以不详细展开了
总结
越发感觉「不学无术」了 希望能不断提高不断进步 也希望各位读者能批评指正 谢谢
或者您可以把评论发在别处,添加指向本页的连接,然后把网址告诉我:
本文标题:Emacs包加载机制
文章作者:Chris
发布时间:2015-09-01
最后更新:2022-03-23
原始链接:https://chriszheng.science/2015/09/01/Emacs-packages-loading-mechanism/
版权声明:本博客所有文章除特别声明外,均采用 CC BY 4.0 许可协议。转载请注明出处!
分享