From fdc521952e6d68fa603aac899fe4c08e0a2ed480 Mon Sep 17 00:00:00 2001 From: Artur Malabarba Date: Sun, 5 Apr 2015 11:01:09 +0100 Subject: [PATCH] emacs-lisp/package.el: Add package-initialize to user-init-file. --- lisp/ChangeLog | 6 ++++++ lisp/emacs-lisp/package.el | 26 ++++++++++++++++++++++++++ 2 files changed, 32 insertions(+) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 0870f0cad31..fb82b5b574a 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,9 @@ +2015-04-05 Artur Malabarba + + * emacs-lisp/package.el: Add package-initialize to user-init-file. + (package--ensure-init-file): New function. + (package-install, package-install-from-buffer): Use it. + 2015-04-05 Pete Williamson (tiny-change) Fix .emacs and .emacs.d/init file recursion problem for NaCl diff --git a/lisp/emacs-lisp/package.el b/lisp/emacs-lisp/package.el index 83c5b2f6b10..18802701a0a 100644 --- a/lisp/emacs-lisp/package.el +++ b/lisp/emacs-lisp/package.el @@ -1723,6 +1723,30 @@ PACKAGES are satisfied, i.e. that PACKAGES is computed using `package-compute-transaction'." (mapc #'package-install-from-archive packages)) +(defun package--ensure-init-file () + "Ensure that the user's init file calls `package-initialize'." + ;; Don't mess with the init-file from "emacs -Q". + (when user-init-file + (let ((buffer (find-buffer-visiting user-init-file))) + (with-current-buffer (or buffer (find-file-noselect user-init-file)) + (save-excursion + (save-restriction + (widen) + (goto-char (point-min)) + (unless (search-forward "(package-initialize)" nil 'noerror) + (goto-char (point-min)) + (insert + ";; Added by Package.el. This must come before configurations of\n" + ";; installed packages. Don't delete this line. If you don't want it,\n" + ";; just comment it out by adding a semicolon to the start of the line.\n" + "(package-initialize)\n") + (unless (looking-at-p "$") + (insert "\n")) + (let ((file-precious-flag t)) + (save-buffer))) + (unless buffer + (kill-buffer (current-buffer))))))))) + ;;;###autoload (defun package-install (pkg &optional dont-select) "Install the package PKG. @@ -1751,6 +1775,7 @@ to install it but still mark it as selected." package-archive-contents)) nil t)) nil))) + (package--ensure-init-file) (let ((name (if (package-desc-p pkg) (package-desc-name pkg) pkg))) @@ -1794,6 +1819,7 @@ is derived from the main .el file in the directory. Downloads and installs required packages as needed." (interactive) + (package--ensure-init-file) (let* ((pkg-desc (cond ((derived-mode-p 'dired-mode) -- 2.39.5