导出Emacs安装的软件包?


10

我正在使用emacs 24.4。大约一年的使用时间,我通过Mx list-packages指令添加了大量已安装的软件包。我很想导出我已安装的软件包列表,以供其他地方使用。复制.emacs在启动时会给我一些错误,这会拖慢我的内存来安装某些东西。我怀疑我可以复制.emacs.d,但这似乎是个坏主意。

我是否可以发出将已安装软件包列表转储到一个文件中的程序或指令,该文件可用于轻松地在外部计算机上获取它们?



1
复制.emacs.d目录(或最好将其置于版本控制下)通常是一个好主意。(如果您决定这样做,也可以重命名~/.emacs~/.emacs.d/init.el。)
phils 2015年

Answers:


5

该目录~/.emacs.d/elpa包含所有通过安装的软件包list-packages。您可以复制此目录。

我可能还会运行类似(byte-recompile-directory "~/.emacs.d/elpa" 0 t)0表示不询问,t表示强制重新编译)的内容来对所有内容进行字节重新编译,因为我认为Emacs版本之间的字节编译文件有些不兼容。


自问这个问题以来,我已经多次使用这种策略。感谢您的输入。
sanimalp

4

我浏览了package.el文件并找到了变量package-alist。这似乎是所有已安装软件包的列表,包括已安装软件包所需的软件包。

如果只需要列出已安装的软件包名称,则下面的代码会将该列表中的软件包名称写到*Messages*缓冲区中。

(dolist (p1 (sort (mapcar 'symbol-name (mapcar 'car package-alist)) 'string<))
  (message "%s" p1))

我不是Lisp程序员,所以我敢肯定有人可以编写此代码的更好版本。

我还开始将use-package代码和该:ensure t选项一起使用,以便将我的所有软件包安装在新PC上。


2

一种方法是安装软件包(如果尚未安装),则应更新init文件并添加以下行:

(defvar my-packages
  '(color-theme db-pg db kv magit-push-remote magit-tramp
                magit git-rebase-mode git-commit-mode pg
                pretty-lambdada projectile pkg-info epl dash
                python-mode rich-minority s yasnippet yasnippet-bundle
                use-package key-chord undo-tree guide-key move-text
                openwith ack ag aggressive-indent nginx-mode multiple-cursors
                smartparens with-editor haskell-mode)
  "A list of packages to ensure are installed at launch.")

(defun my-packages-installed-p ()
  (loop for p in my-packages
        when (not (package-installed-p p)) do (return nil)
        finally (return t)))

(unless (my-packages-installed-p)
  ;; check for new packages (package versions)                                  
  (package-refresh-contents)
  ;; install the missing packages                                                                               
  (dolist (p my-packages)
    (when (not (package-installed-p p))
      (package-install p))))

修改my-packages变量并添加/删除要安装的软件包。M-x describe-variable package-activated-list将为您提供当前已安装软件包的列表。

之后,唯一要共享的是您的init文件。希望对您有所帮助。


糟糕,我知道您确实回答了如何转储列表。也许应该在您的答案中使其更加突出?
verdammelt 2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.