如何在 Emacs 24 中保存所有已安装软件包的列表



我正在使用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(复制它们);打开一个新的缓冲区并粘贴它们。

最新更新