How to save a list of all the installed packages in Emacs 24?
You can get a list of currently installed packages (excluding built in packages) from the variable package-activated-list
. To automatically install them on startup, see this question: how to automatically install emacs packages by specifying a list of package names?
More specifically, if you do C-h v package-activated-list, copy the value shown, and insert it as the value of prelude-packages
, emacs will automatically ensure those packages are installed on start up.
The canonical methodology is the best (described by ataylor). Here is a more clumsy method.
M-x list-packages. C-s installed till you find the first row of installed package. Start selecting with C-SPC. Go down till you reach built-in packages. Copy with M-w. C-x b for new buffer. Paste with C-y.C-x C-s to save file.
Only advantage that I see is this is a tad more descriptive. Showing a small description of your packages. useful when you install some packages and forget about it.
As mentioned at how to automatically install emacs packages by specifying a list of package names?, it would be better to also record the version of the package you need. In order to do so, you can use the following function:
(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))
That will give you a list of (NAME VERSION)
pairs. Unfortunately, I haven't been able to find a way to install a specific version of a package. It seems package.el
always grabs the latest available. What I'm doing now is:
(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)))
I've written a longer function to install packages matching the exact version number, but it fails because package.el
by default only retrieves the latest versions available for each package. gist
As described above, using emacs normal mode. Here another the evil-mode way of doing it:
M-x list-packages; /installed (they will be highlighted); v (for visual-mode); j (to select them); y (to copy them); open a new buffer and paste them.