我正在使用prelude作为基本的Emacs配置。我已经从包管理器安装了很多包,我想在另一台计算机上使用我的设置。
我不想携带已安装的软件包,也不想手动创建列表。
有什么方法可以将所有已安装的软件包列表保存到prelude-package.el或任何其他文件中,以便当我将此配置带到另一台机器时,它们在首次使用时自动安装在那里?
您可以从变量 package-activated-list
获取当前安装的软件包(不包括内置软件包)的列表。 要在启动时自动安装它们,请参阅以下问题:如何通过指定软件包名称列表来自动安装 emacs 软件包?
更具体地说,如果你执行 C-h v 软件包激活列表,复制显示的值,并将其作为 prelude-packages
的值插入,emacs 将自动确保这些软件包在启动时安装。
规范方法是最好的(由ataylor描述)。这是一种更笨拙的方法。
M-x 列表包。C-s 已安装,直到找到已安装软件包的第一行。开始使用C-SPC进行选择。向下直到到达内置包。使用 M-w 复制。C-x b 表示新缓冲区。用 C-y 粘贴。C-x C-s 保存文件。
我看到的唯一优点是这有点更具描述性 - 它显示了你的软件包的简短描述;当你安装一些软件包并忘记它们时,这很有用。
如如何通过指定软件包名称列表自动安装 emacs 软件包?中所述,最好也记录您需要的软件包版本。为此,您可以使用以下功能:
(defun list-packages-and-versions ()
"Returns a list of all installed packages and their versions"
(mapcar
(lambda (pkg)
`(,pkg ,(package-desc-version
(cadr (assq pkg package-alist)))))
package-activated-list))
这将为您提供(NAME VERSION)
对的列表。不幸的是,我无法找到安装特定版本的软件包的方法。似乎package.el
总是抓住最新的可用。我现在正在做的是:
(defun install-packages-with-specific-versions (package-version-list)
"Install the packages in the given list with specific versions.
PACKAGE-VERSION-LIST should be a list of (NAME VERSION) lists,
where NAME is a symbol identifying the package and VERSION is
the minimum version to install."
(package-download-transaction
(package-compute-transaction () package-version-list)))
我编写了一个更长的函数来安装与确切版本号匹配的软件包,但它失败了,因为默认情况下package.el
仅检索每个软件包可用的最新版本。 要点
如上所述,使用 emacs 正常模式。这是另一种邪恶模式的方法:
M-x list-packages;/installed(它们将被突出显示);v(用于视觉模式);j(选择它们);y(复制它们);打开一个新的缓冲区并粘贴它们。