diff options
| author | Stefan Monnier | 2013-06-25 12:13:49 -0400 |
|---|---|---|
| committer | Stefan Monnier | 2013-06-25 12:13:49 -0400 |
| commit | 120597093d51973b0328cf7db2b23e3f089c06b3 (patch) | |
| tree | 1f09ded40b2d2997221e41bab343f92f7da49de6 | |
| parent | 3179b27616c0e763e019a2233591d6adc8e50964 (diff) | |
| download | emacs-120597093d51973b0328cf7db2b23e3f089c06b3.tar.gz emacs-120597093d51973b0328cf7db2b23e3f089c06b3.zip | |
* lisp/emacs-lisp/package.el: Include obsolete packages from archives.
Use lexical-binding.
(package-archive-contents): Change format; include obsolete packages.
(package-desc): Use `dir' to mark builtin packages.
(package--from-builtin): Set the `dir' field to `builtin'.
(generated-autoload-file, version-control): Declare.
(package-compute-transaction): Change first arg and return value to be
lists of package-descs. Adjust to new package-archive-contents format.
(package--add-to-archive-contents): Adjust to new
package-archive-contents format.
(package-download-transaction): Arg is now a list of package-descs.
(package-install): If `pkg' is a package name, pass it as
a requirement, so it is subject to the usual (e.g. disabled) checks.
(describe-package): Accept package-desc as well.
(describe-package-1): Describe a specific package-desc. Add links to
other package-descs for the same package name.
(package-menu-describe-package): Pass the actual package-desc.
(package-menu-mode): Add to tabulated-list-revert-hook so revert-buffer
works correctly.
(package-desc-status): New function.
(package-menu--refresh): New function, extracted
from package-menu--generate.
(package-menu--generate): Use it.
(package-delete): Update package-alist.
(package-menu-execute): Don't call package-initialize.
* lisp/progmodes/idlw-toolbar.el, lisp/progmodes/idlw-shell.el,
lisp/progmodes/idlw-help.el, lisp/progmodes/idlw-complete-structtag.el,
lisp/progmodes/ebnf-yac.el, lisp/progmodes/ebnf-otz.el,
lisp/progmodes/ebnf-iso.el, lisp/progmodes/ebnf-ebx.el,
lisp/progmodes/ebnf-dtd.el, lisp/progmodes/ebnf-bnf.el,
lisp/progmodes/ebnf-abn.el, lisp/emacs-lisp/package-x.el,
lisp/emacs-lisp/cl-seq.el, lisp/emacs-lisp/cl-macs.el
lisp/cedet/data-debug.el, lisp/cedet/cedet-idutils.el:
Neuter the "Version:" header.
| -rw-r--r-- | lisp/ChangeLog | 35 | ||||
| -rw-r--r-- | lisp/cedet/ChangeLog | 4 | ||||
| -rw-r--r-- | lisp/cedet/cedet-idutils.el | 2 | ||||
| -rw-r--r-- | lisp/cedet/data-debug.el | 2 | ||||
| -rw-r--r-- | lisp/emacs-lisp/cl-macs.el | 2 | ||||
| -rw-r--r-- | lisp/emacs-lisp/cl-seq.el | 2 | ||||
| -rw-r--r-- | lisp/emacs-lisp/package-x.el | 1 | ||||
| -rw-r--r-- | lisp/emacs-lisp/package.el | 445 | ||||
| -rw-r--r-- | lisp/progmodes/ebnf-abn.el | 2 | ||||
| -rw-r--r-- | lisp/progmodes/ebnf-bnf.el | 2 | ||||
| -rw-r--r-- | lisp/progmodes/ebnf-dtd.el | 2 | ||||
| -rw-r--r-- | lisp/progmodes/ebnf-ebx.el | 2 | ||||
| -rw-r--r-- | lisp/progmodes/ebnf-iso.el | 2 | ||||
| -rw-r--r-- | lisp/progmodes/ebnf-otz.el | 2 | ||||
| -rw-r--r-- | lisp/progmodes/ebnf-yac.el | 2 | ||||
| -rw-r--r-- | lisp/progmodes/idlw-complete-structtag.el | 2 | ||||
| -rw-r--r-- | lisp/progmodes/idlw-help.el | 1 | ||||
| -rw-r--r-- | lisp/progmodes/idlw-shell.el | 1 | ||||
| -rw-r--r-- | lisp/progmodes/idlw-toolbar.el | 1 |
19 files changed, 303 insertions, 209 deletions
diff --git a/lisp/ChangeLog b/lisp/ChangeLog index d5417a8c2c5..e4a42f955d3 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog | |||
| @@ -1,3 +1,38 @@ | |||
| 1 | 2013-06-25 Stefan Monnier <monnier@iro.umontreal.ca> | ||
| 2 | |||
| 3 | * emacs-lisp/package.el: Use lexical-binding. Include obsolete | ||
| 4 | packages from archives. | ||
| 5 | (package-archive-contents): Change format; include obsolete packages. | ||
| 6 | (package-desc): Use `dir' to mark builtin packages. | ||
| 7 | (package--from-builtin): Set the `dir' field to `builtin'. | ||
| 8 | (generated-autoload-file, version-control): Declare. | ||
| 9 | (package-compute-transaction): Change first arg and return value to be | ||
| 10 | lists of package-descs. Adjust to new package-archive-contents format. | ||
| 11 | (package--add-to-archive-contents): Adjust to new | ||
| 12 | package-archive-contents format. | ||
| 13 | (package-download-transaction): Arg is now a list of package-descs. | ||
| 14 | (package-install): If `pkg' is a package name, pass it as | ||
| 15 | a requirement, so it is subject to the usual (e.g. disabled) checks. | ||
| 16 | (describe-package): Accept package-desc as well. | ||
| 17 | (describe-package-1): Describe a specific package-desc. Add links to | ||
| 18 | other package-descs for the same package name. | ||
| 19 | (package-menu-describe-package): Pass the actual package-desc. | ||
| 20 | (package-menu-mode): Add to tabulated-list-revert-hook so revert-buffer | ||
| 21 | works correctly. | ||
| 22 | (package-desc-status): New function. | ||
| 23 | (package-menu--refresh): New function, extracted | ||
| 24 | from package-menu--generate. | ||
| 25 | (package-menu--generate): Use it. | ||
| 26 | (package-delete): Update package-alist. | ||
| 27 | (package-menu-execute): Don't call package-initialize. | ||
| 28 | |||
| 29 | * progmodes/idlw-toolbar.el, progmodes/idlw-shell.el, | ||
| 30 | progmodes/idlw-help.el, progmodes/idlw-complete-structtag.el, | ||
| 31 | progmodes/ebnf-yac.el, progmodes/ebnf-otz.el, progmodes/ebnf-iso.el, | ||
| 32 | progmodes/ebnf-ebx.el, progmodes/ebnf-dtd.el, progmodes/ebnf-bnf.el, | ||
| 33 | progmodes/ebnf-abn.el, emacs-lisp/package-x.el, emacs-lisp/cl-seq.el, | ||
| 34 | emacs-lisp/cl-macs.el: Neuter the "Version:" header. | ||
| 35 | |||
| 1 | 2013-06-25 Martin Rudalics <rudalics@gmx.at> | 36 | 2013-06-25 Martin Rudalics <rudalics@gmx.at> |
| 2 | 37 | ||
| 3 | * window.el (window--state-get-1): Workaround for bug#14527. | 38 | * window.el (window--state-get-1): Workaround for bug#14527. |
diff --git a/lisp/cedet/ChangeLog b/lisp/cedet/ChangeLog index 30d516f778f..7a2c5755cc0 100644 --- a/lisp/cedet/ChangeLog +++ b/lisp/cedet/ChangeLog | |||
| @@ -1,3 +1,7 @@ | |||
| 1 | 2013-06-25 Stefan Monnier <monnier@iro.umontreal.ca> | ||
| 2 | |||
| 3 | * data-debug.el, cedet-idutils.el: Neuter the "Version:" header. | ||
| 4 | |||
| 1 | 2013-06-19 Glenn Morris <rgm@fencepost.gnu.org> | 5 | 2013-06-19 Glenn Morris <rgm@fencepost.gnu.org> |
| 2 | 6 | ||
| 3 | * semantic/idle.el (define-semantic-idle-service): | 7 | * semantic/idle.el (define-semantic-idle-service): |
diff --git a/lisp/cedet/cedet-idutils.el b/lisp/cedet/cedet-idutils.el index 2f1dda4a71c..49d22b6a0ab 100644 --- a/lisp/cedet/cedet-idutils.el +++ b/lisp/cedet/cedet-idutils.el | |||
| @@ -3,7 +3,7 @@ | |||
| 3 | ;; Copyright (C) 2009-2013 Free Software Foundation, Inc. | 3 | ;; Copyright (C) 2009-2013 Free Software Foundation, Inc. |
| 4 | 4 | ||
| 5 | ;; Author: Eric M. Ludlam <eric@siege-engine.com> | 5 | ;; Author: Eric M. Ludlam <eric@siege-engine.com> |
| 6 | ;; Version: 0.2 | 6 | ;; Old-Version: 0.2 |
| 7 | ;; Keywords: OO, lisp | 7 | ;; Keywords: OO, lisp |
| 8 | ;; Package: cedet | 8 | ;; Package: cedet |
| 9 | 9 | ||
diff --git a/lisp/cedet/data-debug.el b/lisp/cedet/data-debug.el index dec3c7b2af2..c468ec1046a 100644 --- a/lisp/cedet/data-debug.el +++ b/lisp/cedet/data-debug.el | |||
| @@ -3,7 +3,7 @@ | |||
| 3 | ;; Copyright (C) 2007-2013 Free Software Foundation, Inc. | 3 | ;; Copyright (C) 2007-2013 Free Software Foundation, Inc. |
| 4 | 4 | ||
| 5 | ;; Author: Eric M. Ludlam <zappo@gnu.org> | 5 | ;; Author: Eric M. Ludlam <zappo@gnu.org> |
| 6 | ;; Version: 0.2 | 6 | ;; Old-Version: 0.2 |
| 7 | ;; Keywords: OO, lisp | 7 | ;; Keywords: OO, lisp |
| 8 | ;; Package: cedet | 8 | ;; Package: cedet |
| 9 | 9 | ||
diff --git a/lisp/emacs-lisp/cl-macs.el b/lisp/emacs-lisp/cl-macs.el index 384aa18e153..3cf744f1245 100644 --- a/lisp/emacs-lisp/cl-macs.el +++ b/lisp/emacs-lisp/cl-macs.el | |||
| @@ -3,7 +3,7 @@ | |||
| 3 | ;; Copyright (C) 1993, 2001-2013 Free Software Foundation, Inc. | 3 | ;; Copyright (C) 1993, 2001-2013 Free Software Foundation, Inc. |
| 4 | 4 | ||
| 5 | ;; Author: Dave Gillespie <daveg@synaptics.com> | 5 | ;; Author: Dave Gillespie <daveg@synaptics.com> |
| 6 | ;; Version: 2.02 | 6 | ;; Old-Version: 2.02 |
| 7 | ;; Keywords: extensions | 7 | ;; Keywords: extensions |
| 8 | ;; Package: emacs | 8 | ;; Package: emacs |
| 9 | 9 | ||
diff --git a/lisp/emacs-lisp/cl-seq.el b/lisp/emacs-lisp/cl-seq.el index fbf68f62b4a..6b5b329e33f 100644 --- a/lisp/emacs-lisp/cl-seq.el +++ b/lisp/emacs-lisp/cl-seq.el | |||
| @@ -3,7 +3,7 @@ | |||
| 3 | ;; Copyright (C) 1993, 2001-2013 Free Software Foundation, Inc. | 3 | ;; Copyright (C) 1993, 2001-2013 Free Software Foundation, Inc. |
| 4 | 4 | ||
| 5 | ;; Author: Dave Gillespie <daveg@synaptics.com> | 5 | ;; Author: Dave Gillespie <daveg@synaptics.com> |
| 6 | ;; Version: 2.02 | 6 | ;; Old-Version: 2.02 |
| 7 | ;; Keywords: extensions | 7 | ;; Keywords: extensions |
| 8 | ;; Package: emacs | 8 | ;; Package: emacs |
| 9 | 9 | ||
diff --git a/lisp/emacs-lisp/package-x.el b/lisp/emacs-lisp/package-x.el index 7d0d75f7cee..628eb88eea0 100644 --- a/lisp/emacs-lisp/package-x.el +++ b/lisp/emacs-lisp/package-x.el | |||
| @@ -4,7 +4,6 @@ | |||
| 4 | 4 | ||
| 5 | ;; Author: Tom Tromey <tromey@redhat.com> | 5 | ;; Author: Tom Tromey <tromey@redhat.com> |
| 6 | ;; Created: 10 Mar 2007 | 6 | ;; Created: 10 Mar 2007 |
| 7 | ;; Version: 0.9 | ||
| 8 | ;; Keywords: tools | 7 | ;; Keywords: tools |
| 9 | ;; Package: package | 8 | ;; Package: package |
| 10 | 9 | ||
diff --git a/lisp/emacs-lisp/package.el b/lisp/emacs-lisp/package.el index 37f20e0cfed..e141ea572f1 100644 --- a/lisp/emacs-lisp/package.el +++ b/lisp/emacs-lisp/package.el | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | ;;; package.el --- Simple package system for Emacs | 1 | ;;; package.el --- Simple package system for Emacs -*- lexical-binding:t -*- |
| 2 | 2 | ||
| 3 | ;; Copyright (C) 2007-2013 Free Software Foundation, Inc. | 3 | ;; Copyright (C) 2007-2013 Free Software Foundation, Inc. |
| 4 | 4 | ||
| @@ -253,7 +253,7 @@ Lower version numbers than this will probably be understood as well.") | |||
| 253 | (defvar package-archive-contents nil | 253 | (defvar package-archive-contents nil |
| 254 | "Cache of the contents of the Emacs Lisp Package Archive. | 254 | "Cache of the contents of the Emacs Lisp Package Archive. |
| 255 | This is an alist mapping package names (symbols) to | 255 | This is an alist mapping package names (symbols) to |
| 256 | `package-desc' structures.") | 256 | non-empty lists of `package-desc' structures.") |
| 257 | (put 'package-archive-contents 'risky-local-variable t) | 257 | (put 'package-archive-contents 'risky-local-variable t) |
| 258 | 258 | ||
| 259 | (defcustom package-user-dir (locate-user-emacs-file "elpa") | 259 | (defcustom package-user-dir (locate-user-emacs-file "elpa") |
| @@ -306,27 +306,27 @@ contrast, `package-user-dir' contains packages for personal use." | |||
| 306 | (nth 1 requirements) | 306 | (nth 1 requirements) |
| 307 | requirements)))))) | 307 | requirements)))))) |
| 308 | "Structure containing information about an individual package. | 308 | "Structure containing information about an individual package. |
| 309 | |||
| 310 | Slots: | 309 | Slots: |
| 311 | 310 | ||
| 312 | `name' Name of the package, as a symbol. | 311 | `name' Name of the package, as a symbol. |
| 313 | 312 | ||
| 314 | `version' Version of the package, as a version list. | 313 | `version' Version of the package, as a version list. |
| 315 | 314 | ||
| 316 | `summary' Short description of the package, typically taken from | 315 | `summary' Short description of the package, typically taken from |
| 317 | the first line of the file. | 316 | the first line of the file. |
| 318 | 317 | ||
| 319 | `reqs' Requirements of the package. A list of (PACKAGE | 318 | `reqs' Requirements of the package. A list of (PACKAGE |
| 320 | VERSION-LIST) naming the dependent package and the minimum | 319 | VERSION-LIST) naming the dependent package and the minimum |
| 321 | required version. | 320 | required version. |
| 322 | 321 | ||
| 323 | `kind' The distribution format of the package. Currently, it is | 322 | `kind' The distribution format of the package. Currently, it is |
| 324 | either `single' or `tar'. | 323 | either `single' or `tar'. |
| 325 | 324 | ||
| 326 | `archive' The name of the archive (as a string) whence this | 325 | `archive' The name of the archive (as a string) whence this |
| 327 | package came. | 326 | package came. |
| 328 | 327 | ||
| 329 | `dir' The directory where the package is installed (if installed)." | 328 | `dir' The directory where the package is installed (if installed), |
| 329 | `builtin' if it is built-in, or nil otherwise." | ||
| 330 | name | 330 | name |
| 331 | version | 331 | version |
| 332 | (summary package--default-summary) | 332 | (summary package--default-summary) |
| @@ -488,7 +488,8 @@ specifying the minimum acceptable version." | |||
| 488 | (defun package--from-builtin (bi-desc) | 488 | (defun package--from-builtin (bi-desc) |
| 489 | (package-desc-create :name (pop bi-desc) | 489 | (package-desc-create :name (pop bi-desc) |
| 490 | :version (package--bi-desc-version bi-desc) | 490 | :version (package--bi-desc-version bi-desc) |
| 491 | :summary (package--bi-desc-summary bi-desc))) | 491 | :summary (package--bi-desc-summary bi-desc) |
| 492 | :dir 'builtin)) | ||
| 492 | 493 | ||
| 493 | ;; This function goes ahead and activates a newer version of a package | 494 | ;; This function goes ahead and activates a newer version of a package |
| 494 | ;; if an older one was already activated. This is not ideal; we'd at | 495 | ;; if an older one was already activated. This is not ideal; we'd at |
| @@ -583,6 +584,9 @@ EXTRA-PROPERTIES is currently unused." | |||
| 583 | nil file)) | 584 | nil file)) |
| 584 | file) | 585 | file) |
| 585 | 586 | ||
| 587 | (defvar generated-autoload-file) | ||
| 588 | (defvar version-control) | ||
| 589 | |||
| 586 | (defun package-generate-autoloads (name pkg-dir) | 590 | (defun package-generate-autoloads (name pkg-dir) |
| 587 | (require 'autoload) ;Load before we let-bind generated-autoload-file! | 591 | (require 'autoload) ;Load before we let-bind generated-autoload-file! |
| 588 | (let* ((auto-name (format "%s-autoloads.el" name)) | 592 | (let* ((auto-name (format "%s-autoloads.el" name)) |
| @@ -756,9 +760,9 @@ MIN-VERSION should be a version list." | |||
| 756 | ;; Also check built-in packages. | 760 | ;; Also check built-in packages. |
| 757 | (package-built-in-p package min-version))) | 761 | (package-built-in-p package min-version))) |
| 758 | 762 | ||
| 759 | (defun package-compute-transaction (package-list requirements) | 763 | (defun package-compute-transaction (packages requirements) |
| 760 | "Return a list of packages to be installed, including PACKAGE-LIST. | 764 | "Return a list of packages to be installed, including PACKAGES. |
| 761 | PACKAGE-LIST should be a list of package names (symbols). | 765 | PACKAGES should be a list of `package-desc'. |
| 762 | 766 | ||
| 763 | REQUIREMENTS should be a list of additional requirements; each | 767 | REQUIREMENTS should be a list of additional requirements; each |
| 764 | element in this list should have the form (PACKAGE VERSION-LIST), | 768 | element in this list should have the form (PACKAGE VERSION-LIST), |
| @@ -769,40 +773,65 @@ This function recursively computes the requirements of the | |||
| 769 | packages in REQUIREMENTS, and returns a list of all the packages | 773 | packages in REQUIREMENTS, and returns a list of all the packages |
| 770 | that must be installed. Packages that are already installed are | 774 | that must be installed. Packages that are already installed are |
| 771 | not included in this list." | 775 | not included in this list." |
| 776 | ;; FIXME: We really should use backtracking to explore the whole | ||
| 777 | ;; search space (e.g. if foo require bar-1.3, and bar-1.4 requires toto-1.1 | ||
| 778 | ;; whereas bar-1.3 requires toto-1.0 and the user has put a hold on toto-1.0: | ||
| 779 | ;; the current code might fail to see that it could install foo by using the | ||
| 780 | ;; older bar-1.3). | ||
| 772 | (dolist (elt requirements) | 781 | (dolist (elt requirements) |
| 773 | (let* ((next-pkg (car elt)) | 782 | (let* ((next-pkg (car elt)) |
| 774 | (next-version (cadr elt))) | 783 | (next-version (cadr elt)) |
| 775 | (unless (package-installed-p next-pkg next-version) | 784 | (already ())) |
| 785 | (dolist (pkg packages) | ||
| 786 | (if (eq next-pkg (package-desc-name pkg)) | ||
| 787 | (setq already pkg))) | ||
| 788 | (cond | ||
| 789 | (already | ||
| 790 | (if (version-list-< next-version (package-desc-version already)) | ||
| 791 | ;; Move to front, so it gets installed early enough (bug#14082). | ||
| 792 | (setq packages (cons already (delq already packages))) | ||
| 793 | (error "Need package `%s-%s', but only %s is available" | ||
| 794 | next-pkg (package-version-join next-version) | ||
| 795 | (package-version-join (package-desc-version already))))) | ||
| 796 | |||
| 797 | ((package-installed-p next-pkg next-version) nil) | ||
| 798 | |||
| 799 | (t | ||
| 776 | ;; A package is required, but not installed. It might also be | 800 | ;; A package is required, but not installed. It might also be |
| 777 | ;; blocked via `package-load-list'. | 801 | ;; blocked via `package-load-list'. |
| 778 | (let ((pkg-desc (cdr (assq next-pkg package-archive-contents))) | 802 | (let ((pkg-descs (cdr (assq next-pkg package-archive-contents))) |
| 779 | ;; FIXME: package-disabled-p needs to use a <= test! | 803 | (found nil) |
| 780 | (disabled (package-disabled-p next-pkg next-version))) | 804 | (problem nil)) |
| 781 | (when disabled | 805 | (while (and pkg-descs (not found)) |
| 782 | (if (stringp disabled) | 806 | (let* ((pkg-desc (pop pkg-descs)) |
| 783 | (error "Package `%s' held at version %s, \ | 807 | (version (package-desc-version pkg-desc)) |
| 808 | (disabled (package-disabled-p next-pkg version))) | ||
| 809 | (cond | ||
| 810 | ((version-list-< version next-version) | ||
| 811 | (error | ||
| 812 | "Need package `%s-%s', but only %s is available" | ||
| 813 | next-pkg (package-version-join next-version) | ||
| 814 | (package-version-join version))) | ||
| 815 | (disabled | ||
| 816 | (unless problem | ||
| 817 | (setq problem | ||
| 818 | (if (stringp disabled) | ||
| 819 | (format "Package `%s' held at version %s, \ | ||
| 784 | but version %s required" | 820 | but version %s required" |
| 785 | (symbol-name next-pkg) disabled | 821 | next-pkg disabled |
| 786 | (package-version-join next-version)) | 822 | (package-version-join next-version)) |
| 787 | (error "Required package '%s' is disabled" | 823 | (format "Required package '%s' is disabled" |
| 788 | (symbol-name next-pkg)))) | 824 | next-pkg))))) |
| 789 | (unless pkg-desc | 825 | (t (setq found pkg-desc))))) |
| 790 | (error "Package `%s-%s' is unavailable" | 826 | (unless found |
| 791 | (symbol-name next-pkg) | 827 | (if problem |
| 792 | (package-version-join next-version))) | 828 | (error problem) |
| 793 | (unless (version-list-<= next-version | 829 | (error "Package `%s-%s' is unavailable" |
| 794 | (package-desc-version pkg-desc)) | 830 | next-pkg (package-version-join next-version)))) |
| 795 | (error | 831 | (setq packages |
| 796 | "Need package `%s-%s', but only %s is available" | 832 | (package-compute-transaction (cons found packages) |
| 797 | (symbol-name next-pkg) (package-version-join next-version) | 833 | (package-desc-reqs found)))))))) |
| 798 | (package-version-join (package-desc-version pkg-desc)))) | 834 | packages) |
| 799 | ;; Move to front, so it gets installed early enough (bug#14082). | ||
| 800 | (setq package-list (cons next-pkg (delq next-pkg package-list))) | ||
| 801 | (setq package-list | ||
| 802 | (package-compute-transaction package-list | ||
| 803 | (package-desc-reqs | ||
| 804 | pkg-desc))))))) | ||
| 805 | package-list) | ||
| 806 | 835 | ||
| 807 | (defun package-read-from-string (str) | 836 | (defun package-read-from-string (str) |
| 808 | "Read a Lisp expression from STR. | 837 | "Read a Lisp expression from STR. |
| @@ -875,40 +904,35 @@ Also, add the originating archive to the `package-desc' structure." | |||
| 875 | :summary (package--ac-desc-summary (cdr package)) | 904 | :summary (package--ac-desc-summary (cdr package)) |
| 876 | :kind (package--ac-desc-kind (cdr package)) | 905 | :kind (package--ac-desc-kind (cdr package)) |
| 877 | :archive archive)) | 906 | :archive archive)) |
| 878 | (entry (cons name pkg-desc)) | 907 | (existing-packages (assq name package-archive-contents)) |
| 879 | (existing-package (assq name package-archive-contents)) | ||
| 880 | (pinned-to-archive (assoc name package-pinned-packages))) | 908 | (pinned-to-archive (assoc name package-pinned-packages))) |
| 881 | (cond | 909 | (cond |
| 882 | ;; Skip entirely if pinned to another archive or if no more recent | 910 | ;; Skip entirely if pinned to another archive or already installed. |
| 883 | ;; than what we already have installed. | ||
| 884 | ((or (and pinned-to-archive | 911 | ((or (and pinned-to-archive |
| 885 | (not (equal (cdr pinned-to-archive) archive))) | 912 | (not (equal (cdr pinned-to-archive) archive))) |
| 886 | (let ((bi (assq name package--builtin-versions))) | 913 | (let ((bi (assq name package--builtin-versions))) |
| 887 | (and bi (version-list-<= version (cdr bi)))) | 914 | (and bi (version-list-= version (cdr bi)))) |
| 888 | (let ((ins (cdr (assq name package-alist)))) | 915 | (let ((ins (cdr (assq name package-alist)))) |
| 889 | (and ins (version-list-<= version | 916 | (and ins (version-list-= version |
| 890 | (package-desc-version (car ins)))))) | 917 | (package-desc-version (car ins)))))) |
| 891 | nil) | 918 | nil) |
| 892 | ((not existing-package) | 919 | ((not existing-packages) |
| 893 | (push entry package-archive-contents)) | 920 | (push (list name pkg-desc) package-archive-contents)) |
| 894 | ((version-list-< (package-desc-version (cdr existing-package)) | 921 | (t |
| 895 | version) | 922 | (while |
| 896 | ;; Replace the entry with this one. | 923 | (if (and (cdr existing-packages) |
| 897 | (setq package-archive-contents | 924 | (version-list-< |
| 898 | (cons entry | 925 | version (package-desc-version (cadr existing-packages)))) |
| 899 | (delq existing-package | 926 | (setq existing-packages (cdr existing-packages)) |
| 900 | package-archive-contents))))))) | 927 | (push pkg-desc (cdr existing-packages)))))))) |
| 901 | 928 | ||
| 902 | (defun package-download-transaction (package-list) | 929 | (defun package-download-transaction (packages) |
| 903 | "Download and install all the packages in PACKAGE-LIST. | 930 | "Download and install all the packages in PACKAGES. |
| 904 | PACKAGE-LIST should be a list of package names (symbols). | 931 | PACKAGES should be a list of package-desc. |
| 905 | This function assumes that all package requirements in | 932 | This function assumes that all package requirements in |
| 906 | PACKAGE-LIST are satisfied, i.e. that PACKAGE-LIST is computed | 933 | PACKAGES are satisfied, i.e. that PACKAGES is computed |
| 907 | using `package-compute-transaction'." | 934 | using `package-compute-transaction'." |
| 908 | ;; FIXME: make package-list a list of pkg-desc. | 935 | (mapc #'package-install-from-archive packages)) |
| 909 | (dolist (elt package-list) | ||
| 910 | (let ((desc (cdr (assq elt package-archive-contents)))) | ||
| 911 | (package-install-from-archive desc)))) | ||
| 912 | 936 | ||
| 913 | ;;;###autoload | 937 | ;;;###autoload |
| 914 | (defun package-install (pkg) | 938 | (defun package-install (pkg) |
| @@ -924,21 +948,16 @@ in an archive in `package-archives'. Interactively, prompt for its name." | |||
| 924 | (unless package-archive-contents | 948 | (unless package-archive-contents |
| 925 | (package-refresh-contents)) | 949 | (package-refresh-contents)) |
| 926 | (list (intern (completing-read | 950 | (list (intern (completing-read |
| 927 | "Install package: " | 951 | "Install package: " |
| 928 | (mapcar (lambda (elt) | 952 | (mapcar (lambda (elt) (symbol-name (car elt))) |
| 929 | (cons (symbol-name (car elt)) | 953 | package-archive-contents) |
| 930 | nil)) | ||
| 931 | package-archive-contents) | ||
| 932 | nil t))))) | 954 | nil t))))) |
| 933 | (let ((pkg-desc | ||
| 934 | (if (package-desc-p pkg) pkg | ||
| 935 | (cdr (assq pkg package-archive-contents))))) | ||
| 936 | (unless pkg-desc | ||
| 937 | (error "Package `%s' is not available for installation" pkg)) | ||
| 938 | (package-download-transaction | 955 | (package-download-transaction |
| 939 | ;; FIXME: Use (list pkg-desc) instead of just the name. | 956 | (if (package-desc-p pkg) |
| 940 | (package-compute-transaction (list (package-desc-name pkg-desc)) | 957 | (package-compute-transaction (list pkg) |
| 941 | (package-desc-reqs pkg-desc))))) | 958 | (package-desc-reqs pkg)) |
| 959 | (package-compute-transaction () | ||
| 960 | (list (list pkg)))))) | ||
| 942 | 961 | ||
| 943 | (defun package-strip-rcs-id (str) | 962 | (defun package-strip-rcs-id (str) |
| 944 | "Strip RCS version ID from the version string STR. | 963 | "Strip RCS version ID from the version string STR. |
| @@ -1043,15 +1062,17 @@ The file can either be a tar file or an Emacs Lisp file." | |||
| 1043 | 1062 | ||
| 1044 | (defun package-delete (pkg-desc) | 1063 | (defun package-delete (pkg-desc) |
| 1045 | (let ((dir (package-desc-dir pkg-desc))) | 1064 | (let ((dir (package-desc-dir pkg-desc))) |
| 1046 | (if (string-equal (file-name-directory dir) | 1065 | (if (not (string-prefix-p (file-name-as-directory |
| 1047 | (file-name-as-directory | 1066 | (expand-file-name package-user-dir)) |
| 1048 | (expand-file-name package-user-dir))) | 1067 | (expand-file-name dir))) |
| 1049 | (progn | 1068 | ;; Don't delete "system" packages. |
| 1050 | (delete-directory dir t t) | 1069 | (error "Package `%s' is a system package, not deleting" |
| 1051 | (message "Package `%s' deleted." (package-desc-full-name pkg-desc))) | 1070 | (package-desc-full-name pkg-desc)) |
| 1052 | ;; Don't delete "system" packages | 1071 | (delete-directory dir t t) |
| 1053 | (error "Package `%s' is a system package, not deleting" | 1072 | ;; Update package-alist. |
| 1054 | (package-desc-full-name pkg-desc))))) | 1073 | (let* ((name (package-desc-name pkg-desc))) |
| 1074 | (delete pkg-desc (assq name package-alist))) | ||
| 1075 | (message "Package `%s' deleted." (package-desc-full-name pkg-desc))))) | ||
| 1055 | 1076 | ||
| 1056 | (defun package-archive-base (desc) | 1077 | (defun package-archive-base (desc) |
| 1057 | "Return the archive containing the package NAME." | 1078 | "Return the archive containing the package NAME." |
| @@ -1110,26 +1131,25 @@ If optional arg NO-ACTIVATE is non-nil, don't activate packages." | |||
| 1110 | (defun describe-package (package) | 1131 | (defun describe-package (package) |
| 1111 | "Display the full documentation of PACKAGE (a symbol)." | 1132 | "Display the full documentation of PACKAGE (a symbol)." |
| 1112 | (interactive | 1133 | (interactive |
| 1113 | (let* ((guess (function-called-at-point)) | 1134 | (let* ((guess (function-called-at-point))) |
| 1114 | packages val) | ||
| 1115 | (require 'finder-inf nil t) | 1135 | (require 'finder-inf nil t) |
| 1116 | ;; Load the package list if necessary (but don't activate them). | 1136 | ;; Load the package list if necessary (but don't activate them). |
| 1117 | (unless package--initialized | 1137 | (unless package--initialized |
| 1118 | (package-initialize t)) | 1138 | (package-initialize t)) |
| 1119 | (setq packages (append (mapcar 'car package-alist) | 1139 | (let ((packages (append (mapcar 'car package-alist) |
| 1120 | (mapcar 'car package-archive-contents) | 1140 | (mapcar 'car package-archive-contents) |
| 1121 | (mapcar 'car package--builtins))) | 1141 | (mapcar 'car package--builtins)))) |
| 1122 | (unless (memq guess packages) | 1142 | (unless (memq guess packages) |
| 1123 | (setq guess nil)) | 1143 | (setq guess nil)) |
| 1124 | (setq packages (mapcar 'symbol-name packages)) | 1144 | (setq packages (mapcar 'symbol-name packages)) |
| 1125 | (setq val | 1145 | (let ((val |
| 1126 | (completing-read (if guess | 1146 | (completing-read (if guess |
| 1127 | (format "Describe package (default %s): " | 1147 | (format "Describe package (default %s): " |
| 1128 | guess) | 1148 | guess) |
| 1129 | "Describe package: ") | 1149 | "Describe package: ") |
| 1130 | packages nil t nil nil guess)) | 1150 | packages nil t nil nil guess))) |
| 1131 | (list (if (equal val "") guess (intern val))))) | 1151 | (list (intern val)))))) |
| 1132 | (if (not (and package (symbolp package))) | 1152 | (if (not (or (package-desc-p package) (and package (symbolp package)))) |
| 1133 | (message "No package specified") | 1153 | (message "No package specified") |
| 1134 | (help-setup-xref (list #'describe-package package) | 1154 | (help-setup-xref (list #'describe-package package) |
| 1135 | (called-interactively-p 'interactive)) | 1155 | (called-interactively-p 'interactive)) |
| @@ -1137,57 +1157,52 @@ If optional arg NO-ACTIVATE is non-nil, don't activate packages." | |||
| 1137 | (with-current-buffer standard-output | 1157 | (with-current-buffer standard-output |
| 1138 | (describe-package-1 package))))) | 1158 | (describe-package-1 package))))) |
| 1139 | 1159 | ||
| 1140 | (defun describe-package-1 (package) | 1160 | (defun describe-package-1 (pkg) |
| 1141 | (require 'lisp-mnt) | 1161 | (require 'lisp-mnt) |
| 1142 | (let ((package-name (symbol-name package)) | 1162 | (let* ((desc (or |
| 1143 | (built-in (assq package package--builtins)) | 1163 | (if (package-desc-p pkg) pkg) |
| 1144 | desc pkg-dir reqs version installable archive) | 1164 | (cadr (assq pkg package-alist)) |
| 1145 | (prin1 package) | 1165 | (let ((built-in (assq pkg package--builtins))) |
| 1166 | (if built-in | ||
| 1167 | (package--from-builtin built-in) | ||
| 1168 | (cadr (assq pkg package-archive-contents)))))) | ||
| 1169 | (name (if desc (package-desc-name desc) pkg)) | ||
| 1170 | (pkg-dir (if desc (package-desc-dir desc))) | ||
| 1171 | (reqs (if desc (package-desc-reqs desc))) | ||
| 1172 | (version (if desc (package-desc-version desc))) | ||
| 1173 | (archive (if desc (package-desc-archive desc))) | ||
| 1174 | (built-in (eq pkg-dir 'builtin)) | ||
| 1175 | (installable (and archive (not built-in))) | ||
| 1176 | (status (if desc (package-desc-status desc) "orphan"))) | ||
| 1177 | (prin1 name) | ||
| 1146 | (princ " is ") | 1178 | (princ " is ") |
| 1147 | (cond | 1179 | (princ (if (memq (aref status 0) '(?a ?e ?i ?o ?u)) "an " "a ")) |
| 1148 | ;; Loaded packages are in `package-alist'. | 1180 | (princ status) |
| 1149 | ((setq desc (cadr (assq package package-alist))) | 1181 | (princ " package.\n\n") |
| 1150 | (setq version (package-version-join (package-desc-version desc))) | ||
| 1151 | (if (setq pkg-dir (package-desc-dir desc)) | ||
| 1152 | (insert "an installed package.\n\n") | ||
| 1153 | ;; This normally does not happen. | ||
| 1154 | (insert "a deleted package.\n\n"))) | ||
| 1155 | ;; Available packages are in `package-archive-contents'. | ||
| 1156 | ((setq desc (cdr (assq package package-archive-contents))) | ||
| 1157 | (setq version (package-version-join (package-desc-version desc)) | ||
| 1158 | archive (package-desc-archive desc) | ||
| 1159 | installable t) | ||
| 1160 | (if built-in | ||
| 1161 | (insert "a built-in package.\n\n") | ||
| 1162 | (insert "an uninstalled package.\n\n"))) | ||
| 1163 | (built-in | ||
| 1164 | (setq desc (package--from-builtin built-in) | ||
| 1165 | version (package-version-join (package-desc-version desc))) | ||
| 1166 | (insert "a built-in package.\n\n")) | ||
| 1167 | (t | ||
| 1168 | (insert "an orphan package.\n\n"))) | ||
| 1169 | 1182 | ||
| 1170 | (insert " " (propertize "Status" 'font-lock-face 'bold) ": ") | 1183 | (insert " " (propertize "Status" 'font-lock-face 'bold) ": ") |
| 1171 | (cond (pkg-dir | 1184 | (cond (built-in |
| 1172 | (insert (propertize "Installed" | 1185 | (insert (propertize (capitalize status) |
| 1186 | 'font-lock-face 'font-lock-builtin-face) | ||
| 1187 | ".")) | ||
| 1188 | (pkg-dir | ||
| 1189 | (insert (propertize (capitalize status) ;FIXME: Why comment-face? | ||
| 1173 | 'font-lock-face 'font-lock-comment-face)) | 1190 | 'font-lock-face 'font-lock-comment-face)) |
| 1174 | (insert " in `") | 1191 | (insert " in `") |
| 1175 | ;; Todo: Add button for uninstalling. | 1192 | ;; Todo: Add button for uninstalling. |
| 1176 | (help-insert-xref-button (file-name-as-directory pkg-dir) | 1193 | (help-insert-xref-button (abbreviate-file-name |
| 1194 | (file-name-as-directory pkg-dir)) | ||
| 1177 | 'help-package-def pkg-dir) | 1195 | 'help-package-def pkg-dir) |
| 1178 | (if built-in | 1196 | (if (and (package-built-in-p name) |
| 1197 | (not (package-built-in-p name version))) | ||
| 1179 | (insert "',\n shadowing a " | 1198 | (insert "',\n shadowing a " |
| 1180 | (propertize "built-in package" | 1199 | (propertize "built-in package" |
| 1181 | 'font-lock-face 'font-lock-builtin-face) | 1200 | 'font-lock-face 'font-lock-builtin-face) |
| 1182 | ".") | 1201 | ".") |
| 1183 | (insert "'."))) | 1202 | (insert "'."))) |
| 1184 | (installable | 1203 | (installable |
| 1185 | (if built-in | 1204 | (insert (capitalize status)) |
| 1186 | (insert (propertize "Built-in." | 1205 | (insert " from " (format "%s" archive)) |
| 1187 | 'font-lock-face 'font-lock-builtin-face) | ||
| 1188 | " Alternate version available") | ||
| 1189 | (insert "Available")) | ||
| 1190 | (insert " from " archive) | ||
| 1191 | (insert " -- ") | 1206 | (insert " -- ") |
| 1192 | (let ((button-text (if (display-graphic-p) "Install" "[Install]")) | 1207 | (let ((button-text (if (display-graphic-p) "Install" "[Install]")) |
| 1193 | (button-face (if (display-graphic-p) | 1208 | (button-face (if (display-graphic-p) |
| @@ -1198,14 +1213,12 @@ If optional arg NO-ACTIVATE is non-nil, don't activate packages." | |||
| 1198 | (insert-text-button button-text 'face button-face 'follow-link t | 1213 | (insert-text-button button-text 'face button-face 'follow-link t |
| 1199 | 'package-desc desc | 1214 | 'package-desc desc |
| 1200 | 'action 'package-install-button-action))) | 1215 | 'action 'package-install-button-action))) |
| 1201 | (built-in | 1216 | (t (insert (capitalize status) "."))) |
| 1202 | (insert (propertize "Built-in." | ||
| 1203 | 'font-lock-face 'font-lock-builtin-face))) | ||
| 1204 | (t (insert "Deleted."))) | ||
| 1205 | (insert "\n") | 1217 | (insert "\n") |
| 1206 | (and version (> (length version) 0) | 1218 | (and version |
| 1207 | (insert " " | 1219 | (insert " " |
| 1208 | (propertize "Version" 'font-lock-face 'bold) ": " version "\n")) | 1220 | (propertize "Version" 'font-lock-face 'bold) ": " |
| 1221 | (package-version-join version) "\n")) | ||
| 1209 | 1222 | ||
| 1210 | (setq reqs (if desc (package-desc-reqs desc))) | 1223 | (setq reqs (if desc (package-desc-reqs desc))) |
| 1211 | (when reqs | 1224 | (when reqs |
| @@ -1225,11 +1238,38 @@ If optional arg NO-ACTIVATE is non-nil, don't activate packages." | |||
| 1225 | (help-insert-xref-button text 'help-package name)) | 1238 | (help-insert-xref-button text 'help-package name)) |
| 1226 | (insert "\n"))) | 1239 | (insert "\n"))) |
| 1227 | (insert " " (propertize "Summary" 'font-lock-face 'bold) | 1240 | (insert " " (propertize "Summary" 'font-lock-face 'bold) |
| 1228 | ": " (if desc (package-desc-summary desc)) "\n\n") | 1241 | ": " (if desc (package-desc-summary desc)) "\n") |
| 1242 | |||
| 1243 | (let* ((all-pkgs (append (cdr (assq name package-alist)) | ||
| 1244 | (cdr (assq name package-archive-contents)) | ||
| 1245 | (let ((bi (assq name package--builtins))) | ||
| 1246 | (if bi (list (package--from-builtin bi)))))) | ||
| 1247 | (other-pkgs (delete desc all-pkgs))) | ||
| 1248 | (when other-pkgs | ||
| 1249 | (insert " " (propertize "Other versions" 'font-lock-face 'bold) ": " | ||
| 1250 | (mapconcat | ||
| 1251 | (lambda (opkg) | ||
| 1252 | (let* ((ov (package-desc-version opkg)) | ||
| 1253 | (dir (package-desc-dir opkg)) | ||
| 1254 | (from (or (package-desc-archive opkg) | ||
| 1255 | (if (stringp dir) "installed" dir)))) | ||
| 1256 | (if (not ov) (format "%s" from) | ||
| 1257 | (format "%s (%s)" | ||
| 1258 | (make-text-button (package-version-join ov) nil | ||
| 1259 | 'face 'link | ||
| 1260 | 'follow-link t | ||
| 1261 | 'action | ||
| 1262 | (lambda (_button) | ||
| 1263 | (describe-package opkg))) | ||
| 1264 | from)))) | ||
| 1265 | other-pkgs ", ") | ||
| 1266 | ".\n"))) | ||
| 1267 | |||
| 1268 | (insert "\n") | ||
| 1229 | 1269 | ||
| 1230 | (if built-in | 1270 | (if built-in |
| 1231 | ;; For built-in packages, insert the commentary. | 1271 | ;; For built-in packages, insert the commentary. |
| 1232 | (let ((fn (locate-file (concat package-name ".el") load-path | 1272 | (let ((fn (locate-file (format "%s.el" name) load-path |
| 1233 | load-file-rep-suffixes)) | 1273 | load-file-rep-suffixes)) |
| 1234 | (opoint (point))) | 1274 | (opoint (point))) |
| 1235 | (insert (or (lm-commentary fn) "")) | 1275 | (insert (or (lm-commentary fn) "")) |
| @@ -1239,14 +1279,15 @@ If optional arg NO-ACTIVATE is non-nil, don't activate packages." | |||
| 1239 | (replace-match "")) | 1279 | (replace-match "")) |
| 1240 | (while (re-search-forward "^\\(;+ ?\\)" nil t) | 1280 | (while (re-search-forward "^\\(;+ ?\\)" nil t) |
| 1241 | (replace-match "")))) | 1281 | (replace-match "")))) |
| 1242 | (let ((readme (expand-file-name (concat package-name "-readme.txt") | 1282 | (let ((readme (expand-file-name (format "%s-readme.txt" name) |
| 1243 | package-user-dir)) | 1283 | package-user-dir)) |
| 1244 | readme-string) | 1284 | readme-string) |
| 1245 | ;; For elpa packages, try downloading the commentary. If that | 1285 | ;; For elpa packages, try downloading the commentary. If that |
| 1246 | ;; fails, try an existing readme file in `package-user-dir'. | 1286 | ;; fails, try an existing readme file in `package-user-dir'. |
| 1247 | (cond ((condition-case nil | 1287 | (cond ((condition-case nil |
| 1248 | (package--with-work-buffer (package-archive-base desc) | 1288 | (package--with-work-buffer |
| 1249 | (concat package-name "-readme.txt") | 1289 | (package-archive-base desc) |
| 1290 | (format "%s-readme.txt" name) | ||
| 1250 | (setq buffer-file-name | 1291 | (setq buffer-file-name |
| 1251 | (expand-file-name readme package-user-dir)) | 1292 | (expand-file-name readme package-user-dir)) |
| 1252 | (let ((version-control 'never)) | 1293 | (let ((version-control 'never)) |
| @@ -1350,6 +1391,7 @@ Letters do not insert themselves; instead, they are commands. | |||
| 1350 | ("Description" 0 nil)]) | 1391 | ("Description" 0 nil)]) |
| 1351 | (setq tabulated-list-padding 2) | 1392 | (setq tabulated-list-padding 2) |
| 1352 | (setq tabulated-list-sort-key (cons "Status" nil)) | 1393 | (setq tabulated-list-sort-key (cons "Status" nil)) |
| 1394 | (add-hook 'tabulated-list-revert-hook 'package-menu--refresh) | ||
| 1353 | (tabulated-list-init-header)) | 1395 | (tabulated-list-init-header)) |
| 1354 | 1396 | ||
| 1355 | (defmacro package--push (pkg-desc status listname) | 1397 | (defmacro package--push (pkg-desc status listname) |
| @@ -1363,34 +1405,49 @@ package PKG-DESC, add one. The alist is keyed with PKG-DESC." | |||
| 1363 | (defvar package-list-unversioned nil | 1405 | (defvar package-list-unversioned nil |
| 1364 | "If non-nil include packages that don't have a version in `list-package'.") | 1406 | "If non-nil include packages that don't have a version in `list-package'.") |
| 1365 | 1407 | ||
| 1366 | (defun package-menu--generate (remember-pos packages) | 1408 | (defun package-desc-status (pkg-desc) |
| 1367 | "Populate the Package Menu. | 1409 | (let* ((name (package-desc-name pkg-desc)) |
| 1368 | If REMEMBER-POS is non-nil, keep point on the same entry. | 1410 | (dir (package-desc-dir pkg-desc)) |
| 1369 | PACKAGES should be t, which means to display all known packages, | 1411 | (lle (assq name package-load-list)) |
| 1370 | or a list of package names (symbols) to display." | 1412 | (held (cadr lle)) |
| 1413 | (version (package-desc-version pkg-desc))) | ||
| 1414 | (cond | ||
| 1415 | ((eq dir 'builtin) "built-in") | ||
| 1416 | ((and lle (null held)) "disabled") | ||
| 1417 | ((stringp held) | ||
| 1418 | (let ((hv (if (stringp held) (version-to-list held)))) | ||
| 1419 | (cond | ||
| 1420 | ((version-list-= version hv) "held") | ||
| 1421 | ((version-list-< version hv) "obsolete") | ||
| 1422 | (t "disabled")))) | ||
| 1423 | ((package-built-in-p name version) "obsolete") | ||
| 1424 | (dir ;One of the installed packages. | ||
| 1425 | (cond | ||
| 1426 | ((not (file-exists-p (package-desc-dir pkg-desc))) "deleted") | ||
| 1427 | ((eq pkg-desc (cadr (assq name package-alist))) "installed") | ||
| 1428 | (t "obsolete"))) | ||
| 1429 | (t | ||
| 1430 | (let* ((ins (cadr (assq name package-alist))) | ||
| 1431 | (ins-v (if ins (package-desc-version ins)))) | ||
| 1432 | (cond | ||
| 1433 | ((or (null ins) (version-list-< ins-v version)) | ||
| 1434 | (if (memq name package-menu--new-package-list) | ||
| 1435 | "new" "available")) | ||
| 1436 | ((version-list-< version ins-v) "obsolete") | ||
| 1437 | ((version-list-= version ins-v) "installed"))))))) | ||
| 1438 | |||
| 1439 | (defun package-menu--refresh (&optional packages) | ||
| 1440 | "Re-populate the `tabulated-list-entries'. | ||
| 1441 | PACKAGES should be nil or t, which means to display all known packages." | ||
| 1371 | ;; Construct list of (PKG-DESC . STATUS). | 1442 | ;; Construct list of (PKG-DESC . STATUS). |
| 1443 | (unless packages (setq packages t)) | ||
| 1372 | (let (info-list name) | 1444 | (let (info-list name) |
| 1373 | ;; Installed packages: | 1445 | ;; Installed packages: |
| 1374 | (dolist (elt package-alist) | 1446 | (dolist (elt package-alist) |
| 1375 | (setq name (car elt)) | 1447 | (setq name (car elt)) |
| 1376 | (when (or (eq packages t) (memq name packages)) | 1448 | (when (or (eq packages t) (memq name packages)) |
| 1377 | (let* ((lle (assq name package-load-list)) | 1449 | (dolist (pkg (cdr elt)) |
| 1378 | (held (cadr lle)) | 1450 | (package--push pkg (package-desc-status pkg) info-list)))) |
| 1379 | (hv (if (stringp held) (version-to-list held)))) | ||
| 1380 | (dolist (pkg (cdr elt)) | ||
| 1381 | (let ((version (package-desc-version pkg))) | ||
| 1382 | (package--push pkg | ||
| 1383 | (cond | ||
| 1384 | ((and lle (null held)) "disabled") | ||
| 1385 | (hv | ||
| 1386 | (cond | ||
| 1387 | ((version-list-= version hv) "held") | ||
| 1388 | ((version-list-< version hv) "obsolete") | ||
| 1389 | (t "disabled"))) | ||
| 1390 | ((package-built-in-p name version) "obsolete") | ||
| 1391 | ((eq pkg (cadr elt)) "installed") | ||
| 1392 | (t "obsolete")) | ||
| 1393 | info-list)))))) | ||
| 1394 | 1451 | ||
| 1395 | ;; Built-in packages: | 1452 | ;; Built-in packages: |
| 1396 | (dolist (elt package--builtins) | 1453 | (dolist (elt package--builtins) |
| @@ -1405,17 +1462,23 @@ or a list of package names (symbols) to display." | |||
| 1405 | (dolist (elt package-archive-contents) | 1462 | (dolist (elt package-archive-contents) |
| 1406 | (setq name (car elt)) | 1463 | (setq name (car elt)) |
| 1407 | (when (or (eq packages t) (memq name packages)) | 1464 | (when (or (eq packages t) (memq name packages)) |
| 1408 | (let ((hold (assq name package-load-list))) | 1465 | (dolist (pkg (cdr elt)) |
| 1409 | (package--push (cdr elt) | 1466 | ;; Hide obsolete packages. |
| 1410 | (cond | 1467 | (unless (package-installed-p (package-desc-name pkg) |
| 1411 | ((and hold (null (cadr hold))) "disabled") | 1468 | (package-desc-version pkg)) |
| 1412 | ((memq name package-menu--new-package-list) "new") | 1469 | (package--push pkg (package-desc-status pkg) info-list))))) |
| 1413 | (t "available")) | ||
| 1414 | info-list)))) | ||
| 1415 | 1470 | ||
| 1416 | ;; Print the result. | 1471 | ;; Print the result. |
| 1417 | (setq tabulated-list-entries (mapcar 'package-menu--print-info info-list)) | 1472 | (setq tabulated-list-entries |
| 1418 | (tabulated-list-print remember-pos))) | 1473 | (mapcar #'package-menu--print-info info-list)))) |
| 1474 | |||
| 1475 | (defun package-menu--generate (remember-pos packages) | ||
| 1476 | "Populate the Package Menu. | ||
| 1477 | If REMEMBER-POS is non-nil, keep point on the same entry. | ||
| 1478 | PACKAGES should be t, which means to display all known packages, | ||
| 1479 | or a list of package names (symbols) to display." | ||
| 1480 | (package-menu--refresh packages) | ||
| 1481 | (tabulated-list-print remember-pos)) | ||
| 1419 | 1482 | ||
| 1420 | (defun package-menu--print-info (pkg) | 1483 | (defun package-menu--print-info (pkg) |
| 1421 | "Return a package entry suitable for `tabulated-list-entries'. | 1484 | "Return a package entry suitable for `tabulated-list-entries'. |
| @@ -1461,8 +1524,8 @@ If optional arg BUTTON is non-nil, describe its associated package." | |||
| 1461 | (let ((pkg-desc (if button (button-get button 'package-desc) | 1524 | (let ((pkg-desc (if button (button-get button 'package-desc) |
| 1462 | (tabulated-list-get-id)))) | 1525 | (tabulated-list-get-id)))) |
| 1463 | (if pkg-desc | 1526 | (if pkg-desc |
| 1464 | ;; FIXME: We could actually describe this particular pkg-desc. | 1527 | (describe-package pkg-desc) |
| 1465 | (describe-package (package-desc-name pkg-desc))))) | 1528 | (error "No package here")))) |
| 1466 | 1529 | ||
| 1467 | ;; fixme numeric argument | 1530 | ;; fixme numeric argument |
| 1468 | (defun package-menu-mark-delete (&optional _num) | 1531 | (defun package-menu-mark-delete (&optional _num) |
| @@ -1614,10 +1677,6 @@ Optional argument NOQUERY non-nil means do not ask the user to confirm." | |||
| 1614 | (package-delete elt) | 1677 | (package-delete elt) |
| 1615 | (error (message (cadr err))))) | 1678 | (error (message (cadr err))))) |
| 1616 | (error "Aborted"))) | 1679 | (error "Aborted"))) |
| 1617 | ;; If we deleted anything, regenerate `package-alist'. This is done | ||
| 1618 | ;; automatically if we installed a package. | ||
| 1619 | (and delete-list (null install-list) | ||
| 1620 | (package-initialize)) | ||
| 1621 | (if (or delete-list install-list) | 1680 | (if (or delete-list install-list) |
| 1622 | (package-menu--generate t t) | 1681 | (package-menu--generate t t) |
| 1623 | (message "No operations specified.")))) | 1682 | (message "No operations specified.")))) |
diff --git a/lisp/progmodes/ebnf-abn.el b/lisp/progmodes/ebnf-abn.el index 0c8dd61d44f..b6b8aacc536 100644 --- a/lisp/progmodes/ebnf-abn.el +++ b/lisp/progmodes/ebnf-abn.el | |||
| @@ -5,7 +5,7 @@ | |||
| 5 | ;; Author: Vinicius Jose Latorre <viniciusjl@ig.com.br> | 5 | ;; Author: Vinicius Jose Latorre <viniciusjl@ig.com.br> |
| 6 | ;; Maintainer: Vinicius Jose Latorre <viniciusjl@ig.com.br> | 6 | ;; Maintainer: Vinicius Jose Latorre <viniciusjl@ig.com.br> |
| 7 | ;; Keywords: wp, ebnf, PostScript | 7 | ;; Keywords: wp, ebnf, PostScript |
| 8 | ;; Version: 1.2 | 8 | ;; Old-Version: 1.2 |
| 9 | ;; Package: ebnf2ps | 9 | ;; Package: ebnf2ps |
| 10 | 10 | ||
| 11 | ;; This file is part of GNU Emacs. | 11 | ;; This file is part of GNU Emacs. |
diff --git a/lisp/progmodes/ebnf-bnf.el b/lisp/progmodes/ebnf-bnf.el index bfdf0300f3f..c4afd906e44 100644 --- a/lisp/progmodes/ebnf-bnf.el +++ b/lisp/progmodes/ebnf-bnf.el | |||
| @@ -5,7 +5,7 @@ | |||
| 5 | ;; Author: Vinicius Jose Latorre <viniciusjl@ig.com.br> | 5 | ;; Author: Vinicius Jose Latorre <viniciusjl@ig.com.br> |
| 6 | ;; Maintainer: Vinicius Jose Latorre <viniciusjl@ig.com.br> | 6 | ;; Maintainer: Vinicius Jose Latorre <viniciusjl@ig.com.br> |
| 7 | ;; Keywords: wp, ebnf, PostScript | 7 | ;; Keywords: wp, ebnf, PostScript |
| 8 | ;; Version: 1.10 | 8 | ;; Old-Version: 1.10 |
| 9 | ;; Package: ebnf2ps | 9 | ;; Package: ebnf2ps |
| 10 | 10 | ||
| 11 | ;; This file is part of GNU Emacs. | 11 | ;; This file is part of GNU Emacs. |
diff --git a/lisp/progmodes/ebnf-dtd.el b/lisp/progmodes/ebnf-dtd.el index d856dbe7de4..bf1acb3a3d9 100644 --- a/lisp/progmodes/ebnf-dtd.el +++ b/lisp/progmodes/ebnf-dtd.el | |||
| @@ -5,7 +5,7 @@ | |||
| 5 | ;; Author: Vinicius Jose Latorre <viniciusjl@ig.com.br> | 5 | ;; Author: Vinicius Jose Latorre <viniciusjl@ig.com.br> |
| 6 | ;; Maintainer: Vinicius Jose Latorre <viniciusjl@ig.com.br> | 6 | ;; Maintainer: Vinicius Jose Latorre <viniciusjl@ig.com.br> |
| 7 | ;; Keywords: wp, ebnf, PostScript | 7 | ;; Keywords: wp, ebnf, PostScript |
| 8 | ;; Version: 1.1 | 8 | ;; Old-Version: 1.1 |
| 9 | ;; Package: ebnf2ps | 9 | ;; Package: ebnf2ps |
| 10 | 10 | ||
| 11 | ;; This file is part of GNU Emacs. | 11 | ;; This file is part of GNU Emacs. |
diff --git a/lisp/progmodes/ebnf-ebx.el b/lisp/progmodes/ebnf-ebx.el index 48e3a643de6..d33fe55a2e8 100644 --- a/lisp/progmodes/ebnf-ebx.el +++ b/lisp/progmodes/ebnf-ebx.el | |||
| @@ -5,7 +5,7 @@ | |||
| 5 | ;; Author: Vinicius Jose Latorre <viniciusjl@ig.com.br> | 5 | ;; Author: Vinicius Jose Latorre <viniciusjl@ig.com.br> |
| 6 | ;; Maintainer: Vinicius Jose Latorre <viniciusjl@ig.com.br> | 6 | ;; Maintainer: Vinicius Jose Latorre <viniciusjl@ig.com.br> |
| 7 | ;; Keywords: wp, ebnf, PostScript | 7 | ;; Keywords: wp, ebnf, PostScript |
| 8 | ;; Version: 1.2 | 8 | ;; Old-Version: 1.2 |
| 9 | ;; Package: ebnf2ps | 9 | ;; Package: ebnf2ps |
| 10 | 10 | ||
| 11 | ;; This file is part of GNU Emacs. | 11 | ;; This file is part of GNU Emacs. |
diff --git a/lisp/progmodes/ebnf-iso.el b/lisp/progmodes/ebnf-iso.el index 9c5246d81e4..3f58b7fef55 100644 --- a/lisp/progmodes/ebnf-iso.el +++ b/lisp/progmodes/ebnf-iso.el | |||
| @@ -5,7 +5,7 @@ | |||
| 5 | ;; Author: Vinicius Jose Latorre <viniciusjl@ig.com.br> | 5 | ;; Author: Vinicius Jose Latorre <viniciusjl@ig.com.br> |
| 6 | ;; Maintainer: Vinicius Jose Latorre <viniciusjl@ig.com.br> | 6 | ;; Maintainer: Vinicius Jose Latorre <viniciusjl@ig.com.br> |
| 7 | ;; Keywords: wp, ebnf, PostScript | 7 | ;; Keywords: wp, ebnf, PostScript |
| 8 | ;; Version: 1.9 | 8 | ;; Old-Version: 1.9 |
| 9 | ;; Package: ebnf2ps | 9 | ;; Package: ebnf2ps |
| 10 | 10 | ||
| 11 | ;; This file is part of GNU Emacs. | 11 | ;; This file is part of GNU Emacs. |
diff --git a/lisp/progmodes/ebnf-otz.el b/lisp/progmodes/ebnf-otz.el index e116a4f2663..ed6b5317e33 100644 --- a/lisp/progmodes/ebnf-otz.el +++ b/lisp/progmodes/ebnf-otz.el | |||
| @@ -5,7 +5,7 @@ | |||
| 5 | ;; Author: Vinicius Jose Latorre <viniciusjl@ig.com.br> | 5 | ;; Author: Vinicius Jose Latorre <viniciusjl@ig.com.br> |
| 6 | ;; Maintainer: Vinicius Jose Latorre <viniciusjl@ig.com.br> | 6 | ;; Maintainer: Vinicius Jose Latorre <viniciusjl@ig.com.br> |
| 7 | ;; Keywords: wp, ebnf, PostScript | 7 | ;; Keywords: wp, ebnf, PostScript |
| 8 | ;; Version: 1.0 | 8 | ;; Old-Version: 1.0 |
| 9 | ;; Package: ebnf2ps | 9 | ;; Package: ebnf2ps |
| 10 | 10 | ||
| 11 | ;; This file is part of GNU Emacs. | 11 | ;; This file is part of GNU Emacs. |
diff --git a/lisp/progmodes/ebnf-yac.el b/lisp/progmodes/ebnf-yac.el index 15f0d5cac18..ff43450bdec 100644 --- a/lisp/progmodes/ebnf-yac.el +++ b/lisp/progmodes/ebnf-yac.el | |||
| @@ -5,7 +5,7 @@ | |||
| 5 | ;; Author: Vinicius Jose Latorre <viniciusjl@ig.com.br> | 5 | ;; Author: Vinicius Jose Latorre <viniciusjl@ig.com.br> |
| 6 | ;; Maintainer: Vinicius Jose Latorre <viniciusjl@ig.com.br> | 6 | ;; Maintainer: Vinicius Jose Latorre <viniciusjl@ig.com.br> |
| 7 | ;; Keywords: wp, ebnf, PostScript | 7 | ;; Keywords: wp, ebnf, PostScript |
| 8 | ;; Version: 1.4 | 8 | ;; Old-Version: 1.4 |
| 9 | ;; Package: ebnf2ps | 9 | ;; Package: ebnf2ps |
| 10 | 10 | ||
| 11 | ;; This file is part of GNU Emacs. | 11 | ;; This file is part of GNU Emacs. |
diff --git a/lisp/progmodes/idlw-complete-structtag.el b/lisp/progmodes/idlw-complete-structtag.el index fd3253880ea..1ebc7f92023 100644 --- a/lisp/progmodes/idlw-complete-structtag.el +++ b/lisp/progmodes/idlw-complete-structtag.el | |||
| @@ -4,7 +4,7 @@ | |||
| 4 | 4 | ||
| 5 | ;; Author: Carsten Dominik <dominik@astro.uva.nl> | 5 | ;; Author: Carsten Dominik <dominik@astro.uva.nl> |
| 6 | ;; Maintainer: J.D. Smith <jdsmith@as.arizona.edu> | 6 | ;; Maintainer: J.D. Smith <jdsmith@as.arizona.edu> |
| 7 | ;; Version: 1.2 | 7 | ;; Old-Version: 1.2 |
| 8 | ;; Keywords: languages | 8 | ;; Keywords: languages |
| 9 | ;; Package: idlwave | 9 | ;; Package: idlwave |
| 10 | 10 | ||
diff --git a/lisp/progmodes/idlw-help.el b/lisp/progmodes/idlw-help.el index 7060cae5080..a108adccec7 100644 --- a/lisp/progmodes/idlw-help.el +++ b/lisp/progmodes/idlw-help.el | |||
| @@ -5,7 +5,6 @@ | |||
| 5 | ;; Authors: J.D. Smith <jdsmith@as.arizona.edu> | 5 | ;; Authors: J.D. Smith <jdsmith@as.arizona.edu> |
| 6 | ;; Carsten Dominik <dominik@science.uva.nl> | 6 | ;; Carsten Dominik <dominik@science.uva.nl> |
| 7 | ;; Maintainer: J.D. Smith <jdsmith@as.arizona.edu> | 7 | ;; Maintainer: J.D. Smith <jdsmith@as.arizona.edu> |
| 8 | ;; Version: 6.1.22 | ||
| 9 | ;; Package: idlwave | 8 | ;; Package: idlwave |
| 10 | 9 | ||
| 11 | ;; This file is part of GNU Emacs. | 10 | ;; This file is part of GNU Emacs. |
diff --git a/lisp/progmodes/idlw-shell.el b/lisp/progmodes/idlw-shell.el index cfb20c6e238..5aad4aaa15f 100644 --- a/lisp/progmodes/idlw-shell.el +++ b/lisp/progmodes/idlw-shell.el | |||
| @@ -6,7 +6,6 @@ | |||
| 6 | ;; Carsten Dominik <dominik@astro.uva.nl> | 6 | ;; Carsten Dominik <dominik@astro.uva.nl> |
| 7 | ;; Chris Chase <chase@att.com> | 7 | ;; Chris Chase <chase@att.com> |
| 8 | ;; Maintainer: J.D. Smith <jdsmith@as.arizona.edu> | 8 | ;; Maintainer: J.D. Smith <jdsmith@as.arizona.edu> |
| 9 | ;; Version: 6.1.22 | ||
| 10 | ;; Keywords: processes | 9 | ;; Keywords: processes |
| 11 | ;; Package: idlwave | 10 | ;; Package: idlwave |
| 12 | 11 | ||
diff --git a/lisp/progmodes/idlw-toolbar.el b/lisp/progmodes/idlw-toolbar.el index d83291d1511..d255b8b1a3f 100644 --- a/lisp/progmodes/idlw-toolbar.el +++ b/lisp/progmodes/idlw-toolbar.el | |||
| @@ -4,7 +4,6 @@ | |||
| 4 | 4 | ||
| 5 | ;; Author: Carsten Dominik <dominik@astro.uva.nl> | 5 | ;; Author: Carsten Dominik <dominik@astro.uva.nl> |
| 6 | ;; Maintainer: J.D. Smith <jdsmith@as.arizona.edu> | 6 | ;; Maintainer: J.D. Smith <jdsmith@as.arizona.edu> |
| 7 | ;; Version: 6.1.22 | ||
| 8 | ;; Keywords: processes | 7 | ;; Keywords: processes |
| 9 | ;; Package: idlwave | 8 | ;; Package: idlwave |
| 10 | 9 | ||