melpa/html/index.erb
Kyle Hargraves 30e61252f7 Web: link to github and emacswiki
Adds an additional column to the table on http://melpa.milkbox.net
which provides a link directly to the github or emacswiki page for
a recipe.

My main gripe with using both `package-list-packages` and the web
UI is the extra effort required just to go check out a project's
README or similar. This should now be easier for the vast majority
of recipes in MELPA.

For emacswiki pages, only those recipes whose file matches the name
of the recipe are linked (ie, if the recipe uses :files, then no
link will be generated). This is Not Perfect(tm), but not bad either.
2012-12-24 21:02:20 -06:00

150 lines
5.5 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") %>* -- follow [@melpa_emacs on Twitter](https://twitter.com/melpa_emacs) for updates
<%
require 'json'
archive_json = JSON.parse(File.open("../archive.json").read)
recipe_json = JSON.parse(File.open("../recipes.json").read)
headers = ["Package", "Version", "Description", "Recipe", "Source"]
data = archive_json.keys.sort.map do |pkgname|
versions, deps, descr, pkgtype = archive_json[pkgname]
recipe = recipe_json[pkgname]
version = versions.join('.')
pkgurl = "packages/#{pkgname}-#{version}." + (pkgtype == "single" ? "el" : "tar")
recipe_url = "https://github.com/milkypostman/melpa/blob/master/recipes/#{pkgname}"
source = 'unknown'
if descr =~ /(.*?)(\s*-\*-.*?)?\s*\[source:\s*(\w+)\]\s*/
descr, source = $1, $3
end
case source
when 'github' then source_url = "https://github.com/#{recipe['repo']}"
when 'wiki' then source_url = recipe.key?('files') ? nil : "http://www.emacswiki.org/emacs/#{pkgname}.el"
else source_url = nil
end
["<a name=\"#{pkgname}\"></a>[#{pkgname}](#{pkgurl})", version, descr, "[recipe](#{recipe_url})", source_url ? "[#{source}](#{source_url})" : ""]
end
colwidth = [0,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
%>
<%= "## Current List of #{data.size} Packages" %>
<%=
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
**Note:** *This fix are included in the `melpa.el` package.*
There is a small bug in Emacs24's `package.el` the order for
dependencies comes out backwards for what I needed. the problem is
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))
## Updating Packages
`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).
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.
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js" type="text/javascript"></script>
<script src="http://cdnjs.cloudflare.com/ajax/libs/datatables/1.9.4/jquery.dataTables.min.js" type="text/javascript"></script>
<script language="javascript">
$("table").dataTable({bPaginate: false, bLengthChange: false});
$('div.dataTables_filter input').focus().attr("placeholder", "Enter filter terms");
</script>