我将melpa-stable用作其他软件包存储库,但melpa-stable上没有我喜欢使用的软件包之一(冰柱)。有什么方法可以将package.el配置为通常使用melpa-stable,但将melpa用于特定的软件包子集?
icicles
在梅尔帕。
我将melpa-stable用作其他软件包存储库,但melpa-stable上没有我喜欢使用的软件包之一(冰柱)。有什么方法可以将package.el配置为通常使用melpa-stable,但将melpa用于特定的软件包子集?
icicles
在梅尔帕。
Answers:
使用package-archive-priorities
为此目的而设计的选项。要比MELPA更喜欢MELPA稳定版,请将以下内容添加到您的初始化文件中:
(setq package-archives
'(("GNU ELPA" . "https://elpa.gnu.org/packages/")
("MELPA Stable" . "https://stable.melpa.org/packages/")
("MELPA" . "https://melpa.org/packages/"))
package-archive-priorities
'(("MELPA Stable" . 10)
("GNU ELPA" . 5)
("MELPA" . 0)))
数字越高,软件包归档的优先级越高。对于存在于多个档案中的任何软件包,Emacs的软件包管理器从优先级最高的档案中选择软件包,并忽略其他档案中的软件包,即使版本号更高。如果该软件包存在于两个优先级相同的档案中,则以版本号较高为准,最终我认为顺序是package-archives
。
我建议为所有归档文件(包括默认的GNU ELPA归档文件)明确分配优先级,以避免产生任何歧义。尽管不在其中的存档package-archive-priorities
的默认优先级为0,但是忘记它是很容易的。
package-archive-priorities
是在Emacs 25.1中引入的,对于早期版本,请参见下面的旧答案:
在Emacs 24中,不可能默认使用MELPA Stable,并且不能以一般方式仅将MELPA用于特定的软件包。如果没有任何自定义软件包,则默认情况下,el.el 将提供最高版本的归档文件MELPA。没有界面可以改变这一点。
但是,从Emacs 24.4开始,新选项package-pinned-packages
允许您将单个软件包固定到归档中,但这仅使您可以实现与要求相反的功能:默认为MELPA,对特定软件包使用MELPA Stable。
因此,当前您唯一的选择是package-pinned-packages
手动或用一段Emacs Lisp代码填充您要使用的所有软件包。请注意,package-pinned-packages
必须在调用之前进行设置,package-refresh-contents
因为固定是在构建软件包索引时进行的,而不是在安装软件包时进行的。
长期的解决方案是,M-x report-emacs-bug
请Emacs开发人员实施某种“默认存档”功能,或要求冰柱的维护者发布经过正确标记的发行版,以便MELPA Stable可以为其构建稳定的软件包。但是,这两者都不容易,因为前者需要对package.el进行较大的更改,而后者则将冰柱从EmacsWiki移到带有标签的适当VCS存储库中,我认为它的维护者不愿意这样做,因为如果是的话,他们早就可以做到了。
在这里,您将讨论有关并行使用两个存储库的讨论,因此在24.4中应该可以实现。例如,您是否尝试过使用defun更新存储库列表,然后进行paradox-require,最后返回到原始存储库列表?