我希望更改一个程序包,对其进行测试,并希望以后再提交请求。如何安全有效地做到这一点?这个问题可能太笼统了,我将接受涵盖以下问题的答案:
我希望安装一个单独的程序包分支,并且能够随心所欲地在程序包和稳定分支之间进行切换,并在必要时自动执行重新编译,但
package.el
似乎并没有提供一种简单的方法。这个关于emacs-SE的答案告诉我们:“如果安装了一个软件包的多个副本,则将加载第一个副本”,所以我猜可能会手动将其弄乱,load-path
但这并不稳健。在已安装的软件包中选择特定版本的软件包的标准方法是什么?即使我设法向Emacs公开了多个分支,也需要进行重大调整,以确保未修补的分支已“卸载”并且其副作用得以隔离。是否
unload-feature
正确处理此问题,或者它具有多版本软件包的每个测试人员都应该了解的特质?如何安装和测试本地版本?答案似乎取决于软件包是简单文件(=一个文件)还是多文件包。EmacsWiki关于多文件软件包说:“ MELPA为您构建软件包 ”。我怀疑每次更改
defun
多文件包中的表单时都必须(或应该)与MELPA进行交谈,但问题仍然存在。至少我需要告诉软件包管理器本地版本,如果是,我该怎么做?我应该为本地版本的软件包分配什么名称?假设我想同时处理多个功能或错误,这意味着要有多个分支。Emacs不允许以描述性的方式命名版本(沿着
20170117.666-somebugorfeature
)。我想我可以重命名程序包本身,每个分支都带有一个后缀,但是再说一次,就像load-path
在Q1中手动弄乱一样,这是一个丑陋的破解,所以除非打算被广泛接受,否则我不会尝试将其发送给上游。
这些问题可能很幼稚,因为我从未写过既未在git中使用过补丁,也未在类似vcs中使用过的补丁。但是,对于许多Emacs用户而言,修补Emacs程序包可能是他们有史以来的第一个(或者可能是唯一的)社交编程,这就是为什么我认为对此问题的答案仍然有价值的原因。
emacs -L
方法来加载我也已使用Cask全局安装的软件包的本地版本。让我失望的一件事是<package>-version
,即使我实际上正在运行本地修改版本,运行也总是返回全局安装的版本。原来,这是因为<package>-version
for软件包从中获取版本packages.el
。