尽管存在数千个Emacs Lisp库,但GNU Emacs在版本24.1之前没有(内部)包管理器.
我想大多数用户会同意,目前查找,安装并特别是保持最新的Emacs Lisp库是相当不方便的.
使生活更轻松的页面
对于早于24.1的Emacs版本:
Emacs Lisp列表 - 问题:我看到死人(链接).
Emacswiki - 问题:可能包含坚果的痕迹(恶意代码).
Emacsmirror - 我正在处理的软件包存储库.问题:没有包管理器本地支持它.
一些包管理员
并不是没有人尝试过.(当问到这个问题时,其中一些不存在.)
自动安装
borg.el - 使用Git子模块同化Emacs包.
el-get.el - 支持许多来源.
elinstall.el
epackage又名DELPS - 应用于Emacs Lisp软件包的Debian打包概念.
epkg.el - 现在只是浏览Emacsmirror的工具.
install.el
安装-elisp.el
JEM-pkg.el
package.el - ELPA.似乎它将包含在Emacs 24中.
UPDATE - package.el包含在GNU Emacs中,从版本24.1开始
pases.el
pelm - 命令行安装程序; 用php.
plugin.el
straight.el - 最近和实验,尚未达到1.0发布.
使用-package.el
XEmacs包管理器
包已包含在Emacs主干中.epkg还没有准备好,目前还没有.至少install-elisp,插件和use-package似乎不再被主动维护.
我创建了一个包含所有这些包管理器作为子模块的git 存储库.
一些可能有用的实用程序
包管理器可以使用这些实用程序和/或它们可以用于维护包的镜像.
date-calc.el - 日期计算和解析例程.
ell.el - 浏览Emacs Lisp列表.
elm.el,elx.el,xpkg.el - 用于维护Emacsmirror.
genauto.el - 帮助您的elisp包生成自动加载.
inversion.el - 需要特定的包版本.
loadhist.el,lib-requires.el,elisp-depend.el - 列出Emacs Lisp库依赖项的命令.
project-root.el - 定义项目根并根据它执行操作.
strptime.el - POSIX日期和时间解析的部分实现.
wikirel.el - 访问Emacs Wiki上的相关页面.
讨论手头的主题
emacs-devel 20080801
comp.emacs 20021121
RationalElispPackaging
问题(最后)
所以 - 我想知道你在Emacs的包管理器中你认为重要/不重要/补充等什么.
一些想法
许多软件包(Emacsmirror提供了最大的可用软件包集合,但在任何软件包管理器中都没有明确的支持).
只有经过测试的软件包.
支持多个软件包归档(因此人们可以在许多/经过测试的软件包之间进行选择).
依赖性仅基于所需特征计算.
依赖关系考虑了特定版本.
仅使用已在上游发布的版本.
使用版本控制系统中的版本(如果有).
包被分类.
无需安装即可卸载和更新软件包.
支持创建上游版软件包的fork.
支持发布这些分支.
支持选择一个分叉.
安装包激活后.
生成自动加载文件.
与Emacswiki集成(请参阅wikirel.el).
用户可以标记,评论等包并共享该信息.
只有FSF指定的/ GPL/FOSS软件或者不关心许可证.
软件包管理器应与Emacs一起集成.
支持轻松联系作者.
大量的元数据.
在安装特定包之前建议替代方案.
我希望得到这些答案
指向更多实施,讨论等的指针
对构成理想包管理器的一组功能的冗长描述.
一个特定的期望/不期望特征的描述.随意从上面阐述我的想法.
给我一个惊喜.
Kyle Cronin.. 32
我还在学习Emacs,所以我没有机会查看软件包管理器,但是一个很棒的功能是告诉用户如果软件包尝试使用它,但它不在他们的系统上.例如,我想在服务器上编辑一次PHP文件,我试过了
M-x php-mode
而Emacs就像
M-x php-mode [no match]
什么时候应该是这样的
php-mode available from ftp.gnu.org. install? (y/n)
然后它会为我安装和加载php模式.那会让我的一天在那里.
我还在学习Emacs,所以我没有机会查看软件包管理器,但是一个很棒的功能是告诉用户如果软件包尝试使用它,但它不在他们的系统上.例如,我想在服务器上编辑一次PHP文件,我试过了
M-x php-mode
而Emacs就像
M-x php-mode [no match]
什么时候应该是这样的
php-mode available from ftp.gnu.org. install? (y/n)
然后它会为我安装和加载php模式.那会让我的一天在那里.
从版本控制自动发布
我很想看到一个标准的,集中的,单一的 Emacs包管理器.现在,我把钱花在了ELPA上,但还有很长的路要走.
帮助Emacs软件包管理器的最重要的事情就是让发布软件包变得非常简单.在我看来,我希望看到这种情况与GitHub等中央托管平台上的git等版本控制系统相结合- 这样可以让作者轻松发布他们的软件包并让其他人轻松实现贡献回来.
类似于GitHub(以前)如何轻松发布RubyGems,我希望在Emacs包管理器中看到类似的东西.例如,使用"vX.YZ"标记您的存储库,并让所有人自动获得您的elisp好处.
使用像GitHub这样的流行后端的额外好处是你会立即获得大量曝光,这有助于推动其成功.
我最期待的是,一切都很有用,而且效果很好.这需要您(或维护团队)积极地为它打包一切,并做任何涉及的事情 - 通过电子邮件发送每个有用包的作者,等等.
例如,Debian(及其衍生产品:Ubuntu等)之所以如此优秀,是因为您可以愉快地使用您的系统而无需在存储库之外安装某些东西,并且其中的所有内容都经过了全面测试.包管理器的实际功能很重要,但是托管包本身是次要的.
轻松配置同步:我和许多人一样,在许多不同的计算机和服务器上使用Emacs,其中一些是我自己的,一些不是.如果包管理器有一些我可以从一台计算机转移到另一台计算机的文件,那将是惊人的.然后,在后一台计算机上,包管理器会将我的Emacs带入我喜欢的状态 - 所有安装的包和配置集.结合能够在站点范围内轻松安装(如果拥有root权限)或作为单个用户,我可以在任何地方同步所有Emacsen.
我几乎肯定最好的解决方案是向ELPA提交更多包,并为package.el添加多源支持.Emacs维护者表示他们会考虑在版本24中包含package.el,只要它默认指向FSF存储库.
当然,提交也需要是一个自动化过程; 邮寄ELPA维护者的当前方法仅适用于小规模.
无论如何完成,我认为最重要的是将包提交到存储库应该是微不足道的.与此同时,我们不希望这些软件包立即可用,以防止恶意代码(并且由于许可问题).除非有基于加密签名的"信任"系统.
也很有用:
"metapackages",一次安装几个包.
以同样的方式,我们应该能够安装一组elisp文件,以实现可维护性
不应允许"破损"软件包破坏Emacs启动.这很容易,我在我自己的.emacs中实现它
能够安装脚本以外的文件.这经常被忽视,但非常有用.例如,您可以运送图像,图标,工具栏等.
版本控制:包X要求包Y> 1.0
测试:执行基本的健全性检查,测试冲突(键绑定,功能重新定义,预期存在但不存在的功能等).
BUG TRACKING:我不能强调这一点的重要性.拥有一个集中的位置来报告包错误(并能够跟踪它们)对于确保包的质量非常重要.
某种压缩存档似乎最好能够完成上述某些操作.
到目前为止,改进的ELPA似乎还有很长的路要走.