mirror of
https://github.com/correl/melpa.git
synced 2024-11-16 11:09:26 +00:00
185 lines
6.2 KiB
Text
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.
|
|
|
|
|