# HG changeset patch # User Chong Yidong # Date 1288483578 14400 # Node ID 6a10cca95d2b906d5b84fd5f8717d8335c522191 # Parent 0989a3a741bd6d08c15f4f100136bed8e2a35123 Check more carefully for packages before loading package.el. * startup.el (command-line): Search for package directories, and don't load package.el if none are found. * emacs-lisp/package.el (describe-package, list-packages): Call package-initialize if it has not been called yet. diff -r 0989a3a741bd -r 6a10cca95d2b lisp/ChangeLog --- a/lisp/ChangeLog Sat Oct 30 15:01:14 2010 +0000 +++ b/lisp/ChangeLog Sat Oct 30 20:06:18 2010 -0400 @@ -1,3 +1,11 @@ +2010-10-30 Chong Yidong + + * startup.el (command-line): Search for package directories, and + don't load package.el if none are found. + + * emacs-lisp/package.el (describe-package, list-packages): Call + package-initialize if it has not been called yet. + 2010-10-30 Alan Mackenzie * progmodes/cc-fonts.el (c-font-lock-enum-tail): New function diff -r 0989a3a741bd -r 6a10cca95d2b lisp/emacs-lisp/package.el --- a/lisp/emacs-lisp/package.el Sat Oct 30 15:01:14 2010 +0000 +++ b/lisp/emacs-lisp/package.el Sat Oct 30 20:06:18 2010 -0400 @@ -1037,10 +1037,13 @@ (defun describe-package (package) "Display the full documentation of PACKAGE (a symbol)." (interactive - (let* ((packages (append (mapcar 'car package-alist) + (let* ((guess (function-called-at-point)) + packages val) + ;; Initialize the package system if it's not. + (unless package-alist + (package-initialize)) + (setq packages (append (mapcar 'car package-alist) (mapcar 'car package-archive-contents))) - (guess (function-called-at-point)) - val) (unless (memq guess packages) (setq guess nil)) (setq packages (mapcar 'symbol-name packages)) @@ -1617,6 +1620,9 @@ Fetches the updated list of packages before displaying. The list is displayed in a buffer named `*Packages*'." (interactive) + ;; Initialize the package system if necessary. + (unless package-alist + (package-initialize)) (package-refresh-contents) (package--list-packages)) diff -r 0989a3a741bd -r 6a10cca95d2b lisp/startup.el --- a/lisp/startup.el Sat Oct 30 15:01:14 2010 +0000 +++ b/lisp/startup.el Sat Oct 30 20:06:18 2010 -0400 @@ -1172,8 +1172,30 @@ (eq face-ignored-fonts old-face-ignored-fonts)) (clear-face-cache))) - ;; Load ELPA packages. - (and user-init-file package-enable-at-startup (package-initialize)) + ;; If any package directory exists, initialize the package system. + (and user-init-file + package-enable-at-startup + (catch 'package-dir-found + (let (dirs) + (if (boundp 'package-directory-list) + (setq dirs package-directory-list) + (dolist (f load-path) + (and (stringp f) + (equal (file-name-nondirectory f) "site-lisp") + (push (expand-file-name "elpa" f) dirs)))) + (push (if (boundp 'package-user-dir) + package-user-dir + (locate-user-emacs-file "elpa")) + dirs) + (dolist (dir dirs) + (when (file-directory-p dir) + (dolist (subdir (directory-files dir)) + (when (and (file-directory-p (expand-file-name subdir dir)) + ;; package-subdirectory-regexp from package.el + (string-match "^\\([^.].*\\)-\\([0-9]+\\(?:[.][0-9]+\\)*\\)$" + subdir)) + (throw 'package-dir-found t))))))) + (package-initialize)) (setq after-init-time (current-time)) (run-hooks 'after-init-hook)