Aka*_*ale 47 emacs dot-emacs emacs24 emacs-prelude
我使用prelude作为基础Emacs配置.我已经从软件包管理器安装了很多软件包,我想在另一台机器上使用我的设置.
我不想携带已安装的软件包,也不想手动创建列表.
将所有已安装的软件包列表保存到prelude-package.el或任何其他文件中的方法是什么,这样当我将此配置带到我的其他机器时,它们会在首次使用时自动安装到那里?
ata*_*lor 67
您可以从变量中获取当前安装的软件包列表(不包括内置软件包)package-activated-list
.要在启动时自动安装它们,请参阅此问题:如何通过指定包名列表自动安装emacs包?
更具体地说,如果你这样做C-h v package-activated-list,复制显示的值,并将其作为值插入prelude-packages
,emacs将自动确保在启动时安装这些包.
小智 14
规范方法是最好的(由ataylor描述).这是一种更笨拙的方法.
M-x list-packages.C-s installed直到找到第一排安装包.开始选择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))
Run Code Online (Sandbox Code Playgroud)
这会给你一个(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)))
Run Code Online (Sandbox Code Playgroud)
我编写了一个更长的函数来安装与确切版本号匹配的包,但它失败了,因为package.el
默认情况下只检索每个包可用的最新版本。要旨