您对Emacs的软件包管理器有什么期望?[关闭]


72

尽管存在数千个Emacs Lisp库,但是GNU Emacs直到24.1版都没有(内部)程序包管理器。

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

使生活更轻松的页面

对于24.1之前的Emacs版本:

  • Emacs Lisp列表-问题:我看到死人(链接)。
  • Emacswiki-问题:可能包含坚果的痕迹(恶意代码)。
  • Emacsmirror-我正在处理的软件包存储库。问题:尚无软件包管理器本地支持。

一些包装经理

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


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


软件包已包含在Emacs中继中。epkg尚未准备好,目前还不可用。至少似乎不再积极维护install-elisp,plugin和use-package。

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

一些实用程序可能会有用

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

关于手头话题的讨论

问题(最终)

所以-我想从您那里了解在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. 在安装特定软件包之前,建议其他方法。

我希望得到这些答案

  • 指向更多实现,讨论等的指针
  • 对构成理想的软件包管理器的一组功能的详细说明。
  • 一种特定期望/不期望特征的描述。随意从上面阐述我的想法。
  • 给我一个惊喜

我必须考虑一下,但是如果做得好,那将是有史以来最好的事情。+1。
JasonFruit


2
由于这是一个讨论问题,没有真正正确的答案,我认为这应该标记为社区Wiki。很好的问题是,它在我的收藏夹列表中。
A. Levy,2010年

另一个现有的程序包管理器是自动安装:emacswiki.org/emacs/AutoInstall它可以从emacswiki安装所有.el文件,但也可以从任何url示例安装:(auto-install-from-url“ github.com/nex3/haml/ raw / master / extra / sass-mode.el“
antonj 2010年

Answers:


28

通过版本控制自动发布

我希望看到一个标准的,中央的和单个的Emacs软件包管理器。现在,我把钱花在ELPA上,但是还有很长的路要走。

对Emacs软件包管理器最大的帮助是使发布软件包变得非常简单。在我看来,我希望看到这种情况与诸如GitHub之中央托管平台上的git这样版本控制系统结合在一起使用-可以使作者更容易地发布其软件包,并使其他人容易回馈。

与GitHub(过去)使发布RubyGems变得容易一样,我希望在Emacs软件包管理器中看到类似的内容。例如,用“ vX.YZ”标记您的存储库,并让所有人都可以使用elisp。

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


我爱你:-)到目前为止,我也对其他评论投了赞成票;您的建议与我正在研究的内容非常相似。我将使用git,我将使用github,我想自动添加(因此我不必手动进行。但是,我认为这里有一个以上下午的
空间。– tarsius

如果您提出的建议符合要求,我很乐意在emacsblog.org上写一篇有关此事的博客文章 。我认为这将对社区有所帮助。
Ryan McGeary 09年

我只想添加一下PluginsKit就是这样做的:github.com/Guille/PluginsKit MooTools项目使用了它。mootools.net/forge
Henrik Hansen 2010年

@henrikh:我不明白PluginKit的作用-“链接到GitHub的开源项目的插件存储库”是什么意思?
tarsius

看起来GitHub已停止构建gems gems.github.com
Sridhar Ratnakumar,2011年

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-mode。那将使我今天过得愉快。


3
如果可以的话,请再次+1以获取最佳的剧本。
JasonFruit

1
很好,是的;但是实用吗?您只希望模式设置吗?还是任何命令?w3m-browse-url是否还应提醒您安装w3m?在这种情况下,pm必须知道所有可用软件包中的所有可能的交互功能,或者必须能够在未知功能上进行交互浏览。
Michael Paulukonis 09年

该示例是“给定的”,因为软件包名称空间带有前缀,但并非所有软件包都像那样好玩。
Michael Paulukonis 09年

5
我认为对话框应显示为:ftp-gnu.org提供的php-mode。安装?(y / n / v =查看源代码)
tarsius

1
阅读该答案后,我希望我可以“最喜欢”答案。:)
ocodo

12

我最期望的是所有有用的东西都在上面,并且运行良好。这要求您(或一组维护人员)积极追求将所有内容打包,并进行任何涉及的工作-向有用的软件包的每个作者发送电子邮件,等等。

例如,Debian(及其衍生产品:Ubuntu等)之所以如此出色的原因是,您可以愉快地使用您的系统,而不必在存储库外部安装任何东西,并且对其中的所有内容都进行了全面的测试。程序包管理器的实际功能很重要,但仅次于托管程序包本身。


我同时同意和不同意你。人们会产生大量的动力,热心地积极追求这些目标,但最终他们会精疲力尽。您需要一种易于许多人贡献的文化,但需要一点点但非常有用的一点。为此,您将需要良好的工具。好的工具可以使贡献在最重要的方面上变得最少。
Daniel Dinnyes

10

轻松的配置同步:我和许多人一样,在许多不同的计算机和服务器上使用Emacs,其中有些是我自己的,有些不是。如果程序包管理器有某种文件,我可以将其从一台计算机传输到另一台计算机,那将是惊人的。然后,在后一台计算机上,程序包管理器将使我的Emacs进入我喜欢的状态-安装了所有程序包并设置了配置。结合能够轻松安装整个站点(如果具有root权限)或单个用户的能力,我可以在所有地方同步所有Emacsen。


2
如果您有一个包含所有必需软件包的软件包管理器,则可以通过简单地编写elisp来实现,该软件包可以按名称和可选版本自动安装软件包。我认为包管理器不需要做任何特别的事情。
Ryan McGeary 09年

2
嗯,包裹管理员至少可以转储我的包裹吗?当软件包管理器知道我已安装的内容时,我不想写任何类似“((pkg-install this)(pkg-install that)”)的省略号。是的,程序包管理器不需要任何特殊功能:只需转储/读回已安装内容的功能即可。
A. Rex

知道了 我想我认为这将由包管理器隐含。我还没有看到无法列出已安装软件包的软件包管理器。
Ryan McGeary 09年

7

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

当然,提交也需要自动进行。当前邮寄ELPA维护者的方法仅在很小的范围内有效。


6

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

也有用:

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

进行某些上述压缩似乎是最好的选择。


到目前为止,改进的ELPA似乎仍然可行。


3

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

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

我写:

插件是我为Emacs创建软件包管理器的尝试。插件将自动下载Emacs扩展,将其解压缩到目录中,将该目录添加到加载路径,生成自动加载注释,并修改dot-emacs文件。自动加载注释是Emacs鲜为人知的功能。生成它们之后,Emacs扩展将快速且增量地加载,如果您安装了与我一样多的扩展,那将非常好。

您将需要两个库文件才能使其运行:loop-constructs.elrecord.el


3

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

我希望能够:

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

我希望所有主要事情都能很好地完成,并且是执行任何操作的推荐方法。然后是一个全局集合,一切正常进行。然后,任何人都可以托管自己的存档。

如果将它们全部捆绑到git / svn / whatever中,那么它将很不错,以便您可以安装旧版本。通过分叉等等等等来制作自己的补丁...


2

除了上面提到的以外,我还希望有类似debian和其他存储库的东西-一组稳定,经过实验且未经测试的软件包。能够添加自己的存储库-我直接从VCS使用很多软件包,因此创建自己的软件包可能很有用


2

我认为包管理器应该从Rubygems中获得很多启发。我也认为它应该有一个像Gemcutter这样的网站。

中央存储库也可能不错(例如Emacsmirror)。但是,如果存在像Gemcutter这样的网站来收集所有程序包,则可能没有必要。

我认为这些事情对于这项工作很重要。

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

因此,像Rubygems这样的包管理器,Gemcutter这样的站点和Emacsmirror这样的中央存储库(最好是在Github上,因为它是社交编码的)将对Emacs确实起到很好的作用。

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


是的,Emacsmirror-这是我目前正在研究的:-)现在,我将专注于此,而不是真正的软件包管理器。但是我确实生成了可以由程序包管理器使用的元数据。例如(:summary“维护Emacs Lisp软件包的镜像”:创建“ 20081202”:更新“ 20091206”:许可证“ GPL-3”:authors((“ Jonas Bernoulli”。“ jonas@bernoul.li”)):维护者(“ Jonas Bernoulli”。“ jonas@bernoul.li”):提供(elm):必需((((“ elx” elx)(“ emacs” cl))):keywords(“ libraries”):homepage“ github。 com / tarsius / elm“
tarsius

据我所知,gem必须由包的作者编写。对于emacs,tromey.com / elpa会执行类似的操作。但是它没有很多软件包。主要是因为elispers懒惰,不必费心编写所需的软件包描述并将其提交给elpa。还存在许多旧的但仍可能有用的软件包,在这里,作者实际上并不会为编写pkg描述而烦恼。因此,我的方法是从库本身自动生成数据。但是许多作者甚至都不愿意遵循标头惯例,因此仍有许多工作
要做

处理混乱的标题,但我开始找到地方。我希望,一旦Emacsmirror受到人们的欢迎,遵循标头约定并使用现代vc就会看到它的好处。尤其是不要停止在emacswiki上转储foo-mode-mypersonalversion.el之类的文件,而无需描述更改或合并上游更改。
tarsius

您认为人们对自己的Emacs脚本懒惰是正确的。但是,按照我上面建议的方法仍然可以。维护人员将更新某些软件包。但是,那里有很多Emacs脚本,有人曾经写过但不再关心。这可以通过为每个项目分配一个“宝石维护者”来解决。
rejeep

因此,如果有人发现不再需要维护的软件包,那么该人应该能够将其添加到中心位置并成为其新的维护者。希望这种方法可以使软件包保持最新。在这种情况下,我认为源应位于中央位置,例如Emacsmirror。因为这样人们才可以分叉项目,进行改进并提出请求。然后,维护者可以只合并更改。我认为这可能是比标头解析更好的方法。
rejeep

2

我不知道这个问题有多新鲜...
但是我想看到的模型是CPAN。我也不了解Rubygems,但听起来与CPAN类似。

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

CPAN可以很好地达到我的目的,而emacs的类似功能将很不错。它还支持按需构建C / C ++代码。

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

一些关于需求的评论。

  • 显式下载软件包。没有自动安装。没有无形的下载。我想询问新的库或新功能。
  • 我应该能够列出已安装软件包的名称/版本/时间戳。
  • 如果我的朋友给我他的名单,我应该可以将他的emacs状态与我的相比。
  • 检查更新功能。有哪些可用更新?他们解决了什么?
  • 检查,验证和下载。如果我安装了csharp-mode,并且要求使用cc-mode v5.0.28,则应该向我确认,我也必须下载cc-mode。
  • 这些软件包应该有某种社区排名,例如对isohunt的torrent进行排名。我想查看一个软件包是否有3个upvotes或3000个。
  • “交易”行为。如果安装热潮,则必须将其解开到最近的良好状态。
  • 故障保险柜。如果我已将自定义mod放入linum.el中,则除非我明确允许,否则它应拒绝在更改后安装新版本。它应该在开始之前就警告我。使用现有安装中的校验和/ md5执行此操作。
  • 可以选择从压缩档案中运行某些软件包,例如zip文件。因此,我从未怀疑我没有更新任何嵌入式elisp。
  • 使用镜像主机进行程序包分发的能力。
  • 所有这些功能都应该可以通过Mx库管理器或其他工具访问。

最后,最好有一种方法来分离或组织功能库。分层名称空间。Emacs的平面命名空间非常陈旧。这是一种独立的功能,但与软件包管理的核心功能互补。我不是一个精打细算的大师,所以我不知道这会有多困难。也许已经有办法了。


这个问题仍然是相关的:(1)Emacs维护者愿意在24个左右的时间内包含package.el,以及(2)我从package的镜像开始:emacsmirror.org
tarsius

1

程序包管理器不提供我看重具有简单依赖项的单文件elisp程序包的任何功能:从中添加和删除site-lisp从未引起问题。它是依赖于外部程序(例如ispell),多文件软件包(例如auctex,org-mode)的软件包,可能会很棘手。无法想到任何具有非平凡依赖关系的单文件elisp软件包。

对于这些,缺少程序包管理器,我希望emacs的elisp-packages可以批量运行测试套件,并在依赖项失败时提供有用的信息。


只要实际上可以找到该库,就可以轻松地将它放在site-lisp中:)
tarsius 09/12/23

1
@tarsius:这曾经是个问题吗?
查尔斯·斯图尔特

是的,我会知道的。虽然我能够收集1000个库,但必须将数百个库放在“找不到”列表中。顺便说一下,我确实提取了包括依赖性列表在内的元数据。因此,即使您不关心中央存储库,镜像仍会为您增加一些价值-我希望。
tarsius

如果依赖项是不可见的且未被跟踪,则即使具有所谓简单依赖项的spackage也会引起问题。这是一个相当简单的依赖项:csharp-mode取决于具有特定修复程序的cc-mode的特定版本。但是,这种依赖关系并未得到正式跟踪。仅在Wiki文章和博客文章中注明。许多人安装了csharp-mode,但没有安装所需的cc-mode版本,并且所有人都遇到相同的可避免错误。
Cheeso 2010年

@Cheeso:很好的例子。通过包的.el标头的版本行约定,GNU Emacs中存在一种版本控制:我想可以在这里使用。
查尔斯·斯图尔特
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.