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

尽管存在几千个 Emacs Lisp 库,但是 GNU Emacs 直到24.1版才有一个(内部)包管理器。

我想大多数用户都会同意,目前查找、安装 Emacs Lisp 库,尤其是保持最新的 Emacs Lisp 库是相当不方便的。

让生活更轻松的页面

对于超过24.1版本的 Emacs:

  • Emacs Lisp List -问题: 我看到了死人(链接)。
  • Emacwiki -问题: 可能包含坚果(恶意代码)的痕迹。
  • Emacsmirror -我正在处理的包存储库。问题: 还没有包管理器本身支持它。

一些包裹管理员

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


更新—— package.el 包含在 GNU Emacs 中,从24.1版开始


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

我已经创建了一个 git 储存库,其中包含所有这些包管理器作为子模块。

一些可能有用的工具

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

关于手头问题的讨论

问题(最后)

所以-我想从你那里知道你认为什么是重要的/不重要的/补充等在一个 Emacs 的包管理器。

一些想法

  1. 许多包(艾玛镜提供了最大的可用包集合,但是在任何包管理器中都没有明确的支持)。
  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. 在安装特定软件包之前提出替代方案。

我希望得到这样的答案

  • 指向更多实现、讨论等的指针。
  • 对构成您理想的包管理器的一组特性的详细描述。
  • 描述一个特别需要的/不需要的特性。
  • 给我个惊喜。
5977 次浏览

我还在学习 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,有些是我自己的,有些不是。如果包管理器有某种文件,我可以从一台计算机传输到另一台计算机,那将是令人惊讶的; 然后,在后一台计算机上,包管理器将把我的 Emacs 带到我喜欢的状态——所有安装的包和配置设置。结合能够轻松地安装站点范围(如果有根权限)或作为一个单一的用户,我可以同步所有 Emacsen 无处不在。

从版本控制自动发布

我希望看到一个标准的、集中的和 单身 Emacs 包管理器。现在,我把我的钱放在 ELPA,但仍然有很长的路要走。

对 Emacs 包管理器最大的帮助就是使发布包变得非常简单。在我看来,我希望看到这种情况与 中央托管平台,比如 GitHub上的 类似 git 的版本控制系统结合起来发生——这将使作者更容易发布他们的软件包,并使其他人更容易回馈。

类似于 GitHub (过去)使得发布 RubyGems 变得很容易,我希望在 Emacs 包管理器中看到类似的东西。例如,将存储库标记为“ vX.Y.Z”,并使您的省略号优点自动对所有人可用。

使用像 GitHub 这样的流行后端的另一个好处是,你可以立即获得大量的曝光机会,这将有助于推动它的成功。

我最希望的是,一切有用的是在它上面,并且工作得很好。这就要求您(或者一个维护团队)积极地为它打包所有东西,并且做任何需要做的事情ーー向每个有用软件包的作者发送电子邮件,等等。

例如,Debian (及其衍生产品: Ubuntu 等)之所以如此优秀,是因为你可以愉快地使用你的系统,而无需在软件库之外安装任何东西,而且它上面的所有东西都经过了彻底的测试。包管理器的实际特性很重要,但是次要于托管包本身。

除了上面提到的,我还期待类似 debian 和其他仓库的东西——一套稳定的、试验性的、未经测试的软件包。能够添加我自己的存储库-我使用许多包直接从 VCS,所以它可能是有用的,创建我自己的包

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

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

我写道:

插件是我创建一个 Emacs 的包管理器。插件 会自动下载 Emacs 扩展,将它们解压到 目录,将该目录添加到 加载路径,生成自动加载 注释,并修改您的点 emacs 自动加载注释是一个 一个鲜为人知的 Emacs 特性 它们是由 Emacs 扩展生成的 加载快速和增量,其中 如果你有那么多的话,真的很不错 像我一样安装扩展程序。

您将需要两个库文件使其运行,循环结构记录下来

我认为 iPhone 的黑客们已经非常接近我想要的了,就像 Ubuntu 的“ apt”一样。

我希望能够:

  • 删除(只包装)
  • 删除用户设置
  • 查看文件
  • 升级(在读取更改日志之后)
  • 添加新存档(又名添加存储库)
  • 查看依赖关系
  • 请参阅版本
  • 搜索名称,关键字
  • 按(添加日期、修改日期、名称)浏览
  • 保存所有已安装的软件包和设置
  • 加载包和设置集

我想要一个主要的一套东西,所有工作很好,是推荐的方式做任何事情。然后是一个全局集合,其中包含所有工作内容。然后任何人都可以拥有自己的存档。

如果所有这些都绑定到 git/svn/whatever 中就好了,这样您就可以安装旧版本了。自己做补丁,分叉等等..。

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

当然,提交也需要是一个自动化的过程; 目前邮寄 ELPA 维护人员的方法只在小范围内有效。

无论这是如何完成的,在我看来,最重要的事情是向存储库提交包应该是微不足道的。同时,我们不希望这些包立即可用,以防范恶意代码(以及由于许可问题)。除非存在一个基于加密签名的“信任”系统。

同样有用的是:

  • “ metapackages”,即同时安装多个软件包。
  • 同样,为了便于维护,我们应该能够安装一组 elisp 文件
  • 不应该允许“破碎的”包干扰 Emacs 的启动。这很容易,我已经在我自己的实现。Emacs
  • 能够安装脚本以外的文件。这一点常常被忽视,但却非常有用。例如,您可以为图标、工具栏等提供图像。
  • 版本控制: 包 X 要求包 Y > 1.0
  • 测试: 执行基本的健全性检查、冲突测试(键绑定、函数重定义、应该存在但没有存在的函数等)。
  • 虫子追踪 : 我再怎么强调这件事的重要性也不为过。拥有一个集中的地方来报告软件包错误(并且能够跟踪它们)对于确保软件包的质量非常重要。

某种压缩存档似乎是完成上述工作的最佳选择。


到目前为止,一个更好的 ELPA 似乎是可行的方法。

包管理器不提供任何我认为有价值的带有简单依赖关系的 W.r.t. 单文件省略包: 从 site-lisp添加和删除从来不会引起问题。依赖于外部程序(例如 ispell)的包、多文件包(例如 Auctex、 org-mode)可能比较棘手。一下子想不出任何具有重要依赖关系的单文件 elisp 包。

对于这些,除了包管理器之外,我希望 emacs 的 elisp 包能够获得测试套件,这些测试套件可以集中运行,并且在依赖项失败时提供有用的信息。

我认为软件包经理应该从 红宝石中获得很多灵感。我也认为它应该有一个像 宝石匠的网站。

中央存储库也可以很好(比如 艾玛镜)。然而,如果像 Gemcutter 这样的网站存在收集所有软件包的话,这可能就没有必要了。

我觉得这些东西对我们的关系很重要。

  • 收集所有包裹的中心地点
  • 易于添加包
  • 易于维护的软件包
  • 易于贡献其他软件包
  • 易于安装,卸载和更新软件包
  • 添加包依赖项的可能性
  • 所有包的通用结构

所以像 Rubygems 这样的软件包管理器,有 Gemutter 这样的站点和 Emacsmirror 这样的中央存储库(最好是在 Github 上,因为它的社会化编码)会对 Emacs 很有帮助。

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

我不知道这个问题有多新鲜。
但我想看到的模型是 CPAN。我也不知道 Rubygems,但它听起来像 CPAN。

CPAN is a perl archive + library management system. When I need to write a perl program that requires... FTP or SOAP or JSON or XML or ZIP, or...etc, I can run the CPAN package manager, select the requisite package for download, view and verify the dependencies, then install everything. CPAN is mirrored .."everywhere".

对于我的目的,CPAN 工作得非常好,如果能有一些类似于 emacs 的东西就好了。它还支持按需构建 C/C + + 代码。

这就是我想在 Emacs 中看到的。

一些关于需求的进一步评论。

  • 显式下载软件包。没有自动安装。没有隐形下载。我想要求新的库或新的功能。
  • 我应该能够列出已安装软件包的名称/版本/时间戳。
  • 如果我的朋友给我他的清单,我应该能够区分他的 emacs 状态与我的。
  • 检查更新功能。什么更新是可用的? 他们修复什么?
  • 依赖性检查、验证和下载。如果我安装 cSharp-mode,它需要 cc-mode 的 v5.0.28版本,那么它应该与我确认,我也必须下载 cc-mode。
  • 应该对这些包裹进行某种社区排名,比如说,对种子进行等级搜寻。我想看看一个包有3个赞成票还是3000票。
  • “事务性”行为。如果安装崩溃,它必须解除到最后已知的良好状态。
  • 故障保护装置。如果我在 linum.el 中放入了自定义 mods,它应该拒绝在我的更改上安装新版本,除非我明确允许。它应该在开始之前就警告我。在现有安装上使用校验和/md5执行此操作。
  • 可以选择从压缩存档中运行一些包,比如 zip 文件。所以我从不怀疑我没有更新任何嵌入式省略号。
  • 使用镜像主机进行包分发的能力。
  • 所有这些函数都应该可以通过 M-x 库管理之类的方式访问。

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