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.
This commit is contained in:
Chong Yidong 2010-10-30 20:06:18 -04:00
parent 837ba704f8
commit 8a500a91a2
3 changed files with 41 additions and 5 deletions

View file

@ -1,3 +1,11 @@
2010-10-30 Chong Yidong <cyd@stupidchicken.com>
* 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 <acm@muc.de>
* progmodes/cc-fonts.el (c-font-lock-enum-tail): New function

View file

@ -1037,10 +1037,13 @@ The variable `package-load-list' controls which packages to load."
(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 @@ list; the default is to display everything in `package-alist'."
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))

View file

@ -1172,8 +1172,30 @@ the `--debug-init' option to view a complete error backtrace."
(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)