你对Emacs的包管理器有什么期望?

时间:2009-01-17 23:04:44

标签: emacs packages package-managers

虽然存在数千个Emacs Lisp库,但GNU Emacs,直到版本24.1都没有(内部)包管理器。

我想大多数用户会同意,目前查找,安装并特别保持最新的Emacs Lisp库非常不方便。

让生活更轻松的网页

对于早于24.1的Emacs版本:

  • Emacs Lisp List - 问题:我看到死人(链接)。
  • Emacswiki - 问题:可能包含许多坚果(恶意代码)。
  • Emacsmirror - 我正在处理的软件包存储库。问题:没有包管理器原生支持它。

一些软件包管理员

并不是没有人尝试过。 (当问到这个问题时,其中一些不存在。)


UPDATE - package.el包含在GNU Emacs中,从版本24.1开始


包已包含在Emacs主干中。 epkg还没有准备好,目前还没有。至少install-elisp,plugin和use-package似乎不再被积极维护了。

我创建了一个包含所有这些包管理器的git repository作为子模块。

一些可能有用的实用程序

包管理器可以使用这些实用程序和/或它们可用于维护包的镜像。

讨论手头的主题

问题(最后)

所以 - 我想知道您在Emacs的包管理器中认为重要/不重要/补充等的内容。

一些想法

  1. 许多软件包(Emacsmirror提供了最大的可用软件包集合,但在任何软件包管理器中都没有明确的支持)。
  2. 仅限经过测试的软件包。
  3. 支持多个软件包存档(因此人们可以在许多/经过测试的软件包之间进行选择)。
  4. 依赖项仅根据所需功能计算。
  5. 依赖关系会考虑特定版本。
  6. 仅使用已在上游发布的版本。
  7. 使用版本控制系统中的版本(如果有)。
  8. 对包进行分类。
  9. 不仅可以安装和更新软件包。
  10. 支持创建上游版软件包的分支。
  11. 支持发布这些分支。
  12. 支持选择分叉。
  13. 安装包后激活。
  14. 生成自动加载文件。
  15. 与Emacswiki集成(请参阅wikirel.el)。
  16. 用户可以标记,评论等包并分享该信息。
  17. 仅限FSF指定/ GPL / FOSS软件或不关心许可证。
  18. 软件包管理器应与Emacs一起集成。
  19. 支持轻松联系作者。
  20. 很多元数据。
  21. 在安装特定包之前建议替代方案。
  22. 我希望得到这些答案

    • 更多实施,讨论等指示。
    • 构成理想包裹管理器的一组功能的冗长描述。
    • 一个特定的期望/不期望特征的描述。请随意详细说明我的想法。
    • 给我一个惊喜。

12 个答案:

答案 0 :(得分: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模式。那会让我的一天在那里。

答案 1 :(得分:28)

从版本控制中自动发布

我很想看到一个标准的,集中的,单个 Emacs包管理器。现在,我把钱花在ELPA上,但还有很长的路要走。

帮助Emacs软件包管理器的最重要的事情就是让发布软件包变得非常简单。在我看来,我希望在中央托管平台(如GitHub )上与版本控制系统(如git )结合使用时发生这种情况。可以让作者轻松发布他们的软件包,并让其他人轻松回馈。

类似于GitHub(以前)如何轻松发布RubyGems,我希望在Emacs包管理器中看到类似的东西。例如,使用“vX.Y.Z”标记您的存储库,并让所有人自动获得您的elisp好处。

使用像GitHub这样的流行后端的额外好处是你会立即获得大量曝光,这有助于推动其成功。

答案 2 :(得分:12)

我最期待的是所有有用的东西,并且效果很好。这需要您(或维护团队)积极地为它打包一切,并做任何涉及的事情 - 通过电子邮件发送每个有用包的作者,等等。

例如,Debian(及其衍生产品:Ubuntu等)之所以如此优秀,是因为您可以愉快地使用您的系统而无需在存储库之外安装某些东西,并且其中的所有内容都经过了全面测试。包管理器的实际功能很重要,但是托管包本身是次要的。

答案 3 :(得分:10)

轻松配置同步:我和许多人一样,在许多不同的计算机和服务器上使用Emacs,其中一些是我自己的,一些不是。如果包管理器有一些我可以从一台计算机转移到另一台计算机的文件,那将是惊人的。然后,在后一台计算机上,包管理器会将我的Emacs带入我喜欢的状态 - 所有安装的包和配置集。结合能够在站点范围内轻松安装(如果拥有root权限)或作为单个用户,我可以在任何地方同步所有Emacsen。

答案 4 :(得分:7)

我几乎肯定最好的解决方案是向ELPA提交更多软件包并向package.el添加多源支持。 Emacs维护者表示他们会考虑在版本24中包含package.el,只要它默认指向FSF存储库。

当然,提交也需要是一个自动化过程;邮寄ELPA维护者的当前方法仅适用于小规模。

答案 5 :(得分:6)

无论如何完成,我认为最重要的是将包提交到存储库应该是微不足道的。与此同时,我们不希望这些软件包立即可用,以防止恶意代码(并且由于许可问题)。除非有基于加密签名的“信任”系统。

也很有用:

  • “metapackages”,一次安装多个包。
  • 以同样的方式,我们应该能够安装一组elisp文件,以保持可维护性
  • 不应允许“破损”软件包破坏Emacs启动。这很容易,我已经在我自己的.emacs
  • 中实现了
  • 能够安装脚本以外的文件。这经常被忽视,但非常有用。例如,您可以运送图像,图标,工具栏等。
  • 版本控制:包X需要包Y> 1.0
  • 测试:执行基本的健全性检查,测试冲突(键绑定,功能重新定义,预期存在但不存在的功能等)。
  • BUG TRACKING :我不能强调这一点的重要性。有一个集中的位置来报告包错误(并能够跟踪它们)对于确保包的质量非常重要。

某些压缩存档似乎最好能够完成上述某些操作。


到目前为止,改进的ELPA似乎还有很长的路要走。

答案 6 :(得分:3)

我曾经花了一些时间为Emacs编写一个小包管理器。

http://gmarceau.qc.ca/plugin.el

我写道:

  

插件是我尝试创建一个   Emacs的包管理器。插入   将自动下载Emacs   扩展,将它们解压缩   目录,将该目录添加到   load-path,生成自动加载   注释,并修改您的dot-emacs   文件。自动加载注释是一个   Emacs鲜为人知的特征。一旦   它们是生成的,Emacs扩展   快速和渐进地加载,这   如果你有这么多人,真的很好   像我一样安装扩展程序。

您需要两个库文件才能让它运行,loop-constructs.elrecord.el

答案 7 :(得分:3)

我认为iPhone的黑客与我想要的非常接近,Ubuntu的“apt”也是如此。

我希望能够:

  • 添加
  • 删除(仅限包)
  • 删除用户设置
  • 查看文档
  • 升级(阅读更改日志后)
  • 添加新存档(也称为添加存储库)
  • 查看依赖项
  • 见版本
  • 搜索名称,关键字
  • 浏览(添加日期,修改日期,姓名)
  • 保存所有已安装的软件包&设置
  • 装载套装&设置

我想要一套主要的东西都能很好地工作,并且是推荐的做事方式。然后是一个全局集合,其中所有工作都进入。然后,任何人都可以托管自己的存档。

如果将这些全部绑定到git / svn /那么你可以安装旧版本会很好。通过分叉等等制作自己的补丁....

答案 8 :(得分:2)

除了上面提到的,我还期待像debian和其他存储库这样的东西 - 一套稳定,实用,未经测试的软件包。能够添加我自己的存储库 - 我直接从VCS使用了很多软件包,因此创建自己的软件包可能很有用

答案 9 :(得分:2)

我认为包经理应该从Rubygems中获取很多灵感。我还认为它应该有一个类似Gemcutter的网站。

中央存储库也可能很好(如Emacsmirror)。但是,如果存在收集所有包的Gemcutter等网站,则可能不需要这样做。

我认为这些事情很重要。

  • 收集所有包裹的某种中心位置
  • 易于添加包
  • 易于维护包
  • 轻松为其他套餐做贡献
  • 易于安装,卸载和更新软件包
  • 添加包依赖项的可能性
  • 所有包的通用结构

所以像Rubygems这样的包管理器有一个像Gemcutter这样的站点和一个像Emacsmirror这样的中央存储库(最好是在Github上因为它的社交编码)会让Emacs真的很好。

总而言之,我认为应该从Rails获取很多灵感,以及Rails如何处理Gems。

答案 10 :(得分:2)

我不知道这个问题多么新鲜......
但我希望看到的模型是CPAN。我也不知道Rubygems,但它听起来与CPAN类似。

CPAN是一个perl归档+库管理系统。当我需要编写需要... FTP或SOAP或JSON或XML或ZIP或...等的perl程序时,我可以运行CPAN包管理器,选择下载所需的包,查看和验证依赖项,然后安装一切。 CPAN被镜像......“无处不在”。

CPAN非常适合我的目的,而类似emacs的东西也很棒。它还支持按需构建C / C ++代码。

这就是我想在emacs中看到的内容。

对要求的进一步评论。

  • 显式下载软件包。没有自动安装。没有隐形下载。我想要求新的库或新功能。
  • 我应该能够列出已安装软件包的名称/版本/时间戳。
  • 如果我的朋友给我他的名单,我应该能够将他的emacs状态与我的分开。
  • check-for-updates功能。有哪些更新?他们修复了什么?
  • 依赖性检查,验证和下载。如果我安装了csharp-mode并且它需要cc-mode的v5.0.28,那么它应该与我确认,我还必须下载cc-mode。
  • 应该对这些软件包进行某种社区排名,例如对isohunt进行排名。我想知道一个包是否有3个upvotes或3000。
  • “交易”行为。如果安装进入繁荣期,它必须放松到最后一个已知状态。
  • failsafes。如果我在linum.el中放置自定义mod,它应该拒绝在我的更改上安装新版本,除非我明确允许它。它应该在开始之前警告我。使用校验和/ md5在现有安装上执行此操作。
  • 可以选择从压缩档案中运行一些包,比如zip文件。所以我从来没有怀疑过我没有更新任何嵌入式的elisp。
  • 使用镜像主机进行包分发的能力。
  • 所有这些功能都应该可以通过M-x library-manageemnt或其他东西访问。

最后,有一种方法可以隔离或组织函数库。分层命名空间。 Emacs的平面命名空间非常过时。这是一种独立的,但补充了包管理的核心功能。我不是一个lisp大师所以我不知道这会有多难;也许已经有办法做到了。

答案 11 :(得分:1)

套餐经理不提供任何我重视w.r.t.具有简单依赖关系的单文件elisp包:从site-lisp添加和删除从未导致过问题。它的包依赖于外部程序(例如,ispell),多文件包(例如,auctex,org-mode),这些包可能很棘手。无法想到任何具有重要依赖关系的单文件elisp包。

对于这些,缺少包管理器,我希望emacs的elisp-packages能够获得可以集体运行的测试套件,并在发生依赖性故障时提供有用的信息。