melpa/html/index.erb

185 lines
6.2 KiB
Text

%% MELPA
*MELPA* or *Milkypostman's ELPA* or *Milkypostman's Experimental Lisp Package Repository* if you're not into the whole brevity thing.
[ [Packages](#current-list-of-packages) ]
[ [Installing](#installing) ]
[ [Known Issues](#known-issues) ]
[ [Updating Packages](#updating-packages) ]
[ [Development](#development) ]
**Last Update:** *<%= Time.now.strftime("%Y.%m.%d %H:%M %z") %>*
## Current List of Packages
<%
def parse str
# credit to: http://stackoverflow.com/q/3128406/154508
tokens = str.scan(/#{Regexp.escape("(")}|#{Regexp.escape(")")}|"(?:\\.|[^"])+"|[a-zA-Z0-9\'\-\_\+]+/)
stack = [[]]
tokens.each do |tok|
case tok
when "("
stack << []
when ")"
stack[-2] << stack.pop
when /^"(.*)\"$/
stack[-1] << $1
else
stack[-1] << tok
end
end
return stack[-1][-1]
end
headers = ["Package", "Version", "Description", "Source"]
data = parse(File.open("../packages/archive-contents").read)[1..-1]
data.map! do |row|
pkgname = row[0]
pkgurl = "packages/#{row[0]}-#{row[1]}." + (row[-1] == "single" ? "el" : "tar")
recipe_url = "https://github.com/milkypostman/melpa/blob/master/recipes/#{pkgname}"
descr, source = row[3..-2].join(" "), "other"
if descr =~ /(.*?)(\s*-\*-.*?)?\s*\[source:\s*(\w+)\]\s*/
descr, source = $1, $3
end
["[#{pkgname}](#{pkgurl})", row[1][0], descr, "[#{source}](#{recipe_url})"]
end
data.sort!
colwidth = [0,0,0, 9]
data.map do |row|
row.to_enum(:each_with_index).map do |e,i|
colwidth[i] = [colwidth[i], e.length].max
end
end
%>
<%=
headers.to_enum(:each_with_index).map{
|h,i| h + " "*(colwidth[i]-h.length) }.join(" ")
%>
<%= 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")
%>
## Installing
To add the repository put this before the call to `package-initialize`
in your `init.el` file.
<!-- <script src="https://gist.github.com/1679158.js"> </script> -->
(add-to-list 'package-archives
'("melpa" . "http://melpa.milkbox.net/packages/") t)
Please read about [known issues](#known-issues) below before
attempting to install multiple packages at once.
### Customizations
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.
(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:
`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'
## Known Issues
Due to the way the HTTP routing works on my provider, the HTTP/1.1
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
<!-- <script src="https://gist.github.com/1679208.js"> </script> -->
(setq url-http-attempt-keepalives nil)
This makes things a tad more slow but means that the install completes
correctly. Otherwise the connection times out and the install goes haywire.
### Fixes for `package.el`
**Note:** *These fixes are included in the `melpa.el` package.*
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*.
<!-- <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))
If you are not using Emacs24 from HEAD, you may also need this to initialize packages after they are downlaoded and installed.
(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))
## Updating Packages
`package.el` now includes a mechanism to upgrade packages. After running `package-list-pacages`, 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).
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.