Mercurial > dotfiles
annotate .elisp/old/package.el @ 336:ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
I've been toting around this package.el from 2009 or so, and something
in the package format seems to have changed that broke me. Thanks to
some related diagnostics by Lucas, I've grabbed the last package.el
that worked with emacs 23 and stashed it here. This seems to work,
modulo some things (notably js2-mode and smex) now seem to require
emacs 24 if you install them using package.el, so this will end up
being brittle on my last couple of emacs23 machines.
author | Augie Fackler <raf@durin42.com> |
---|---|
date | Thu, 29 May 2014 14:30:42 -0400 |
parents | .elisp/package.el@8980dc2deda0 |
children |
rev | line source |
---|---|
211
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1 ;;; package.el --- Simple package system for Emacs |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
2 |
336
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
3 ;; Copyright (C) 2007-2011 Free Software Foundation, Inc. |
211
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
4 |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
5 ;; Author: Tom Tromey <tromey@redhat.com> |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
6 ;; Created: 10 Mar 2007 |
336
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
7 ;; Version: 0.9 |
211
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
8 ;; Keywords: tools |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
9 |
336
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
10 ;; This file is part of GNU Emacs. |
211
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
11 |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
12 ;; GNU Emacs is free software; you can redistribute it and/or modify |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
13 ;; it under the terms of the GNU General Public License as published by |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
14 ;; the Free Software Foundation; either version 3, or (at your option) |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
15 ;; any later version. |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
16 |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
17 ;; GNU Emacs is distributed in the hope that it will be useful, |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
18 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
19 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
20 ;; GNU General Public License for more details. |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
21 |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
22 ;; You should have received a copy of the GNU General Public License |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
23 ;; along with GNU Emacs; see the file COPYING. If not, write to the |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
24 ;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
25 ;; Boston, MA 02110-1301, USA. |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
26 |
336
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
27 ;;; Change Log: |
211
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
28 |
336
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
29 ;; 2 Apr 2007 - now using ChangeLog file |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
30 ;; 15 Mar 2007 - updated documentation |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
31 ;; 14 Mar 2007 - Changed how obsolete packages are handled |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
32 ;; 13 Mar 2007 - Wrote package-install-from-buffer |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
33 ;; 12 Mar 2007 - Wrote package-menu mode |
211
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
34 |
336
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
35 ;;; Commentary: |
211
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
36 |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
37 ;; The idea behind package.el is to be able to download packages and |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
38 ;; install them. Packages are versioned and have versioned |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
39 ;; dependencies. Furthermore, this supports built-in packages which |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
40 ;; may or may not be newer than user-specified packages. This makes |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
41 ;; it possible to upgrade Emacs and automatically disable packages |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
42 ;; which have moved from external to core. (Note though that we don't |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
43 ;; currently register any of these, so this feature does not actually |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
44 ;; work.) |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
45 |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
46 ;; A package is described by its name and version. The distribution |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
47 ;; format is either a tar file or a single .el file. |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
48 |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
49 ;; A tar file should be named "NAME-VERSION.tar". The tar file must |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
50 ;; unpack into a directory named after the package and version: |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
51 ;; "NAME-VERSION". It must contain a file named "PACKAGE-pkg.el" |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
52 ;; which consists of a call to define-package. It may also contain a |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
53 ;; "dir" file and the info files it references. |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
54 |
336
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
55 ;; A .el file is named "NAME-VERSION.el" in the remote archive, but is |
211
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
56 ;; installed as simply "NAME.el" in a directory named "NAME-VERSION". |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
57 |
336
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
58 ;; The downloader downloads all dependent packages. By default, |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
59 ;; packages come from the official GNU sources, but others may be |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
60 ;; added by customizing the `package-archives' alist. Packages get |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
61 ;; byte-compiled at install time. |
211
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
62 |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
63 ;; At activation time we will set up the load-path and the info path, |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
64 ;; and we will load the package's autoloads. If a package's |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
65 ;; dependencies are not available, we will not activate that package. |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
66 |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
67 ;; Conceptually a package has multiple state transitions: |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
68 ;; |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
69 ;; * Download. Fetching the package from ELPA. |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
70 ;; * Install. Untar the package, or write the .el file, into |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
71 ;; ~/.emacs.d/elpa/ directory. |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
72 ;; * Byte compile. Currently this phase is done during install, |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
73 ;; but we may change this. |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
74 ;; * Activate. Evaluate the autoloads for the package to make it |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
75 ;; available to the user. |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
76 ;; * Load. Actually load the package and run some code from it. |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
77 |
336
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
78 ;; Other external functions you may want to use: |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
79 ;; |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
80 ;; M-x list-packages |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
81 ;; Enters a mode similar to buffer-menu which lets you manage |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
82 ;; packages. You can choose packages for install (mark with "i", |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
83 ;; then "x" to execute) or deletion (not implemented yet), and you |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
84 ;; can see what packages are available. This will automatically |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
85 ;; fetch the latest list of packages from ELPA. |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
86 ;; |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
87 ;; M-x package-list-packages-no-fetch |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
88 ;; Like package-list-packages, but does not automatically fetch the |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
89 ;; new list of packages. |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
90 ;; |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
91 ;; M-x package-install-from-buffer |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
92 ;; Install a package consisting of a single .el file that appears |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
93 ;; in the current buffer. This only works for packages which |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
94 ;; define a Version header properly; package.el also supports the |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
95 ;; extension headers Package-Version (in case Version is an RCS id |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
96 ;; or similar), and Package-Requires (if the package requires other |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
97 ;; packages). |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
98 ;; |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
99 ;; M-x package-install-file |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
100 ;; Install a package from the indicated file. The package can be |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
101 ;; either a tar file or a .el file. A tar file must contain an |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
102 ;; appropriately-named "-pkg.el" file; a .el file must be properly |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
103 ;; formatted as with package-install-from-buffer. |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
104 |
211
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
105 ;;; Thanks: |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
106 ;;; (sorted by sort-lines): |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
107 |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
108 ;; Jim Blandy <jimb@red-bean.com> |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
109 ;; Karl Fogel <kfogel@red-bean.com> |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
110 ;; Kevin Ryde <user42@zip.com.au> |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
111 ;; Lawrence Mitchell |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
112 ;; Michael Olson <mwolson@member.fsf.org> |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
113 ;; Sebastian Tennant <sebyte@smolny.plus.com> |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
114 ;; Stefan Monnier <monnier@iro.umontreal.ca> |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
115 ;; Vinicius Jose Latorre <viniciusjl@ig.com.br> |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
116 ;; Phil Hagelberg <phil@hagelb.org> |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
117 |
336
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
118 ;;; ToDo: |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
119 |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
120 ;; - putting info dirs at the start of the info path means |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
121 ;; users see a weird ordering of categories. OTOH we want to |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
122 ;; override later entries. maybe emacs needs to enforce |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
123 ;; the standard layout? |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
124 ;; - put bytecode in a separate directory tree |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
125 ;; - perhaps give users a way to recompile their bytecode |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
126 ;; or do it automatically when emacs changes |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
127 ;; - give users a way to know whether a package is installed ok |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
128 ;; - give users a way to view a package's documentation when it |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
129 ;; only appears in the .el |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
130 ;; - use/extend checkdoc so people can tell if their package will work |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
131 ;; - "installed" instead of a blank in the status column |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
132 ;; - tramp needs its files to be compiled in a certain order. |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
133 ;; how to handle this? fix tramp? |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
134 ;; - on emacs 21 we don't kill the -autoloads.el buffer. what about 22? |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
135 ;; - maybe we need separate .elc directories for various emacs versions |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
136 ;; and also emacs-vs-xemacs. That way conditional compilation can |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
137 ;; work. But would this break anything? |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
138 ;; - should store the package's keywords in archive-contents, then |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
139 ;; let the users filter the package-menu by keyword. See |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
140 ;; finder-by-keyword. (We could also let people view the |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
141 ;; Commentary, but it isn't clear how useful this is.) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
142 ;; - William Xu suggests being able to open a package file without |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
143 ;; installing it |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
144 ;; - Interface with desktop.el so that restarting after an install |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
145 ;; works properly |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
146 ;; - Implement M-x package-upgrade, to upgrade any/all existing packages |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
147 ;; - Use hierarchical layout. PKG/etc PKG/lisp PKG/info |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
148 ;; ... except maybe lisp? |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
149 ;; - It may be nice to have a macro that expands to the package's |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
150 ;; private data dir, aka ".../etc". Or, maybe data-directory |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
151 ;; needs to be a list (though this would be less nice) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
152 ;; a few packages want this, eg sokoban |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
153 ;; - package menu needs: |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
154 ;; ability to know which packages are built-in & thus not deletable |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
155 ;; it can sometimes print odd results, like 0.3 available but 0.4 active |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
156 ;; why is that? |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
157 ;; - Allow multiple versions on the server...? |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
158 ;; [ why bother? ] |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
159 ;; - Don't install a package which will invalidate dependencies overall |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
160 ;; - Allow something like (or (>= emacs 21.0) (>= xemacs 21.5)) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
161 ;; [ currently thinking, why bother.. KISS ] |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
162 ;; - Allow optional package dependencies |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
163 ;; then if we require 'bbdb', bbdb-specific lisp in lisp/bbdb |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
164 ;; and just don't compile to add to load path ...? |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
165 ;; - Have a list of archive URLs? [ maybe there's no point ] |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
166 ;; - David Kastrup pointed out on the xemacs list that for GPL it |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
167 ;; is friendlier to ship the source tree. We could "support" that |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
168 ;; by just having a "src" subdir in the package. This isn't ideal |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
169 ;; but it probably is not worth trying to support random source |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
170 ;; tree layouts, build schemes, etc. |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
171 ;; - Our treatment of the info path is somewhat bogus |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
172 ;; - perhaps have an "unstable" tree in ELPA as well as a stable one |
211
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
173 |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
174 ;;; Code: |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
175 |
336
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
176 (defgroup package nil |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
177 "Manager for Emacs Lisp packages." |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
178 :group 'applications |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
179 :version "24.1") |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
180 |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
181 ;;;###autoload |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
182 (defcustom package-enable-at-startup t |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
183 "Whether to activate installed packages when Emacs starts. |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
184 If non-nil, packages are activated after reading the init file |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
185 and before `after-init-hook'. Activation is not done if |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
186 `user-init-file' is nil (e.g. Emacs was started with \"-q\"). |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
187 |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
188 Even if the value is nil, you can type \\[package-initialize] to |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
189 activate the package system at any time." |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
190 :type 'boolean |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
191 :group 'package |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
192 :version "24.1") |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
193 |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
194 (defcustom package-load-list '(all) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
195 "List of packages for `package-initialize' to load. |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
196 Each element in this list should be a list (NAME VERSION), or the |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
197 symbol `all'. The symbol `all' says to load the latest installed |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
198 versions of all packages not specified by other elements. |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
199 |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
200 For an element (NAME VERSION), NAME is a package name (a symbol). |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
201 VERSION should be t, a string, or nil. |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
202 If VERSION is t, all versions are loaded, though obsolete ones |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
203 will be put in `package-obsolete-alist' and not activated. |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
204 If VERSION is a string, only that version is ever loaded. |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
205 Any other version, even if newer, is silently ignored. |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
206 Hence, the package is \"held\" at that version. |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
207 If VERSION is nil, the package is not loaded (it is \"disabled\")." |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
208 :type '(repeat symbol) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
209 :risky t |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
210 :group 'package |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
211 :version "24.1") |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
212 |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
213 (defvar Info-directory-list) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
214 (declare-function info-initialize "info" ()) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
215 (declare-function url-http-parse-response "url-http" ()) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
216 (declare-function lm-header "lisp-mnt" (header)) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
217 (declare-function lm-commentary "lisp-mnt" (&optional file)) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
218 (defvar url-http-end-of-headers) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
219 |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
220 (defcustom package-archives '(("gnu" . "http://elpa.gnu.org/packages/")) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
221 "An alist of archives from which to fetch. |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
222 The default value points to the GNU Emacs package repository. |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
223 |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
224 Each element has the form (ID . LOCATION). |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
225 ID is an archive name, as a string. |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
226 LOCATION specifies the base location for the archive. |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
227 If it starts with \"http:\", it is treated as a HTTP URL; |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
228 otherwise it should be an absolute directory name. |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
229 (Other types of URL are currently not supported.)" |
211
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
230 :type '(alist :key-type (string :tag "Archive name") |
336
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
231 :value-type (string :tag "URL or directory name")) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
232 :risky t |
211
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
233 :group 'package |
336
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
234 :version "24.1") |
211
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
235 |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
236 (defconst package-archive-version 1 |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
237 "Version number of the package archive understood by this file. |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
238 Lower version numbers than this will probably be understood as well.") |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
239 |
336
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
240 (defconst package-el-version "1.0" |
211
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
241 "Version of package.el.") |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
242 |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
243 ;; We don't prime the cache since it tends to get out of date. |
336
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
244 (defvar package-archive-contents nil |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
245 "Cache of the contents of the Emacs Lisp Package Archive. |
211
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
246 This is an alist mapping package names (symbols) to package |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
247 descriptor vectors. These are like the vectors for `package-alist' |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
248 but have extra entries: one which is 'tar for tar packages and |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
249 'single for single-file packages, and one which is the name of |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
250 the archive from which it came.") |
336
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
251 (put 'package-archive-contents 'risky-local-variable t) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
252 |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
253 (defcustom package-user-dir (locate-user-emacs-file "elpa") |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
254 "Directory containing the user's Emacs Lisp packages. |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
255 The directory name should be absolute. |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
256 Apart from this directory, Emacs also looks for system-wide |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
257 packages in `package-directory-list'." |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
258 :type 'directory |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
259 :risky t |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
260 :group 'package |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
261 :version "24.1") |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
262 |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
263 (defcustom package-directory-list |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
264 ;; Defaults are subdirs named "elpa" in the site-lisp dirs. |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
265 (let (result) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
266 (dolist (f load-path) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
267 (and (stringp f) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
268 (equal (file-name-nondirectory f) "site-lisp") |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
269 (push (expand-file-name "elpa" f) result))) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
270 (nreverse result)) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
271 "List of additional directories containing Emacs Lisp packages. |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
272 Each directory name should be absolute. |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
273 |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
274 These directories contain packages intended for system-wide; in |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
275 contrast, `package-user-dir' contains packages for personal use." |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
276 :type '(repeat directory) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
277 :risky t |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
278 :group 'package |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
279 :version "24.1") |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
280 |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
281 ;; The value is precomputed in finder-inf.el, but don't load that |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
282 ;; until it's needed (i.e. when `package-intialize' is called). |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
283 (defvar package--builtins nil |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
284 "Alist of built-in packages. |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
285 The actual value is initialized by loading the library |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
286 `finder-inf'; this is not done until it is needed, e.g. by the |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
287 function `package-built-in-p'. |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
288 |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
289 Each element has the form (PKG . DESC), where PKG is a package |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
290 name (a symbol) and DESC is a vector that describes the package. |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
291 The vector DESC has the form [VERSION REQS DOCSTRING]. |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
292 VERSION is a version list. |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
293 REQS is a list of packages (symbols) required by the package. |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
294 DOCSTRING is a brief description of the package.") |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
295 (put 'package--builtins 'risky-local-variable t) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
296 |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
297 (defvar package-alist nil |
211
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
298 "Alist of all packages available for activation. |
336
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
299 Each element has the form (PKG . DESC), where PKG is a package |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
300 name (a symbol) and DESC is a vector that describes the package. |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
301 |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
302 The vector DESC has the form [VERSION REQS DOCSTRING]. |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
303 VERSION is a version list. |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
304 REQS is a list of packages (symbols) required by the package. |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
305 DOCSTRING is a brief description of the package. |
211
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
306 |
336
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
307 This variable is set automatically by `package-load-descriptor', |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
308 called via `package-initialize'. To change which packages are |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
309 loaded and/or activated, customize `package-load-list'.") |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
310 (put 'package-archive-contents 'risky-local-variable t) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
311 |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
312 (defvar package-activated-list nil |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
313 "List of the names of currently activated packages.") |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
314 (put 'package-activated-list 'risky-local-variable t) |
211
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
315 |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
316 (defvar package-obsolete-alist nil |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
317 "Representation of obsolete packages. |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
318 Like `package-alist', but maps package name to a second alist. |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
319 The inner alist is keyed by version.") |
336
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
320 (put 'package-obsolete-alist 'risky-local-variable t) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
321 |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
322 (defconst package-subdirectory-regexp |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
323 "\\`\\([^.].*?\\)-\\([0-9]+\\(?:[.][0-9]+\\|\\(?:pre\\|beta\\|alpha\\)[0-9]+\\)*\\)\\'" |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
324 "Regular expression matching the name of a package subdirectory. |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
325 The first subexpression is the package name. |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
326 The second subexpression is the version string.") |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
327 |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
328 (defun package-version-join (vlist) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
329 "Return the version string corresponding to the list VLIST. |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
330 This is, approximately, the inverse of `version-to-list'. |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
331 \(Actually, it returns only one of the possible inverses, since |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
332 `version-to-list' is a many-to-one operation.)" |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
333 (if (null vlist) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
334 "" |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
335 (let ((str-list (list "." (int-to-string (car vlist))))) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
336 (dolist (num (cdr vlist)) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
337 (cond |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
338 ((>= num 0) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
339 (push (int-to-string num) str-list) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
340 (push "." str-list)) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
341 ((< num -3) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
342 (error "Invalid version list `%s'" vlist)) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
343 (t |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
344 ;; pre, or beta, or alpha |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
345 (cond ((equal "." (car str-list)) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
346 (pop str-list)) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
347 ((not (string-match "[0-9]+" (car str-list))) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
348 (error "Invalid version list `%s'" vlist))) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
349 (push (cond ((= num -1) "pre") |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
350 ((= num -2) "beta") |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
351 ((= num -3) "alpha")) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
352 str-list)))) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
353 (if (equal "." (car str-list)) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
354 (pop str-list)) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
355 (apply 'concat (nreverse str-list))))) |
211
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
356 |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
357 (defun package-strip-version (dirname) |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
358 "Strip the version from a combined package name and version. |
336
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
359 E.g., if given \"quux-23.0\", will return \"quux\"" |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
360 (if (string-match package-subdirectory-regexp dirname) |
211
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
361 (match-string 1 dirname))) |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
362 |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
363 (defun package-load-descriptor (dir package) |
336
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
364 "Load the description file in directory DIR for package PACKAGE. |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
365 Here, PACKAGE is a string of the form NAME-VER, where NAME is the |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
366 package name and VER is its version." |
211
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
367 (let* ((pkg-dir (expand-file-name package dir)) |
336
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
368 (pkg-file (expand-file-name |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
369 (concat (package-strip-version package) "-pkg") |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
370 pkg-dir))) |
211
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
371 (when (and (file-directory-p pkg-dir) |
336
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
372 (file-exists-p (concat pkg-file ".el"))) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
373 (load pkg-file nil t)))) |
211
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
374 |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
375 (defun package-load-all-descriptors () |
336
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
376 "Load descriptors for installed Emacs Lisp packages. |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
377 This looks for package subdirectories in `package-user-dir' and |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
378 `package-directory-list'. The variable `package-load-list' |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
379 controls which package subdirectories may be loaded. |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
380 |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
381 In each valid package subdirectory, this function loads the |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
382 description file containing a call to `define-package', which |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
383 updates `package-alist' and `package-obsolete-alist'." |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
384 (let ((all (memq 'all package-load-list)) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
385 name version force) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
386 (dolist (dir (cons package-user-dir package-directory-list)) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
387 (when (file-directory-p dir) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
388 (dolist (subdir (directory-files dir)) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
389 (when (and (file-directory-p (expand-file-name subdir dir)) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
390 (string-match package-subdirectory-regexp subdir)) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
391 (setq name (intern (match-string 1 subdir)) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
392 version (match-string 2 subdir) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
393 force (assq name package-load-list)) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
394 (when (cond |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
395 ((null force) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
396 all) ; not in package-load-list |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
397 ((null (setq force (cadr force))) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
398 nil) ; disabled |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
399 ((eq force t) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
400 t) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
401 ((stringp force) ; held |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
402 (version-list-= (version-to-list version) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
403 (version-to-list force))) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
404 (t |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
405 (error "Invalid element in `package-load-list'"))) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
406 (package-load-descriptor dir subdir)))))))) |
211
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
407 |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
408 (defsubst package-desc-vers (desc) |
336
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
409 "Extract version from a package description vector." |
211
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
410 (aref desc 0)) |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
411 |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
412 (defsubst package-desc-reqs (desc) |
336
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
413 "Extract requirements from a package description vector." |
211
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
414 (aref desc 1)) |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
415 |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
416 (defsubst package-desc-doc (desc) |
336
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
417 "Extract doc string from a package description vector." |
211
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
418 (aref desc 2)) |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
419 |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
420 (defsubst package-desc-kind (desc) |
336
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
421 "Extract the kind of download from an archive package description vector." |
211
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
422 (aref desc 3)) |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
423 |
336
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
424 (defun package--dir (name version) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
425 "Return the directory where a package is installed, or nil if none. |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
426 NAME and VERSION are both strings." |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
427 (let* ((subdir (concat name "-" version)) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
428 (dir-list (cons package-user-dir package-directory-list)) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
429 pkg-dir) |
211
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
430 (while dir-list |
336
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
431 (let ((subdir-full (expand-file-name subdir (car dir-list)))) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
432 (if (file-directory-p subdir-full) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
433 (setq pkg-dir subdir-full |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
434 dir-list nil) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
435 (setq dir-list (cdr dir-list))))) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
436 pkg-dir)) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
437 |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
438 (defun package-activate-1 (package pkg-vec) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
439 (let* ((name (symbol-name package)) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
440 (version-str (package-version-join (package-desc-vers pkg-vec))) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
441 (pkg-dir (package--dir name version-str))) |
211
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
442 (unless pkg-dir |
336
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
443 (error "Internal error: unable to find directory for `%s-%s'" |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
444 name version-str)) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
445 ;; Add info node. |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
446 (when (file-exists-p (expand-file-name "dir" pkg-dir)) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
447 ;; FIXME: not the friendliest, but simple. |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
448 (require 'info) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
449 (info-initialize) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
450 (push pkg-dir Info-directory-list)) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
451 ;; Add to load path, add autoloads, and activate the package. |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
452 (push pkg-dir load-path) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
453 (load (expand-file-name (concat name "-autoloads") pkg-dir) nil t) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
454 (push package package-activated-list) |
211
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
455 ;; Don't return nil. |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
456 t)) |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
457 |
336
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
458 (defun package-built-in-p (package &optional version) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
459 "Return true if PACKAGE, of VERSION or newer, is built-in to Emacs." |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
460 (require 'finder-inf nil t) ; For `package--builtins'. |
211
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
461 (let ((elt (assq package package--builtins))) |
336
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
462 (and elt (version-list-<= version (package-desc-vers (cdr elt)))))) |
211
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
463 |
336
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
464 ;; This function goes ahead and activates a newer version of a package |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
465 ;; if an older one was already activated. This is not ideal; we'd at |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
466 ;; least need to check to see if the package has actually been loaded, |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
467 ;; and not merely activated. |
211
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
468 (defun package-activate (package version) |
336
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
469 "Activate package PACKAGE, of version VERSION or newer. |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
470 If PACKAGE has any dependencies, recursively activate them. |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
471 Return nil if the package could not be activated." |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
472 (let ((pkg-vec (cdr (assq package package-alist))) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
473 available-version found) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
474 ;; Check if PACKAGE is available in `package-alist'. |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
475 (when pkg-vec |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
476 (setq available-version (package-desc-vers pkg-vec) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
477 found (version-list-<= version available-version))) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
478 (cond |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
479 ;; If no such package is found, maybe it's built-in. |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
480 ((null found) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
481 (package-built-in-p package version)) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
482 ;; If the package is already activated, just return t. |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
483 ((memq package package-activated-list) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
484 t) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
485 ;; Otherwise, proceed with activation. |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
486 (t |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
487 (let ((fail (catch 'dep-failure |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
488 ;; Activate its dependencies recursively. |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
489 (dolist (req (package-desc-reqs pkg-vec)) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
490 (unless (package-activate (car req) (cadr req)) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
491 (throw 'dep-failure req)))))) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
492 (if fail |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
493 (warn "Unable to activate package `%s'. |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
494 Required package `%s-%s' is unavailable" |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
495 package (car fail) (package-version-join (cadr fail))) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
496 ;; If all goes well, activate the package itself. |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
497 (package-activate-1 package pkg-vec))))))) |
211
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
498 |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
499 (defun package-mark-obsolete (package pkg-vec) |
336
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
500 "Put package on the obsolete list, if not already there." |
211
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
501 (let ((elt (assq package package-obsolete-alist))) |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
502 (if elt |
336
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
503 ;; If this obsolete version does not exist in the list, update |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
504 ;; it the list. |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
505 (unless (assoc (package-desc-vers pkg-vec) (cdr elt)) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
506 (setcdr elt (cons (cons (package-desc-vers pkg-vec) pkg-vec) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
507 (cdr elt)))) |
211
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
508 ;; Make a new association. |
336
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
509 (push (cons package (list (cons (package-desc-vers pkg-vec) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
510 pkg-vec))) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
511 package-obsolete-alist)))) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
512 |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
513 (defun define-package (name-string version-string |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
514 &optional docstring requirements |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
515 &rest extra-properties) |
211
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
516 "Define a new package. |
336
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
517 NAME-STRING is the name of the package, as a string. |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
518 VERSION-STRING is the version of the package, as a list of |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
519 integers of the form produced by `version-to-list'. |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
520 DOCSTRING is a short description of the package, a string. |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
521 REQUIREMENTS is a list of dependencies on other packages. |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
522 Each requirement is of the form (OTHER-PACKAGE \"VERSION\"). |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
523 |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
524 EXTRA-PROPERTIES is currently unused." |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
525 (let* ((name (intern name-string)) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
526 (version (version-to-list version-string)) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
527 (new-pkg-desc |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
528 (cons name |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
529 (vector version |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
530 (mapcar |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
531 (lambda (elt) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
532 (list (car elt) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
533 (version-to-list (car (cdr elt))))) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
534 requirements) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
535 docstring))) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
536 (old-pkg (assq name package-alist))) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
537 (cond |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
538 ;; If there's no old package, just add this to `package-alist'. |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
539 ((null old-pkg) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
540 (push new-pkg-desc package-alist)) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
541 ((version-list-< (package-desc-vers (cdr old-pkg)) version) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
542 ;; Remove the old package and declare it obsolete. |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
543 (package-mark-obsolete name (cdr old-pkg)) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
544 (setq package-alist (cons new-pkg-desc |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
545 (delq old-pkg package-alist)))) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
546 ;; You can have two packages with the same version, e.g. one in |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
547 ;; the system package directory and one in your private |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
548 ;; directory. We just let the first one win. |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
549 ((not (version-list-= (package-desc-vers (cdr old-pkg)) version)) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
550 ;; The package is born obsolete. |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
551 (package-mark-obsolete name (cdr new-pkg-desc)))))) |
211
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
552 |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
553 ;; From Emacs 22. |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
554 (defun package-autoload-ensure-default-file (file) |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
555 "Make sure that the autoload file FILE exists and if not create it." |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
556 (unless (file-exists-p file) |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
557 (write-region |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
558 (concat ";;; " (file-name-nondirectory file) |
336
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
559 " --- automatically extracted autoloads\n" |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
560 ";;\n" |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
561 ";;; Code:\n\n" |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
562 "\n;; Local Variables:\n" |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
563 ";; version-control: never\n" |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
564 ";; no-byte-compile: t\n" |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
565 ";; no-update-autoloads: t\n" |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
566 ";; End:\n" |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
567 ";;; " (file-name-nondirectory file) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
568 " ends here\n") |
211
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
569 nil file)) |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
570 file) |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
571 |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
572 (defun package-generate-autoloads (name pkg-dir) |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
573 (let* ((auto-name (concat name "-autoloads.el")) |
336
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
574 (ignore-name (concat name "-pkg.el")) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
575 (generated-autoload-file (expand-file-name auto-name pkg-dir)) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
576 (version-control 'never)) |
211
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
577 (require 'autoload) |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
578 (unless (fboundp 'autoload-ensure-default-file) |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
579 (package-autoload-ensure-default-file generated-autoload-file)) |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
580 (update-directory-autoloads pkg-dir))) |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
581 |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
582 (defun package-untar-buffer () |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
583 "Untar the current buffer. |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
584 This uses `tar-untar-buffer' if it is available. |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
585 Otherwise it uses an external `tar' program. |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
586 `default-directory' should be set by the caller." |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
587 (require 'tar-mode) |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
588 (if (fboundp 'tar-untar-buffer) |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
589 (progn |
336
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
590 ;; tar-mode messes with narrowing, so we just let it have the |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
591 ;; whole buffer to play with. |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
592 (delete-region (point-min) (point)) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
593 (tar-mode) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
594 (tar-untar-buffer)) |
211
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
595 ;; FIXME: check the result. |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
596 (call-process-region (point) (point-max) "tar" nil '(nil nil) nil |
336
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
597 "xf" "-"))) |
211
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
598 |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
599 (defun package-unpack (name version) |
336
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
600 (let ((pkg-dir (expand-file-name (concat (symbol-name name) "-" version) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
601 package-user-dir))) |
211
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
602 (make-directory package-user-dir t) |
336
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
603 ;; FIXME: should we delete PKG-DIR if it exists? |
211
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
604 (let* ((default-directory (file-name-as-directory package-user-dir))) |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
605 (package-untar-buffer) |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
606 (package-generate-autoloads (symbol-name name) pkg-dir) |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
607 (let ((load-path (cons pkg-dir load-path))) |
336
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
608 (byte-recompile-directory pkg-dir 0 t))))) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
609 |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
610 (defun package--write-file-no-coding (file-name) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
611 (let ((buffer-file-coding-system 'no-conversion)) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
612 (write-region (point-min) (point-max) file-name))) |
211
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
613 |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
614 (defun package-unpack-single (file-name version desc requires) |
336
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
615 "Install the contents of the current buffer as a package." |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
616 ;; Special case "package". |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
617 (if (string= file-name "package") |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
618 (package--write-file-no-coding |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
619 (expand-file-name (concat file-name ".el") package-user-dir)) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
620 (let* ((pkg-dir (expand-file-name (concat file-name "-" |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
621 (package-version-join |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
622 (version-to-list version))) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
623 package-user-dir)) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
624 (el-file (expand-file-name (concat file-name ".el") pkg-dir)) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
625 (pkg-file (expand-file-name (concat file-name "-pkg.el") pkg-dir))) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
626 (make-directory pkg-dir t) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
627 (package--write-file-no-coding el-file) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
628 (let ((print-level nil) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
629 (print-length nil)) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
630 (write-region |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
631 (concat |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
632 (prin1-to-string |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
633 (list 'define-package |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
634 file-name |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
635 version |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
636 desc |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
637 (list 'quote |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
638 ;; Turn version lists into string form. |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
639 (mapcar |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
640 (lambda (elt) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
641 (list (car elt) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
642 (package-version-join (cadr elt)))) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
643 requires)))) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
644 "\n") |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
645 nil |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
646 pkg-file |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
647 nil nil nil 'excl)) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
648 (package-generate-autoloads file-name pkg-dir) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
649 (let ((load-path (cons pkg-dir load-path))) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
650 (byte-recompile-directory pkg-dir 0 t))))) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
651 |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
652 (defmacro package--with-work-buffer (location file &rest body) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
653 "Run BODY in a buffer containing the contents of FILE at LOCATION. |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
654 LOCATION is the base location of a package archive, and should be |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
655 one of the URLs (or file names) specified in `package-archives'. |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
656 FILE is the name of a file relative to that base location. |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
657 |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
658 This macro retrieves FILE from LOCATION into a temporary buffer, |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
659 and evaluates BODY while that buffer is current. This work |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
660 buffer is killed afterwards. Return the last value in BODY." |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
661 `(let* ((http (string-match "\\`http:" ,location)) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
662 (buffer |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
663 (if http |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
664 (url-retrieve-synchronously (concat ,location ,file)) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
665 (generate-new-buffer "*package work buffer*")))) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
666 (prog1 |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
667 (with-current-buffer buffer |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
668 (if http |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
669 (progn (package-handle-response) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
670 (re-search-forward "^$" nil 'move) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
671 (forward-char) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
672 (delete-region (point-min) (point))) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
673 (unless (file-name-absolute-p ,location) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
674 (error "Archive location %s is not an absolute file name" |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
675 ,location)) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
676 (insert-file-contents (expand-file-name ,file ,location))) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
677 ,@body) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
678 (kill-buffer buffer)))) |
211
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
679 |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
680 (defun package-handle-response () |
336
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
681 "Handle the response from a `url-retrieve-synchronously' call. |
211
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
682 Parse the HTTP response and throw if an error occurred. |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
683 The url package seems to require extra processing for this. |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
684 This should be called in a `save-excursion', in the download buffer. |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
685 It will move point to somewhere in the headers." |
336
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
686 ;; We assume HTTP here. |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
687 (require 'url-http) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
688 (let ((response (url-http-parse-response))) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
689 (when (or (< response 200) (>= response 300)) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
690 (error "Error during download request:%s" |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
691 (buffer-substring-no-properties (point) (progn |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
692 (end-of-line) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
693 (point))))))) |
211
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
694 |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
695 (defun package-download-single (name version desc requires) |
336
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
696 "Download and install a single-file package." |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
697 (let ((location (package-archive-base name)) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
698 (file (concat (symbol-name name) "-" version ".el"))) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
699 (package--with-work-buffer location file |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
700 (package-unpack-single (symbol-name name) version desc requires)))) |
211
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
701 |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
702 (defun package-download-tar (name version) |
336
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
703 "Download and install a tar package." |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
704 (let ((location (package-archive-base name)) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
705 (file (concat (symbol-name name) "-" version ".tar"))) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
706 (package--with-work-buffer location file |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
707 (package-unpack name version)))) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
708 |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
709 (defun package-installed-p (package &optional min-version) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
710 "Return true if PACKAGE, of VERSION or newer, is installed. |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
711 Built-in packages also qualify." |
211
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
712 (let ((pkg-desc (assq package package-alist))) |
336
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
713 (if pkg-desc |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
714 (version-list-<= min-version |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
715 (package-desc-vers (cdr pkg-desc))) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
716 ;; Also check built-in packages. |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
717 (package-built-in-p package min-version)))) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
718 |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
719 (defun package-compute-transaction (package-list requirements) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
720 "Return a list of packages to be installed, including PACKAGE-LIST. |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
721 PACKAGE-LIST should be a list of package names (symbols). |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
722 |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
723 REQUIREMENTS should be a list of additional requirements; each |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
724 element in this list should have the form (PACKAGE VERSION), |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
725 where PACKAGE is a package name and VERSION is the required |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
726 version of that package (as a list). |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
727 |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
728 This function recursively computes the requirements of the |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
729 packages in REQUIREMENTS, and returns a list of all the packages |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
730 that must be installed. Packages that are already installed are |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
731 not included in this list." |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
732 (dolist (elt requirements) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
733 (let* ((next-pkg (car elt)) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
734 (next-version (cadr elt))) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
735 (unless (package-installed-p next-pkg next-version) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
736 ;; A package is required, but not installed. It might also be |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
737 ;; blocked via `package-load-list'. |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
738 (let ((pkg-desc (assq next-pkg package-archive-contents)) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
739 hold) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
740 (when (setq hold (assq next-pkg package-load-list)) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
741 (setq hold (cadr hold)) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
742 (cond ((eq hold nil) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
743 (error "Required package '%s' is disabled" |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
744 (symbol-name next-pkg))) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
745 ((null (stringp hold)) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
746 (error "Invalid element in `package-load-list'")) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
747 ((version-list-< (version-to-list hold) next-version) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
748 (error "Package `%s' held at version %s, \ |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
749 but version %s required" |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
750 (symbol-name next-pkg) hold |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
751 (package-version-join next-version))))) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
752 (unless pkg-desc |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
753 (error "Package `%s-%s' is unavailable" |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
754 (symbol-name next-pkg) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
755 (package-version-join next-version))) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
756 (unless (version-list-<= next-version |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
757 (package-desc-vers (cdr pkg-desc))) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
758 (error |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
759 "Need package `%s-%s', but only %s is available" |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
760 (symbol-name next-pkg) (package-version-join next-version) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
761 (package-version-join (package-desc-vers (cdr pkg-desc))))) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
762 ;; Only add to the transaction if we don't already have it. |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
763 (unless (memq next-pkg package-list) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
764 (push next-pkg package-list)) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
765 (setq package-list |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
766 (package-compute-transaction package-list |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
767 (package-desc-reqs |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
768 (cdr pkg-desc)))))))) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
769 package-list) |
211
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
770 |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
771 (defun package-read-from-string (str) |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
772 "Read a Lisp expression from STR. |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
773 Signal an error if the entire string was not used." |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
774 (let* ((read-data (read-from-string str)) |
336
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
775 (more-left |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
776 (condition-case nil |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
777 ;; The call to `ignore' suppresses a compiler warning. |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
778 (progn (ignore (read-from-string |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
779 (substring str (cdr read-data)))) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
780 t) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
781 (end-of-file nil)))) |
211
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
782 (if more-left |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
783 (error "Can't read whole string") |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
784 (car read-data)))) |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
785 |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
786 (defun package--read-archive-file (file) |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
787 "Re-read archive file FILE, if it exists. |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
788 Will return the data from the file, or nil if the file does not exist. |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
789 Will throw an error if the archive version is too new." |
336
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
790 (let ((filename (expand-file-name file package-user-dir))) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
791 (when (file-exists-p filename) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
792 (with-temp-buffer |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
793 (insert-file-contents-literally filename) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
794 (let ((contents (read (current-buffer)))) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
795 (if (> (car contents) package-archive-version) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
796 (error "Package archive version %d is higher than %d" |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
797 (car contents) package-archive-version)) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
798 (cdr contents)))))) |
211
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
799 |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
800 (defun package-read-all-archive-contents () |
336
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
801 "Re-read `archive-contents', if it exists. |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
802 If successful, set `package-archive-contents'." |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
803 (setq package-archive-contents nil) |
211
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
804 (dolist (archive package-archives) |
336
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
805 (package-read-archive-contents (car archive)))) |
211
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
806 |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
807 (defun package-read-archive-contents (archive) |
336
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
808 "Re-read archive contents for ARCHIVE. |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
809 If successful, set the variable `package-archive-contents'. |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
810 If the archive version is too new, signal an error." |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
811 ;; Version 1 of 'archive-contents' is identical to our internal |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
812 ;; representation. |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
813 (let* ((dir (concat "archives/" archive)) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
814 (contents-file (concat dir "/archive-contents")) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
815 contents) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
816 (when (setq contents (package--read-archive-file contents-file)) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
817 (dolist (package contents) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
818 (package--add-to-archive-contents package archive))))) |
211
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
819 |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
820 (defun package--add-to-archive-contents (package archive) |
336
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
821 "Add the PACKAGE from the given ARCHIVE if necessary. |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
822 Also, add the originating archive to the end of the package vector." |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
823 (let* ((name (car package)) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
824 (version (aref (cdr package) 0)) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
825 (entry (cons (car package) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
826 (vconcat (cdr package) (vector archive)))) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
827 (existing-package (cdr (assq name package-archive-contents)))) |
211
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
828 (when (or (not existing-package) |
336
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
829 (version-list-< (aref existing-package 0) version)) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
830 (add-to-list 'package-archive-contents entry)))) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
831 |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
832 (defun package-download-transaction (package-list) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
833 "Download and install all the packages in PACKAGE-LIST. |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
834 PACKAGE-LIST should be a list of package names (symbols). |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
835 This function assumes that all package requirements in |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
836 PACKAGE-LIST are satisfied, i.e. that PACKAGE-LIST is computed |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
837 using `package-compute-transaction'." |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
838 (dolist (elt package-list) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
839 (let* ((desc (cdr (assq elt package-archive-contents))) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
840 ;; As an exception, if package is "held" in |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
841 ;; `package-load-list', download the held version. |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
842 (hold (cadr (assq elt package-load-list))) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
843 (v-string (or (and (stringp hold) hold) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
844 (package-version-join (package-desc-vers desc)))) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
845 (kind (package-desc-kind desc))) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
846 (cond |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
847 ((eq kind 'tar) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
848 (package-download-tar elt v-string)) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
849 ((eq kind 'single) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
850 (package-download-single elt v-string |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
851 (package-desc-doc desc) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
852 (package-desc-reqs desc))) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
853 (t |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
854 (error "Unknown package kind: %s" (symbol-name kind))))))) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
855 |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
856 ;;;###autoload |
211
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
857 (defun package-install (name) |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
858 "Install the package named NAME. |
336
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
859 Interactively, prompt for the package name. |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
860 The package is found on one of the archives in `package-archives'." |
211
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
861 (interactive |
336
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
862 (list (intern (completing-read "Install package: " |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
863 (mapcar (lambda (elt) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
864 (cons (symbol-name (car elt)) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
865 nil)) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
866 package-archive-contents) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
867 nil t)))) |
211
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
868 (let ((pkg-desc (assq name package-archive-contents))) |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
869 (unless pkg-desc |
336
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
870 (error "Package `%s' is not available for installation" |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
871 (symbol-name name))) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
872 (package-download-transaction |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
873 (package-compute-transaction (list name) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
874 (package-desc-reqs (cdr pkg-desc))))) |
211
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
875 ;; Try to activate it. |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
876 (package-initialize)) |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
877 |
336
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
878 (defun package-strip-rcs-id (str) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
879 "Strip RCS version ID from the version string STR. |
211
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
880 If the result looks like a dotted numeric version, return it. |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
881 Otherwise return nil." |
336
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
882 (when str |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
883 (when (string-match "\\`[ \t]*[$]Revision:[ \t]+" str) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
884 (setq str (substring str (match-end 0)))) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
885 (condition-case nil |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
886 (if (version-to-list str) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
887 str) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
888 (error nil)))) |
211
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
889 |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
890 (defun package-buffer-info () |
336
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
891 "Return a vector describing the package in the current buffer. |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
892 The vector has the form |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
893 |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
894 [FILENAME REQUIRES DESCRIPTION VERSION COMMENTARY] |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
895 |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
896 FILENAME is the file name, a string, sans the \".el\" extension. |
211
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
897 REQUIRES is a requires list, or nil. |
336
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
898 DESCRIPTION is the package description, a string. |
211
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
899 VERSION is the version, a string. |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
900 COMMENTARY is the commentary section, a string, or nil if none. |
336
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
901 |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
902 If the buffer does not contain a conforming package, signal an |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
903 error. If there is a package, narrow the buffer to the file's |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
904 boundaries." |
211
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
905 (goto-char (point-min)) |
336
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
906 (unless (re-search-forward "^;;; \\([^ ]*\\)\\.el --- \\(.*\\)$" nil t) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
907 (error "Packages lacks a file header")) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
908 (let ((file-name (match-string-no-properties 1)) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
909 (desc (match-string-no-properties 2)) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
910 (start (line-beginning-position))) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
911 (unless (search-forward (concat ";;; " file-name ".el ends here")) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
912 (error "Package lacks a terminating comment")) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
913 ;; Try to include a trailing newline. |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
914 (forward-line) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
915 (narrow-to-region start (point)) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
916 (require 'lisp-mnt) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
917 ;; Use some headers we've invented to drive the process. |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
918 (let* ((requires-str (lm-header "package-requires")) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
919 (requires (if requires-str |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
920 (package-read-from-string requires-str))) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
921 ;; Prefer Package-Version; if defined, the package author |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
922 ;; probably wants us to use it. Otherwise try Version. |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
923 (pkg-version |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
924 (or (package-strip-rcs-id (lm-header "package-version")) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
925 (package-strip-rcs-id (lm-header "version")))) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
926 (commentary (lm-commentary))) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
927 (unless pkg-version |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
928 (error |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
929 "Package lacks a \"Version\" or \"Package-Version\" header")) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
930 ;; Turn string version numbers into list form. |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
931 (setq requires |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
932 (mapcar |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
933 (lambda (elt) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
934 (list (car elt) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
935 (version-to-list (car (cdr elt))))) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
936 requires)) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
937 (vector file-name requires desc pkg-version commentary)))) |
211
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
938 |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
939 (defun package-tar-file-info (file) |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
940 "Find package information for a tar file. |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
941 FILE is the name of the tar file to examine. |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
942 The return result is a vector like `package-buffer-info'." |
336
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
943 (let ((default-directory (file-name-directory file)) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
944 (file (file-name-nondirectory file))) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
945 (unless (string-match "^\\(.+\\)-\\([0-9.]+\\)\\.tar$" file) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
946 (error "Invalid package name `%s'" file)) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
947 (let* ((pkg-name (match-string-no-properties 1 file)) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
948 (pkg-version (match-string-no-properties 2 file)) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
949 ;; Extract the package descriptor. |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
950 (pkg-def-contents (shell-command-to-string |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
951 ;; Requires GNU tar. |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
952 (concat "tar -xOf " file " " |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
953 |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
954 pkg-name "-" pkg-version "/" |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
955 pkg-name "-pkg.el"))) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
956 (pkg-def-parsed (package-read-from-string pkg-def-contents))) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
957 (unless (eq (car pkg-def-parsed) 'define-package) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
958 (error "No `define-package' sexp is present in `%s-pkg.el'" pkg-name)) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
959 (let ((name-str (nth 1 pkg-def-parsed)) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
960 (version-string (nth 2 pkg-def-parsed)) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
961 (docstring (nth 3 pkg-def-parsed)) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
962 (requires (nth 4 pkg-def-parsed)) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
963 (readme (shell-command-to-string |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
964 ;; Requires GNU tar. |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
965 (concat "tar -xOf " file " " |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
966 pkg-name "-" pkg-version "/README")))) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
967 (unless (equal pkg-version version-string) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
968 (error "Package has inconsistent versions")) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
969 (unless (equal pkg-name name-str) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
970 (error "Package has inconsistent names")) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
971 ;; Kind of a hack. |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
972 (if (string-match ": Not found in archive" readme) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
973 (setq readme nil)) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
974 ;; Turn string version numbers into list form. |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
975 (if (eq (car requires) 'quote) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
976 (setq requires (car (cdr requires)))) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
977 (setq requires |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
978 (mapcar (lambda (elt) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
979 (list (car elt) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
980 (version-to-list (cadr elt)))) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
981 requires)) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
982 (vector pkg-name requires docstring version-string readme))))) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
983 |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
984 ;;;###autoload |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
985 (defun package-install-from-buffer (pkg-info type) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
986 "Install a package from the current buffer. |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
987 When called interactively, the current buffer is assumed to be a |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
988 single .el file that follows the packaging guidelines; see info |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
989 node `(elisp)Packaging'. |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
990 |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
991 When called from Lisp, PKG-INFO is a vector describing the |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
992 information, of the type returned by `package-buffer-info'; and |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
993 TYPE is the package type (either `single' or `tar')." |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
994 (interactive (list (package-buffer-info) 'single)) |
211
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
995 (save-excursion |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
996 (save-restriction |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
997 (let* ((file-name (aref pkg-info 0)) |
336
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
998 (requires (aref pkg-info 1)) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
999 (desc (if (string= (aref pkg-info 2) "") |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1000 "No description available." |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1001 (aref pkg-info 2))) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1002 (pkg-version (aref pkg-info 3))) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1003 ;; Download and install the dependencies. |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1004 (let ((transaction (package-compute-transaction nil requires))) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1005 (package-download-transaction transaction)) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1006 ;; Install the package itself. |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1007 (cond |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1008 ((eq type 'single) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1009 (package-unpack-single file-name pkg-version desc requires)) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1010 ((eq type 'tar) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1011 (package-unpack (intern file-name) pkg-version)) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1012 (t |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1013 (error "Unknown type: %s" (symbol-name type)))) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1014 ;; Try to activate it. |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1015 (package-initialize))))) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1016 |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1017 ;;;###autoload |
211
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1018 (defun package-install-file (file) |
336
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1019 "Install a package from a file. |
211
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1020 The file can either be a tar file or an Emacs Lisp file." |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1021 (interactive "fPackage file name: ") |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1022 (with-temp-buffer |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1023 (insert-file-contents-literally file) |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1024 (cond |
336
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1025 ((string-match "\\.el$" file) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1026 (package-install-from-buffer (package-buffer-info) 'single)) |
211
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1027 ((string-match "\\.tar$" file) |
336
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1028 (package-install-from-buffer (package-tar-file-info file) 'tar)) |
211
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1029 (t (error "Unrecognized extension `%s'" (file-name-extension file)))))) |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1030 |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1031 (defun package-delete (name version) |
336
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1032 (let ((dir (package--dir name version))) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1033 (if (string-equal (file-name-directory dir) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1034 (file-name-as-directory |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1035 (expand-file-name package-user-dir))) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1036 (progn |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1037 (delete-directory dir t t) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1038 (message "Package `%s-%s' deleted." name version)) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1039 ;; Don't delete "system" packages |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1040 (error "Package `%s-%s' is a system package, not deleting" |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1041 name version)))) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1042 |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1043 (defun package-archive-base (name) |
211
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1044 "Return the archive containing the package NAME." |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1045 (let ((desc (cdr (assq (intern-soft name) package-archive-contents)))) |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1046 (cdr (assoc (aref desc (- (length desc) 1)) package-archives)))) |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1047 |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1048 (defun package--download-one-archive (archive file) |
336
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1049 "Retrieve an archive file FILE from ARCHIVE, and cache it. |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1050 ARCHIVE should be a cons cell of the form (NAME . LOCATION), |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1051 similar to an entry in `package-alist'. Save the cached copy to |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1052 \"archives/NAME/archive-contents\" in `package-user-dir'." |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1053 (let* ((dir (expand-file-name "archives" package-user-dir)) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1054 (dir (expand-file-name (car archive) dir))) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1055 (package--with-work-buffer (cdr archive) file |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1056 ;; Read the retrieved buffer to make sure it is valid (e.g. it |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1057 ;; may fetch a URL redirect page). |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1058 (when (listp (read buffer)) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1059 (make-directory dir t) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1060 (setq buffer-file-name (expand-file-name file dir)) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1061 (let ((version-control 'never)) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1062 (save-buffer)))))) |
211
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1063 |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1064 (defun package-refresh-contents () |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1065 "Download the ELPA archive description if needed. |
336
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1066 This informs Emacs about the latest versions of all packages, and |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1067 makes them available for download." |
211
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1068 (interactive) |
336
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1069 (unless (file-exists-p package-user-dir) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1070 (make-directory package-user-dir t)) |
211
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1071 (dolist (archive package-archives) |
336
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1072 (condition-case-no-debug nil |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1073 (package--download-one-archive archive "archive-contents") |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1074 (error (message "Failed to download `%s' archive." |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1075 (car archive))))) |
211
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1076 (package-read-all-archive-contents)) |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1077 |
336
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1078 (defvar package--initialized nil) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1079 |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1080 ;;;###autoload |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1081 (defun package-initialize (&optional no-activate) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1082 "Load Emacs Lisp packages, and activate them. |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1083 The variable `package-load-list' controls which packages to load. |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1084 If optional arg NO-ACTIVATE is non-nil, don't activate packages." |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1085 (interactive) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1086 (setq package-alist nil |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1087 package-obsolete-alist nil) |
211
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1088 (package-load-all-descriptors) |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1089 (package-read-all-archive-contents) |
336
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1090 (unless no-activate |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1091 (dolist (elt package-alist) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1092 (package-activate (car elt) (package-desc-vers (cdr elt))))) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1093 (setq package--initialized t)) |
211
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1094 |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1095 |
336
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1096 ;;;; Package description buffer. |
211
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1097 |
336
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1098 ;;;###autoload |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1099 (defun describe-package (package) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1100 "Display the full documentation of PACKAGE (a symbol)." |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1101 (interactive |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1102 (let* ((guess (function-called-at-point)) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1103 packages val) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1104 (require 'finder-inf nil t) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1105 ;; Load the package list if necessary (but don't activate them). |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1106 (unless package--initialized |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1107 (package-initialize t)) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1108 (setq packages (append (mapcar 'car package-alist) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1109 (mapcar 'car package-archive-contents) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1110 (mapcar 'car package--builtins))) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1111 (unless (memq guess packages) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1112 (setq guess nil)) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1113 (setq packages (mapcar 'symbol-name packages)) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1114 (setq val |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1115 (completing-read (if guess |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1116 (format "Describe package (default %s): " |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1117 guess) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1118 "Describe package: ") |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1119 packages nil t nil nil guess)) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1120 (list (if (equal val "") guess (intern val))))) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1121 (if (or (null package) (not (symbolp package))) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1122 (message "No package specified") |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1123 (help-setup-xref (list #'describe-package package) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1124 (called-interactively-p 'interactive)) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1125 (with-help-window (help-buffer) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1126 (with-current-buffer standard-output |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1127 (describe-package-1 package))))) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1128 |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1129 (defun describe-package-1 (package) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1130 (require 'lisp-mnt) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1131 (let ((package-name (symbol-name package)) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1132 (built-in (assq package package--builtins)) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1133 desc pkg-dir reqs version installable) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1134 (prin1 package) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1135 (princ " is ") |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1136 (cond |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1137 ;; Loaded packages are in `package-alist'. |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1138 ((setq desc (cdr (assq package package-alist))) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1139 (setq version (package-version-join (package-desc-vers desc))) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1140 (if (setq pkg-dir (package--dir package-name version)) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1141 (insert "an installed package.\n\n") |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1142 ;; This normally does not happen. |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1143 (insert "a deleted package.\n\n"))) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1144 ;; Available packages are in `package-archive-contents'. |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1145 ((setq desc (cdr (assq package package-archive-contents))) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1146 (setq version (package-version-join (package-desc-vers desc)) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1147 installable t) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1148 (if built-in |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1149 (insert "a built-in package.\n\n") |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1150 (insert "an uninstalled package.\n\n"))) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1151 (built-in |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1152 (setq desc (cdr built-in) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1153 version (package-version-join (package-desc-vers desc))) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1154 (insert "a built-in package.\n\n")) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1155 (t |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1156 (insert "an orphan package.\n\n"))) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1157 |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1158 (insert " " (propertize "Status" 'font-lock-face 'bold) ": ") |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1159 (cond (pkg-dir |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1160 (insert (propertize "Installed" |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1161 'font-lock-face 'font-lock-comment-face)) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1162 (insert " in `") |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1163 ;; Todo: Add button for uninstalling. |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1164 (help-insert-xref-button (file-name-as-directory pkg-dir) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1165 'help-package-def pkg-dir) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1166 (if built-in |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1167 (insert "',\n shadowing a " |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1168 (propertize "built-in package" |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1169 'font-lock-face 'font-lock-builtin-face) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1170 ".") |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1171 (insert "'."))) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1172 (installable |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1173 (if built-in |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1174 (insert (propertize "Built-in." 'font-lock-face 'font-lock-builtin-face) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1175 " Alternate version available -- ") |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1176 (insert "Available -- ")) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1177 (let ((button-text (if (display-graphic-p) "Install" "[Install]")) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1178 (button-face (if (display-graphic-p) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1179 '(:box (:line-width 2 :color "dark grey") |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1180 :background "light grey" |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1181 :foreground "black") |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1182 'link))) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1183 (insert-text-button button-text 'face button-face 'follow-link t |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1184 'package-symbol package |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1185 'action 'package-install-button-action))) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1186 (built-in |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1187 (insert (propertize "Built-in." 'font-lock-face 'font-lock-builtin-face))) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1188 (t (insert "Deleted."))) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1189 (insert "\n") |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1190 (and version (> (length version) 0) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1191 (insert " " |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1192 (propertize "Version" 'font-lock-face 'bold) ": " version "\n")) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1193 |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1194 (setq reqs (if desc (package-desc-reqs desc))) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1195 (when reqs |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1196 (insert " " (propertize "Requires" 'font-lock-face 'bold) ": ") |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1197 (let ((first t) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1198 name vers text) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1199 (dolist (req reqs) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1200 (setq name (car req) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1201 vers (cadr req) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1202 text (format "%s-%s" (symbol-name name) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1203 (package-version-join vers))) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1204 (cond (first (setq first nil)) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1205 ((>= (+ 2 (current-column) (length text)) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1206 (window-width)) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1207 (insert ",\n ")) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1208 (t (insert ", "))) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1209 (help-insert-xref-button text 'help-package name)) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1210 (insert "\n"))) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1211 (insert " " (propertize "Summary" 'font-lock-face 'bold) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1212 ": " (if desc (package-desc-doc desc)) "\n\n") |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1213 |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1214 (if built-in |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1215 ;; For built-in packages, insert the commentary. |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1216 (let ((fn (locate-file (concat package-name ".el") load-path |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1217 load-file-rep-suffixes)) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1218 (opoint (point))) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1219 (insert (or (lm-commentary fn) "")) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1220 (save-excursion |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1221 (goto-char opoint) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1222 (when (re-search-forward "^;;; Commentary:\n" nil t) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1223 (replace-match "")) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1224 (while (re-search-forward "^\\(;+ ?\\)" nil t) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1225 (replace-match "")))) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1226 (let ((readme (expand-file-name (concat package-name "-readme.txt") |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1227 package-user-dir)) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1228 readme-string) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1229 ;; For elpa packages, try downloading the commentary. If that |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1230 ;; fails, try an existing readme file in `package-user-dir'. |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1231 (cond ((condition-case nil |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1232 (package--with-work-buffer (package-archive-base package) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1233 (concat package-name "-readme.txt") |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1234 (setq buffer-file-name |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1235 (expand-file-name readme package-user-dir)) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1236 (let ((version-control 'never)) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1237 (save-buffer)) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1238 (setq readme-string (buffer-string)) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1239 t) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1240 (error nil)) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1241 (insert readme-string)) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1242 ((file-readable-p readme) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1243 (insert-file-contents readme) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1244 (goto-char (point-max)))))))) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1245 |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1246 (defun package-install-button-action (button) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1247 (let ((package (button-get button 'package-symbol))) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1248 (when (y-or-n-p (format "Install package `%s'? " package)) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1249 (package-install package) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1250 (revert-buffer nil t) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1251 (goto-char (point-min))))) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1252 |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1253 |
211
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1254 ;;;; Package menu mode. |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1255 |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1256 (defvar package-menu-mode-map |
336
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1257 (let ((map (copy-keymap special-mode-map)) |
211
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1258 (menu-map (make-sparse-keymap "Package"))) |
336
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1259 (set-keymap-parent map button-buffer-map) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1260 (define-key map "\C-m" 'package-menu-describe-package) |
211
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1261 (define-key map "n" 'next-line) |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1262 (define-key map "p" 'previous-line) |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1263 (define-key map "u" 'package-menu-mark-unmark) |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1264 (define-key map "\177" 'package-menu-backup-unmark) |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1265 (define-key map "d" 'package-menu-mark-delete) |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1266 (define-key map "i" 'package-menu-mark-install) |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1267 (define-key map "r" 'package-menu-refresh) |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1268 (define-key map "~" 'package-menu-mark-obsolete-for-deletion) |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1269 (define-key map "x" 'package-menu-execute) |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1270 (define-key map "h" 'package-menu-quick-help) |
336
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1271 (define-key map "?" 'package-menu-describe-package) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1272 (define-key map [follow-link] 'mouse-face) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1273 (define-key map [mouse-2] 'mouse-select-window) |
211
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1274 (define-key map [menu-bar package-menu] (cons "Package" menu-map)) |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1275 (define-key menu-map [mq] |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1276 '(menu-item "Quit" quit-window |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1277 :help "Quit package selection")) |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1278 (define-key menu-map [s1] '("--")) |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1279 (define-key menu-map [mn] |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1280 '(menu-item "Next" next-line |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1281 :help "Next Line")) |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1282 (define-key menu-map [mp] |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1283 '(menu-item "Previous" previous-line |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1284 :help "Previous Line")) |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1285 (define-key menu-map [s2] '("--")) |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1286 (define-key menu-map [mu] |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1287 '(menu-item "Unmark" package-menu-mark-unmark |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1288 :help "Clear any marks on a package and move to the next line")) |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1289 (define-key menu-map [munm] |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1290 '(menu-item "Unmark backwards" package-menu-backup-unmark |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1291 :help "Back up one line and clear any marks on that package")) |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1292 (define-key menu-map [md] |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1293 '(menu-item "Mark for deletion" package-menu-mark-delete |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1294 :help "Mark a package for deletion and move to the next line")) |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1295 (define-key menu-map [mi] |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1296 '(menu-item "Mark for install" package-menu-mark-install |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1297 :help "Mark a package for installation and move to the next line")) |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1298 (define-key menu-map [s3] '("--")) |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1299 (define-key menu-map [mg] |
336
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1300 '(menu-item "Update package list" revert-buffer |
211
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1301 :help "Update the list of packages")) |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1302 (define-key menu-map [mr] |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1303 '(menu-item "Refresh package list" package-menu-refresh |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1304 :help "Download the ELPA archive")) |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1305 (define-key menu-map [s4] '("--")) |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1306 (define-key menu-map [mt] |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1307 '(menu-item "Mark obsolete packages" package-menu-mark-obsolete-for-deletion |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1308 :help "Mark all obsolete packages for deletion")) |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1309 (define-key menu-map [mx] |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1310 '(menu-item "Execute actions" package-menu-execute |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1311 :help "Perform all the marked actions")) |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1312 (define-key menu-map [s5] '("--")) |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1313 (define-key menu-map [mh] |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1314 '(menu-item "Help" package-menu-quick-help |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1315 :help "Show short key binding help for package-menu-mode")) |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1316 (define-key menu-map [mc] |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1317 '(menu-item "View Commentary" package-menu-view-commentary |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1318 :help "Display information about this package")) |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1319 map) |
336
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1320 "Local keymap for `package-menu-mode' buffers.") |
211
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1321 |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1322 (defvar package-menu-sort-button-map |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1323 (let ((map (make-sparse-keymap))) |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1324 (define-key map [header-line mouse-1] 'package-menu-sort-by-column) |
336
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1325 (define-key map [header-line mouse-2] 'package-menu-sort-by-column) |
211
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1326 (define-key map [follow-link] 'mouse-face) |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1327 map) |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1328 "Local keymap for package menu sort buttons.") |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1329 |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1330 (put 'package-menu-mode 'mode-class 'special) |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1331 |
336
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1332 (define-derived-mode package-menu-mode special-mode "Package Menu" |
211
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1333 "Major mode for browsing a list of packages. |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1334 Letters do not insert themselves; instead, they are commands. |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1335 \\<package-menu-mode-map> |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1336 \\{package-menu-mode-map}" |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1337 (setq truncate-lines t) |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1338 (setq buffer-read-only t) |
336
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1339 (set (make-local-variable 'revert-buffer-function) 'package-menu-revert) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1340 (setq header-line-format |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1341 (mapconcat |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1342 (lambda (pair) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1343 (let ((column (car pair)) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1344 (name (cdr pair))) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1345 (concat |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1346 ;; Insert a space that aligns the button properly. |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1347 (propertize " " 'display (list 'space :align-to column) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1348 'face 'fixed-pitch) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1349 ;; Set up the column button. |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1350 (propertize name |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1351 'column-name name |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1352 'help-echo "mouse-1: sort by column" |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1353 'mouse-face 'highlight |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1354 'keymap package-menu-sort-button-map)))) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1355 ;; We take a trick from buff-menu and have a dummy leading |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1356 ;; space to align the header line with the beginning of the |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1357 ;; text. This doesn't really work properly on Emacs 21, but |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1358 ;; it is close enough. |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1359 '((0 . "") |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1360 (2 . "Package") |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1361 (20 . "Version") |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1362 (32 . "Status") |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1363 (43 . "Description")) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1364 ""))) |
211
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1365 |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1366 (defun package-menu-refresh () |
336
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1367 "Download the Emacs Lisp package archive. |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1368 This fetches the contents of each archive specified in |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1369 `package-archives', and then refreshes the package menu." |
211
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1370 (interactive) |
336
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1371 (unless (eq major-mode 'package-menu-mode) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1372 (error "The current buffer is not a Package Menu")) |
211
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1373 (package-refresh-contents) |
336
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1374 (package--generate-package-list)) |
211
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1375 |
336
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1376 (defun package-menu-revert (&optional arg noconfirm) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1377 "Update the list of packages. |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1378 This function is the `revert-buffer-function' for Package Menu |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1379 buffers. The arguments are ignored." |
211
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1380 (interactive) |
336
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1381 (unless (eq major-mode 'package-menu-mode) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1382 (error "The current buffer is not a Package Menu")) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1383 (package--generate-package-list)) |
211
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1384 |
336
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1385 (defun package-menu-describe-package () |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1386 "Describe the package in the current line." |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1387 (interactive) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1388 (let ((name (package-menu-get-package))) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1389 (if name |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1390 (describe-package (intern name)) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1391 (message "No package on this line")))) |
211
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1392 |
336
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1393 (defun package-menu-mark-internal (what) |
211
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1394 (unless (eobp) |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1395 (let ((buffer-read-only nil)) |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1396 (beginning-of-line) |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1397 (delete-char 1) |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1398 (insert what) |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1399 (forward-line)))) |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1400 |
336
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1401 ;; fixme numeric argument |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1402 (defun package-menu-mark-delete (num) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1403 "Mark a package for deletion and move to the next line." |
211
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1404 (interactive "p") |
336
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1405 (if (string-equal (package-menu-get-status) "installed") |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1406 (package-menu-mark-internal "D") |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1407 (forward-line))) |
211
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1408 |
336
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1409 (defun package-menu-mark-install (num) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1410 "Mark a package for installation and move to the next line." |
211
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1411 (interactive "p") |
336
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1412 (if (string-equal (package-menu-get-status) "available") |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1413 (package-menu-mark-internal "I") |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1414 (forward-line))) |
211
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1415 |
336
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1416 (defun package-menu-mark-unmark (num) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1417 "Clear any marks on a package and move to the next line." |
211
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1418 (interactive "p") |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1419 (package-menu-mark-internal " ")) |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1420 |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1421 (defun package-menu-backup-unmark () |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1422 "Back up one line and clear any marks on that package." |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1423 (interactive) |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1424 (forward-line -1) |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1425 (package-menu-mark-internal " ") |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1426 (forward-line -1)) |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1427 |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1428 (defun package-menu-mark-obsolete-for-deletion () |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1429 "Mark all obsolete packages for deletion." |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1430 (interactive) |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1431 (save-excursion |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1432 (goto-char (point-min)) |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1433 (forward-line 2) |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1434 (while (not (eobp)) |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1435 (if (looking-at ".*\\s obsolete\\s ") |
336
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1436 (package-menu-mark-internal "D") |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1437 (forward-line 1))))) |
211
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1438 |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1439 (defun package-menu-quick-help () |
336
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1440 "Show short key binding help for package-menu-mode." |
211
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1441 (interactive) |
336
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1442 (message "n-ext, i-nstall, d-elete, u-nmark, x-ecute, r-efresh, h-elp")) |
211
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1443 |
336
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1444 (define-obsolete-function-alias |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1445 'package-menu-view-commentary 'package-menu-describe-package "24.1") |
211
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1446 |
336
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1447 ;; Return the name of the package on the current line. |
211
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1448 (defun package-menu-get-package () |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1449 (save-excursion |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1450 (beginning-of-line) |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1451 (if (looking-at ". \\([^ \t]*\\)") |
336
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1452 (match-string-no-properties 1)))) |
211
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1453 |
336
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1454 ;; Return the version of the package on the current line. |
211
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1455 (defun package-menu-get-version () |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1456 (save-excursion |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1457 (beginning-of-line) |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1458 (if (looking-at ". [^ \t]*[ \t]*\\([0-9.]*\\)") |
336
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1459 (match-string 1)))) |
211
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1460 |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1461 (defun package-menu-get-status () |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1462 (save-excursion |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1463 (if (looking-at ". [^ \t]*[ \t]*[^ \t]*[ \t]*\\([^ \t]*\\)") |
336
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1464 (match-string 1) |
211
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1465 ""))) |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1466 |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1467 (defun package-menu-execute () |
336
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1468 "Perform marked Package Menu actions. |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1469 Packages marked for installation are downloaded and installed; |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1470 packages marked for deletion are removed." |
211
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1471 (interactive) |
336
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1472 (let (install-list delete-list cmd) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1473 (save-excursion |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1474 (goto-char (point-min)) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1475 (while (not (eobp)) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1476 (setq cmd (char-after)) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1477 (cond |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1478 ((eq cmd ?\s) t) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1479 ((eq cmd ?D) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1480 (push (cons (package-menu-get-package) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1481 (package-menu-get-version)) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1482 delete-list)) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1483 ((eq cmd ?I) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1484 (push (package-menu-get-package) install-list))) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1485 (forward-line))) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1486 ;; Delete packages, prompting if necessary. |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1487 (when delete-list |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1488 (if (yes-or-no-p |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1489 (if (= (length delete-list) 1) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1490 (format "Delete package `%s-%s'? " |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1491 (caar delete-list) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1492 (cdr (car delete-list))) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1493 (format "Delete these %d packages (%s)? " |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1494 (length delete-list) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1495 (mapconcat (lambda (elt) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1496 (concat (car elt) "-" (cdr elt))) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1497 delete-list |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1498 ", ")))) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1499 (dolist (elt delete-list) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1500 (condition-case-no-debug err |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1501 (package-delete (car elt) (cdr elt)) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1502 (error (message (cadr err))))) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1503 (error "Aborted"))) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1504 (when install-list |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1505 (if (yes-or-no-p |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1506 (if (= (length install-list) 1) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1507 (format "Install package `%s'? " (car install-list)) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1508 (format "Install these %d packages (%s)? " |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1509 (length install-list) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1510 (mapconcat 'identity install-list ", ")))) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1511 (dolist (elt install-list) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1512 (package-install (intern elt))))) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1513 ;; If we deleted anything, regenerate `package-alist'. This is done |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1514 ;; automatically if we installed a package. |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1515 (and delete-list (null install-list) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1516 (package-initialize)) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1517 (if (or delete-list install-list) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1518 (package-menu-revert) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1519 (message "No operations specified.")))) |
211
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1520 |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1521 (defun package-print-package (package version key desc) |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1522 (let ((face |
336
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1523 (cond ((string= key "built-in") 'font-lock-builtin-face) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1524 ((string= key "available") 'default) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1525 ((string= key "held") 'font-lock-constant-face) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1526 ((string= key "disabled") 'font-lock-warning-face) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1527 ((string= key "installed") 'font-lock-comment-face) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1528 (t ; obsolete, but also the default. |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1529 'font-lock-warning-face)))) |
211
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1530 (insert (propertize " " 'font-lock-face face)) |
336
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1531 (insert-text-button (symbol-name package) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1532 'face 'link |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1533 'follow-link t |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1534 'package-symbol package |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1535 'action (lambda (button) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1536 (describe-package |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1537 (button-get button 'package-symbol)))) |
211
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1538 (indent-to 20 1) |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1539 (insert (propertize (package-version-join version) 'font-lock-face face)) |
336
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1540 (indent-to 32 1) |
211
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1541 (insert (propertize key 'font-lock-face face)) |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1542 ;; FIXME: this 'when' is bogus... |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1543 (when desc |
336
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1544 (indent-to 43 1) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1545 (let ((opoint (point))) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1546 (insert (propertize desc 'font-lock-face face)) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1547 (upcase-region opoint (min (point) (1+ opoint))))) |
211
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1548 (insert "\n"))) |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1549 |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1550 (defun package-list-maybe-add (package version status description result) |
336
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1551 (unless (assoc (cons package version) result) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1552 (push (list (cons package version) status description) result)) |
211
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1553 result) |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1554 |
336
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1555 (defvar package-menu-package-list nil |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1556 "List of packages to display in the Package Menu buffer. |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1557 A value of nil means to display all packages.") |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1558 |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1559 (defvar package-menu-sort-key nil |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1560 "Sort key for the current Package Menu buffer.") |
211
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1561 |
336
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1562 (defun package--generate-package-list () |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1563 "Populate the current Package Menu buffer." |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1564 (let ((inhibit-read-only t) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1565 info-list name desc hold builtin) |
211
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1566 (erase-buffer) |
336
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1567 ;; List installed packages |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1568 (dolist (elt package-alist) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1569 (setq name (car elt)) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1570 (when (or (null package-menu-package-list) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1571 (memq name package-menu-package-list)) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1572 (setq desc (cdr elt) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1573 hold (cadr (assq name package-load-list))) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1574 (setq info-list |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1575 (package-list-maybe-add |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1576 name (package-desc-vers desc) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1577 ;; FIXME: it turns out to be tricky to see if this |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1578 ;; package is presently activated. |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1579 (if (stringp hold) "held" "installed") |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1580 (package-desc-doc desc) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1581 info-list)))) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1582 |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1583 ;; List built-in packages |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1584 (dolist (elt package--builtins) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1585 (setq name (car elt)) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1586 (when (and (not (eq name 'emacs)) ; Hide the `emacs' package. |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1587 (or (null package-menu-package-list) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1588 (memq name package-menu-package-list))) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1589 (setq desc (cdr elt)) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1590 (setq info-list |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1591 (package-list-maybe-add |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1592 name (package-desc-vers desc) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1593 "built-in" |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1594 (package-desc-doc desc) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1595 info-list)))) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1596 |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1597 ;; List available and disabled packages |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1598 (dolist (elt package-archive-contents) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1599 (setq name (car elt) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1600 desc (cdr elt) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1601 hold (assq name package-load-list)) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1602 (when (or (null package-menu-package-list) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1603 (memq name package-menu-package-list)) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1604 (setq info-list |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1605 (package-list-maybe-add name |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1606 (package-desc-vers desc) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1607 (if (and hold (null (cadr hold))) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1608 "disabled" |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1609 "available") |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1610 (package-desc-doc (cdr elt)) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1611 info-list)))) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1612 ;; List obsolete packages |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1613 (mapc (lambda (elt) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1614 (mapc (lambda (inner-elt) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1615 (setq info-list |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1616 (package-list-maybe-add (car elt) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1617 (package-desc-vers |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1618 (cdr inner-elt)) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1619 "obsolete" |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1620 (package-desc-doc |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1621 (cdr inner-elt)) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1622 info-list))) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1623 (cdr elt))) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1624 package-obsolete-alist) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1625 |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1626 (setq info-list |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1627 (sort info-list |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1628 (cond ((string= package-menu-sort-key "Package") |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1629 'package-menu--name-predicate) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1630 ((string= package-menu-sort-key "Version") |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1631 'package-menu--version-predicate) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1632 ((string= package-menu-sort-key "Description") |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1633 'package-menu--description-predicate) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1634 (t ; By default, sort by package status |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1635 'package-menu--status-predicate)))) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1636 |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1637 (dolist (elt info-list) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1638 (package-print-package (car (car elt)) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1639 (cdr (car elt)) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1640 (car (cdr elt)) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1641 (car (cdr (cdr elt))))) |
211
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1642 (goto-char (point-min)) |
336
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1643 (set-buffer-modified-p nil) |
211
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1644 (current-buffer))) |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1645 |
336
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1646 (defun package-menu--version-predicate (left right) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1647 (let ((vleft (or (cdr (car left)) '(0))) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1648 (vright (or (cdr (car right)) '(0)))) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1649 (if (version-list-= vleft vright) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1650 (package-menu--name-predicate left right) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1651 (version-list-< vleft vright)))) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1652 |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1653 (defun package-menu--status-predicate (left right) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1654 (let ((sleft (cadr left)) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1655 (sright (cadr right))) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1656 (cond ((string= sleft sright) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1657 (package-menu--name-predicate left right)) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1658 ((string= sleft "available") t) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1659 ((string= sright "available") nil) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1660 ((string= sleft "installed") t) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1661 ((string= sright "installed") nil) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1662 ((string= sleft "held") t) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1663 ((string= sright "held") nil) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1664 ((string= sleft "built-in") t) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1665 ((string= sright "built-in") nil) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1666 ((string= sleft "obsolete") t) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1667 ((string= sright "obsolete") nil) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1668 (t (string< sleft sright))))) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1669 |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1670 (defun package-menu--description-predicate (left right) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1671 (let ((sleft (car (cddr left))) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1672 (sright (car (cddr right)))) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1673 (if (string= sleft sright) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1674 (package-menu--name-predicate left right) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1675 (string< sleft sright)))) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1676 |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1677 (defun package-menu--name-predicate (left right) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1678 (string< (symbol-name (caar left)) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1679 (symbol-name (caar right)))) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1680 |
211
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1681 (defun package-menu-sort-by-column (&optional e) |
336
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1682 "Sort the package menu by the column of the mouse click E." |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1683 (interactive "e") |
211
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1684 (let* ((pos (event-start e)) |
336
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1685 (obj (posn-object pos)) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1686 (col (if obj |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1687 (get-text-property (cdr obj) 'column-name (car obj)) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1688 (get-text-property (posn-point pos) 'column-name))) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1689 (buf (window-buffer (posn-window (event-start e))))) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1690 (with-current-buffer buf |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1691 (when (eq major-mode 'package-menu-mode) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1692 (setq package-menu-sort-key col) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1693 (package--generate-package-list))))) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1694 |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1695 (defun package--list-packages (&optional packages) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1696 "Generate and pop to the *Packages* buffer. |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1697 Optional PACKAGES is a list of names of packages (symbols) to |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1698 list; the default is to display everything in `package-alist'." |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1699 (require 'finder-inf nil t) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1700 (let ((buf (get-buffer-create "*Packages*"))) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1701 (with-current-buffer buf |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1702 (package-menu-mode) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1703 (set (make-local-variable 'package-menu-package-list) packages) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1704 (set (make-local-variable 'package-menu-sort-key) nil) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1705 (package--generate-package-list)) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1706 ;; The package menu buffer has keybindings. If the user types |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1707 ;; `M-x list-packages', that suggests it should become current. |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1708 (switch-to-buffer buf))) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1709 |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1710 ;;;###autoload |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1711 (defun list-packages () |
211
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1712 "Display a list of packages. |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1713 Fetches the updated list of packages before displaying. |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1714 The list is displayed in a buffer named `*Packages*'." |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1715 (interactive) |
336
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1716 ;; Initialize the package system if necessary. |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1717 (unless package--initialized |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1718 (package-initialize t)) |
211
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1719 (package-refresh-contents) |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1720 (package--list-packages)) |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1721 |
336
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1722 ;;;###autoload |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1723 (defalias 'package-list-packages 'list-packages) |
ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
Augie Fackler <raf@durin42.com>
parents:
211
diff
changeset
|
1724 |
211
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1725 (defun package-list-packages-no-fetch () |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1726 "Display a list of packages. |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1727 Does not fetch the updated list of packages before displaying. |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1728 The list is displayed in a buffer named `*Packages*'." |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1729 (interactive) |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1730 (package--list-packages)) |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1731 |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1732 (provide 'package) |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1733 |
8980dc2deda0
emacs: use package.el to bootstrap instead of checking in all needed libs
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1734 ;;; package.el ends here |