2012-01-21 03:05:56 +00:00
%% MELPA
2012-04-30 21:54:04 +00:00
*MELPA* or *Milkypostman's ELPA* or *Milkypostman's Experimental Lisp Package Repository* if you're not into the whole brevity thing.
2012-01-25 17:33:47 +00:00
[ [Packages](#current-list-of-packages) ]
[ [Installing](#installing) ]
[ [Known Issues](#known-issues) ]
[ [Updating Packages](#updating-packages) ]
[ [Development](#development) ]
2012-07-26 14:36:47 +00:00
**Last Update:** *<%= Time.now.strftime("%Y.%m.%d %H:%M %z") %>* -- follow [@melpa_emacs on Twitter](https://twitter.com/melpa_emacs) for updates
2012-01-21 03:05:56 +00:00
2012-01-22 19:57:48 +00:00
<%
2012-07-25 13:01:04 +00:00
require 'json'
archive_json = JSON.parse(File.open("../archive.json").read)
2012-01-22 19:57:48 +00:00
2012-04-16 16:14:11 +00:00
headers = ["Package", "Version", "Description", "Source"]
2012-01-22 19:57:48 +00:00
2012-07-25 13:01:04 +00:00
data = archive_json.keys.sort.map do |pkgname|
versions, deps, descr, pkgtype = archive_json[pkgname]
version = versions.max.to_s
pkgurl = "packages/#{pkgname}-#{version}." + (pkgtype == "single" ? "el" : "tar")
2012-04-16 16:14:11 +00:00
recipe_url = "https://github.com/milkypostman/melpa/blob/master/recipes/#{pkgname}"
2012-07-25 13:01:04 +00:00
source = 'unknown'
2012-04-21 09:33:03 +00:00
if descr =~ /(.*?)(\s*-\*-.*?)?\s*\[source:\s*(\w+)\]\s*/
descr, source = $1, $3
2012-04-16 16:14:11 +00:00
end
2012-07-26 14:45:04 +00:00
["<a name=\"#{pkgname}\"></a>[#{pkgname}](#{pkgurl})", version, descr, "[#{source}](#{recipe_url})"]
2012-01-22 20:28:13 +00:00
end
2012-01-22 19:57:48 +00:00
2012-04-16 16:14:11 +00:00
colwidth = [0,0,0, 9]
2012-01-22 19:57:48 +00:00
data.map do |row|
row.to_enum(:each_with_index).map do |e,i|
colwidth[i] = [colwidth[i], e.length].max
end
end
%>
2012-05-24 11:51:56 +00:00
<%= "## Current List of #{data.size} Packages" %>
2012-01-22 19:57:48 +00:00
<%=
headers.to_enum(:each_with_index).map{
|h,i| h + " "*(colwidth[i]-h.length) }.join(" ")
2012-01-21 22:11:17 +00:00
%>
2012-01-22 19:57:48 +00:00
<%= colwidth.map{ |w| "-"*w }.join(" ") %>
<%=
data.map{ |row|
row.to_enum(:each_with_index).map{ |c,i|
c + " "*(colwidth[i]-c.length)
}.join(" ")
}.join("\n")
%>
2012-01-21 03:05:56 +00:00
## Installing
To add the repository put this before the call to `package-initialize`
in your `init.el` file.
2012-01-25 23:21:24 +00:00
<!-- <script src="https://gist.github.com/1679158.js"> </script> -->
(add-to-list 'package-archives
'("melpa" . "http://melpa.milkbox.net/packages/") t)
2012-01-21 03:05:56 +00:00
Please read about [known issues](#known-issues) below before
attempting to install multiple packages at once.
2012-01-28 04:04:33 +00:00
### Customizations
2012-03-24 16:59:20 +00:00
There is currently no way in `package.el` to exclude or include versions. So to remedy this there is a `melpa.el` package--available in MELPA--that will allow you to enable only certain packages or exclude certain packages. You can install the package manually by pasting this into yoru `*scratch*` buffer and evaluating it.
2012-01-28 04:04:33 +00:00
(progn
(switch-to-buffer
(url-retrieve-synchronously
"https://raw.github.com/milkypostman/melpa/master/melpa.el"))
(package-install-from-buffer (package-buffer-info) 'single))
You can then customize two variables:
2012-03-24 16:59:20 +00:00
`package-archive-enable-alist`
: Optional Alist of enabled packages used by `package-filter'.
The format is (ARCHIVE . PACKAGE ...), where ARCHIVE is a string
matching an archive name in `package-archives', PACKAGE is a
symbol of a package in ARCHIVE to enable.
If no ARCHIVE exists in the alist, all packages are enabled.
`package-archive-exclude-alist`
: Alist of packages excluded by `package-filter'.
The format is (ARCHIVE . PACKAGE ...), where ARCHIVE is a string
matching an archive name in `package-archives', PACKAGE is a
symbol of a package in that archive to exclude.
Any specified package is excluded regardless of the value of
`package-archive-enable-alist'
2012-01-28 04:04:33 +00:00
2012-01-21 03:05:56 +00:00
## Known Issues
Due to the way the HTTP routing works on my provider, the HTTP/1.1
2012-03-24 16:59:20 +00:00
connection will time out for long package installs--where the
package is large and takes a while to compile--like *magit* or *evil*. If you run into problems with complaints about the response from the web server consider adding
2012-01-21 03:05:56 +00:00
2012-01-25 23:21:24 +00:00
<!-- <script src="https://gist.github.com/1679208.js"> </script> -->
(setq url-http-attempt-keepalives nil)
2012-01-21 03:05:56 +00:00
This makes things a tad more slow but means that the install completes
correctly. Otherwise the connection times out and the install goes haywire.
2012-01-25 22:42:59 +00:00
### Fixes for `package.el`
2012-01-28 04:04:33 +00:00
**Note:** *These fixes are included in the `melpa.el` package.*
2012-01-25 22:42:59 +00:00
There are a number of small bugs in Emacs24's `package.el`. First,
when installing dependencies, the packages were not getting
initialized. Second, the order for dependencies was coming out
backwards for what I needed. Both problems are
easily patched by some *advice*.
2012-01-25 23:21:24 +00:00
<!-- <script src="https://gist.github.com/1679232.js"> </script> -->
(defadvice package-compute-transaction
(before
package-compute-transaction-reverse (package-list requirements)
activate compile)
"reverse the requirements"
(setq requirements (reverse requirements))
(print requirements))
2012-03-18 20:20:13 +00:00
If you are not using Emacs24 from HEAD, you may also need this to initialize packages after they are downlaoded and installed.
2012-01-25 23:21:24 +00:00
(defadvice package-download-tar
(after package-download-tar-initialize activate compile)
"initialize the package after compilation"
(package-initialize))
(defadvice package-download-single
(after package-download-single-initialize activate compile)
"initialize the package after compilation"
(package-initialize))
2012-01-25 22:42:59 +00:00
2012-01-21 03:05:56 +00:00
## Updating Packages
2012-06-22 14:43:25 +00:00
`package.el` now includes a mechanism to upgrade packages. After running `package-list-packages`, type *u* (mark Upgradable packages) and then *x* (eXecute the installs and deletions). When it's done installing all the packages it will ask if you want to delete the obsolete packages and so you can hit *y* (Yes).
2012-01-21 03:05:56 +00:00
If you run into a problem installing or upgrading, you may need to go into your `~/.emacs.d/elpa/` directory and delete packages that are installed multiple times. This can happen when the install times out (see [Known Issues](#known-issues)).
## Development
[https://github.com/milkypostman/melpa](https://github.com/milkypostman/melpa)
Contributions are welcome. Currently, the builder only supports
packages using git, subversion, mercurial, and darcs. This covers
most of the packages that I am interested in.