2013-05-04 20:15:49 +00:00
|
|
|
|
<%#-*- coding: utf-8 -*-%>
|
2013-03-13 14:50:22 +00:00
|
|
|
|
<%
|
|
|
|
|
require 'json'
|
|
|
|
|
require 'ostruct'
|
|
|
|
|
include ERB::Util
|
|
|
|
|
archive_json = JSON.parse(File.open("../archive.json").read)
|
|
|
|
|
recipe_json = JSON.parse(File.open("../recipes.json").read)
|
2013-04-26 07:41:15 +00:00
|
|
|
|
downloads_json = JSON.parse(File.open("../download_counts.json").read) rescue {}
|
2013-03-13 14:50:22 +00:00
|
|
|
|
|
2013-03-25 14:58:09 +00:00
|
|
|
|
packages = (archive_json.keys & recipe_json.keys).sort.map do |pkgname|
|
2013-03-13 14:50:22 +00:00
|
|
|
|
package = OpenStruct.new
|
|
|
|
|
package.name = pkgname
|
2013-04-25 02:38:20 +00:00
|
|
|
|
package.downloads = downloads_json[package.name]
|
2013-03-13 14:50:22 +00:00
|
|
|
|
versions, deps, package.descr, package.pkgtype = archive_json[package.name]
|
|
|
|
|
recipe = recipe_json[package.name]
|
|
|
|
|
package.version = versions.join('.')
|
|
|
|
|
package.url = "packages/#{package.name}-#{package.version}." + (package.pkgtype == "single" ? "el" : "tar")
|
|
|
|
|
package.recipe_url = "https://github.com/milkypostman/melpa/blob/master/recipes/#{package.name}"
|
2013-04-16 19:58:02 +00:00
|
|
|
|
package.source = recipe["fetcher"]
|
2013-05-09 11:31:52 +00:00
|
|
|
|
if package.descr =~ /(.*?)(\s*-\*-.*?)?\s*\[(\w+)\]\s*/
|
2013-04-26 07:38:45 +00:00
|
|
|
|
package.descr = $1
|
2013-03-13 14:50:22 +00:00
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
package.source_url =
|
|
|
|
|
case package.source
|
|
|
|
|
when 'github' then recipe['repo'].include?('/') ? "https://github.com/#{recipe['repo']}" : "https://gist.github.com/#{recipe['repo']}"
|
|
|
|
|
when 'wiki' then recipe.key?('files') ? nil : "http://www.emacswiki.org/emacs/#{package.name}.el"
|
2013-04-16 20:05:27 +00:00
|
|
|
|
else
|
|
|
|
|
case recipe['url']
|
|
|
|
|
when /(bitbucket\.org\/[^\/]+\/[^\/\?]+)/ then "https://" + $1
|
|
|
|
|
when /(gitorious\.org\/[^\/]+\/[^.]+)/ then "https://" + $1
|
|
|
|
|
when /\A(https?:\/\/code\.google\.com\/p\/[^\/]+\/)/ then $1
|
|
|
|
|
when /\A(https?:\/\/[^.]+\.googlecode\.com\/)/ then $1
|
2013-04-17 10:29:19 +00:00
|
|
|
|
when /\Alp:(.*)/ then "https://launchpad.net/" + $1
|
2013-04-14 07:25:39 +00:00
|
|
|
|
end
|
2013-03-13 14:50:22 +00:00
|
|
|
|
end
|
|
|
|
|
package
|
|
|
|
|
end
|
2013-03-25 14:23:27 +00:00
|
|
|
|
%><!DOCTYPE html>
|
2013-03-13 14:50:22 +00:00
|
|
|
|
<html lang="en-US">
|
|
|
|
|
<head>
|
|
|
|
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
|
|
|
|
<title>MELPA</title>
|
|
|
|
|
|
2013-05-20 20:23:42 +00:00
|
|
|
|
<link href="http://netdna.bootstrapcdn.com/twitter-bootstrap/2.3.2/css/bootstrap-combined.min.css" rel="stylesheet">
|
2013-03-13 14:50:22 +00:00
|
|
|
|
<link rel="stylesheet" href="styles/default.css" type="text/css" />
|
|
|
|
|
<style type="text/css">
|
|
|
|
|
body {
|
|
|
|
|
padding-top: 60px;
|
|
|
|
|
}
|
|
|
|
|
h1 {
|
|
|
|
|
color: #922793;
|
|
|
|
|
}
|
|
|
|
|
.dataTables_empty {
|
|
|
|
|
background-color: #FCF8E3;
|
|
|
|
|
color: #C09853;
|
|
|
|
|
}
|
2013-04-25 02:38:20 +00:00
|
|
|
|
.table .text-right {
|
2013-05-10 10:43:33 +00:00
|
|
|
|
text-align: right;
|
2013-04-25 02:38:20 +00:00
|
|
|
|
}
|
2013-03-13 14:50:22 +00:00
|
|
|
|
pre code { /* Match highlight.js styles to bootstrap */
|
|
|
|
|
padding: 0;
|
|
|
|
|
background: transparent;
|
|
|
|
|
}
|
2013-05-10 11:34:10 +00:00
|
|
|
|
#package-list th {
|
|
|
|
|
text-wrap: nobreak;
|
|
|
|
|
}
|
2013-03-13 14:50:22 +00:00
|
|
|
|
.navbar, .navbar .brand, .navbar a, .navbar .nav>li>a {
|
|
|
|
|
color: #922793;
|
|
|
|
|
}
|
2013-03-14 09:56:51 +00:00
|
|
|
|
a[name] { /* Stop navbar from hiding anchors */
|
|
|
|
|
padding-top: 60px;
|
|
|
|
|
margin-top: -60px;
|
|
|
|
|
display: inline-block; /* required for webkit browsers */
|
|
|
|
|
}
|
2013-03-13 14:50:22 +00:00
|
|
|
|
</style>
|
|
|
|
|
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js" type="text/javascript"></script>
|
2013-05-20 20:23:42 +00:00
|
|
|
|
<script src="http://netdna.bootstrapcdn.com/twitter-bootstrap/2.3.2/js/bootstrap.min.js"></script>
|
2013-03-14 16:27:14 +00:00
|
|
|
|
<script src="http://cdnjs.cloudflare.com/ajax/libs/moment.js/2.0.0/moment.min.js"></script>
|
2013-03-13 14:50:22 +00:00
|
|
|
|
<script src="highlight.pack.js"></script>
|
|
|
|
|
<script>hljs.initHighlightingOnLoad();</script>
|
|
|
|
|
</head>
|
|
|
|
|
<body>
|
|
|
|
|
<div class="navbar navbar-fixed-top">
|
|
|
|
|
<div class="navbar-inner">
|
|
|
|
|
<div class="container">
|
|
|
|
|
<a href="/" class="brand">MELPA</a>
|
|
|
|
|
<ul class="nav">
|
|
|
|
|
<li><a href="#packages">Packages</a></li>
|
|
|
|
|
<li><a href="#installing">Installing</a></li>
|
|
|
|
|
<li><a href="#known-issues">Known issues</a></li>
|
|
|
|
|
<li><a href="#updating">Updating</a></li>
|
|
|
|
|
<li><a href="#development">Development</a></li>
|
|
|
|
|
<li><a href="https://github.com/milkypostman/melpa">Github</a></li>
|
2013-03-18 07:24:18 +00:00
|
|
|
|
<li><a href="https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=UCKDWNVGK8MFA&lc=US&item_name=MELPA¤cy_code=USD&bn=PP%2dDonationsBF%3abtn_donateCC_LG%2egif%3aNonHosted">Donate</a></li>
|
2013-03-13 14:50:22 +00:00
|
|
|
|
</ul>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="container">
|
|
|
|
|
<section class="page-header">
|
2013-03-13 17:11:45 +00:00
|
|
|
|
<h1>MELPA <small>(Milkypostman’s Emacs Lisp Package Archive)</small></h1>
|
2013-03-13 14:50:22 +00:00
|
|
|
|
</section>
|
2013-03-13 16:25:38 +00:00
|
|
|
|
<div class="row">
|
|
|
|
|
<div class="span8">
|
|
|
|
|
<section class="hero-unit">
|
|
|
|
|
<ul>
|
2013-03-13 16:59:57 +00:00
|
|
|
|
<li><strong>Up-to-date packages built on our servers from upstream source</strong></li>
|
|
|
|
|
<li><strong>Installable in any recent Emacs using "package.el"</strong> - no need to install svn/cvs/hg/bzr/git/darcs etc.</li>
|
|
|
|
|
<li><strong>Curated</strong> - no obsolete, renamed, forked or randomly hacked packages</li>
|
2013-04-09 15:08:18 +00:00
|
|
|
|
<li><strong>Comprehensive</strong> - more packages than any other archive</li>
|
2013-03-13 16:59:57 +00:00
|
|
|
|
<li><strong>Automatic updates</strong> - new commits result in new packages</li>
|
|
|
|
|
<li><strong>Extensible</strong> - contribute recipes via github, and we'll build the packages</li>
|
2013-03-13 16:25:38 +00:00
|
|
|
|
</ul>
|
|
|
|
|
</section>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="span4">
|
|
|
|
|
<div class="alert alert-success">
|
2013-03-14 16:27:14 +00:00
|
|
|
|
<strong>Latest build:</strong> <em><script language="javascript">document.write(moment(new Date(<%= Time.now.to_i * 1000 %>)).fromNow());</script></em>
|
2013-03-13 16:25:38 +00:00
|
|
|
|
</div>
|
|
|
|
|
<a class="twitter-timeline" data-dnt="true" data-related="milkypostman,sanityinc" href="https://twitter.com/melpa_emacs" data-widget-id="311867756586864640">Tweets by @melpa_emacs</a>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
2013-03-13 14:50:22 +00:00
|
|
|
|
<section>
|
2013-03-14 09:56:51 +00:00
|
|
|
|
<a name="packages"></a>
|
|
|
|
|
<h2>Current List of <%=h packages.size %> Packages</h2>
|
2013-05-10 11:34:10 +00:00
|
|
|
|
<table id="package-list" class="table table-bordered table-hover">
|
2013-03-13 14:50:22 +00:00
|
|
|
|
<thead>
|
|
|
|
|
<tr class="header">
|
2013-05-10 10:43:33 +00:00
|
|
|
|
<th>Package</th>
|
|
|
|
|
<th>Version</th>
|
|
|
|
|
<th>Description</th>
|
|
|
|
|
<th>Recipe</th>
|
|
|
|
|
<th>Source</th>
|
|
|
|
|
<th>DLs</th>
|
2013-03-13 14:50:22 +00:00
|
|
|
|
</tr>
|
|
|
|
|
</thead>
|
|
|
|
|
<tbody>
|
|
|
|
|
<% packages.each do |package| %>
|
|
|
|
|
<tr>
|
2013-04-16 19:54:13 +00:00
|
|
|
|
<td><a name="<%=h package.name %>"></a><%=h package.name %></td>
|
|
|
|
|
<td><a href="<%=h package.url %>"><%=h package.version %></a></td>
|
2013-05-04 20:15:49 +00:00
|
|
|
|
<td><%=h package.descr %></td>
|
2013-03-13 14:50:22 +00:00
|
|
|
|
<td><a href="<%=h package.recipe_url %>">recipe</a></td>
|
|
|
|
|
<td><% if package.source_url %>
|
|
|
|
|
<a href="<%=h package.source_url %>"><%=h package.source %></a>
|
|
|
|
|
<% else %>
|
|
|
|
|
<%=h package.source %>
|
|
|
|
|
<% end %>
|
|
|
|
|
</td>
|
2013-04-25 02:38:20 +00:00
|
|
|
|
<td class="text-right"><%=h package.downloads %></td>
|
2013-03-13 14:50:22 +00:00
|
|
|
|
</tr>
|
|
|
|
|
<% end %>
|
|
|
|
|
</tbody>
|
|
|
|
|
</table>
|
|
|
|
|
</section>
|
|
|
|
|
<section>
|
2013-03-14 09:56:51 +00:00
|
|
|
|
<a name="installing"></a>
|
|
|
|
|
<h2>Installing</h2>
|
2013-03-13 14:50:22 +00:00
|
|
|
|
<p>To add the repository put this before the call to <code>package-initialize</code> in your <code>init.el</code> file.</p>
|
|
|
|
|
<!-- <script src="https://gist.github.com/1679158.js"> </script> -->
|
|
|
|
|
|
|
|
|
|
<pre><code>(add-to-list 'package-archives
|
|
|
|
|
'("melpa" . "http://melpa.milkbox.net/packages/") t)</code></pre>
|
2013-04-01 19:05:42 +00:00
|
|
|
|
|
|
|
|
|
<p>In Emacs < 24, you'll also need to explicitly include the GNU
|
|
|
|
|
ELPA archive, which provides important compatibility libraries like <code>cl-lib</code>:</p>
|
|
|
|
|
<pre><code>(when (< emacs-major-version 24)
|
|
|
|
|
(add-to-list 'package-archives '("gnu" . "http://elpa.gnu.org/packages/")))</code></pre>
|
2013-03-13 14:50:22 +00:00
|
|
|
|
<p>
|
|
|
|
|
Please read about <a href="#known-issues">known issues</a>
|
|
|
|
|
below before attempting to install multiple packages at once.
|
|
|
|
|
</p>
|
2013-03-14 09:56:51 +00:00
|
|
|
|
<h3>Customizations</h3>
|
2013-03-13 14:50:22 +00:00
|
|
|
|
<p>
|
|
|
|
|
There is currently no way in <code>package.el</code> to
|
|
|
|
|
exclude or include versions. So to remedy this there is
|
|
|
|
|
a <code>melpa.el</code> 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 your <code>*scratch*</code> buffer and evaluating it.
|
|
|
|
|
</p>
|
|
|
|
|
<pre><code>(progn
|
|
|
|
|
(switch-to-buffer
|
|
|
|
|
(url-retrieve-synchronously
|
|
|
|
|
"https://raw.github.com/milkypostman/melpa/master/melpa.el"))
|
|
|
|
|
(package-install-from-buffer (package-buffer-info) 'single))</code></pre>
|
|
|
|
|
<p>You can then customize two variables:</p>
|
|
|
|
|
<dl>
|
|
|
|
|
<dt><code>package-archive-enable-alist</code></dt>
|
|
|
|
|
<dd>
|
|
|
|
|
<p>
|
|
|
|
|
Optional Alist of enabled packages used
|
|
|
|
|
by <code>package-filter</code>. The format
|
|
|
|
|
is <code>(ARCHIVE . PACKAGE ...)</code>,
|
|
|
|
|
where <code>ARCHIVE</code> is a string matching an archive
|
|
|
|
|
name in<code>package-archives</code>, <code>PACKAGE</code>
|
|
|
|
|
is a symbol of a package in <code>ARCHIVE</code> to
|
|
|
|
|
enable.
|
|
|
|
|
</p>
|
|
|
|
|
<p>
|
|
|
|
|
If no <code>ARCHIVE</code> exists in the alist, all
|
|
|
|
|
packages are enabled.
|
|
|
|
|
</p>
|
|
|
|
|
</dd>
|
|
|
|
|
<dt><code>package-archive-exclude-alist</code></dt>
|
|
|
|
|
<dd>
|
|
|
|
|
<p>
|
|
|
|
|
Alist of packages excluded by <code> package-filter
|
|
|
|
|
</code>. The format is <code>(ARCHIVE . PACKAGE
|
|
|
|
|
...)</code>, where <code>ARCHIVE</code> is a string
|
|
|
|
|
matching an archive name
|
|
|
|
|
in</code>package-archives</code>, <code>PACKAGE</code> is
|
|
|
|
|
a symbol of a package in that archive to exclude.</p>
|
|
|
|
|
<p>
|
|
|
|
|
Any specified package is excluded regardless of the value
|
|
|
|
|
of <code>package-archive-enable-alist</code>
|
|
|
|
|
</p>
|
|
|
|
|
</dd>
|
|
|
|
|
</dl>
|
|
|
|
|
</section>
|
|
|
|
|
<section>
|
2013-03-14 09:56:51 +00:00
|
|
|
|
<a name="known-issues"></a>
|
|
|
|
|
<h2>Known Issues</h2>
|
2013-03-13 14:50:22 +00:00
|
|
|
|
<p>
|
|
|
|
|
<strong>Note:</strong> <em>These fixes are included in
|
|
|
|
|
the <code>melpa.el</code> package.</em>
|
|
|
|
|
</p>
|
|
|
|
|
<p>
|
|
|
|
|
There is a small bug in Emacs24’s <code>package.el</code> such
|
|
|
|
|
that the dependency order comes out backwards. The problem is
|
|
|
|
|
patched by some <em>advice</em>.
|
|
|
|
|
</p>
|
|
|
|
|
|
|
|
|
|
<pre><code> (defadvice package-compute-transaction
|
|
|
|
|
(before package-compute-transaction-reverse (package-list requirements) activate compile)
|
|
|
|
|
"reverse the requirements"
|
|
|
|
|
(setq requirements (reverse requirements))
|
|
|
|
|
(print requirements))</code></pre>
|
|
|
|
|
</section>
|
|
|
|
|
<section>
|
2013-03-14 09:56:51 +00:00
|
|
|
|
<a name="updating"></a>
|
|
|
|
|
<h2>Updating Packages</h2>
|
2013-03-13 14:50:22 +00:00
|
|
|
|
<p>
|
|
|
|
|
<code>package.el</code> now includes a mechanism to upgrade
|
|
|
|
|
packages. After running <code>package-list-packages</code>,
|
|
|
|
|
type <em>U</em> (mark Upgradable packages) and then <em>x</em>
|
|
|
|
|
(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 <em>y</em> (Yes).
|
|
|
|
|
</p>
|
|
|
|
|
<p>
|
|
|
|
|
If you run into a problem installing or upgrading, you may
|
|
|
|
|
need to go into your <code>~/.emacs.d/elpa/</code> directory
|
|
|
|
|
and delete packages that are installed multiple times. This
|
2013-03-13 16:12:25 +00:00
|
|
|
|
can happen when the install times out.
|
2013-03-13 14:50:22 +00:00
|
|
|
|
</p>
|
2013-03-14 09:56:51 +00:00
|
|
|
|
<a name="development"></a>
|
|
|
|
|
<h2>Development</h2>
|
2013-03-13 14:50:22 +00:00
|
|
|
|
<p><a href="https://github.com/milkypostman/melpa">https://github.com/milkypostman/melpa</a></p>
|
|
|
|
|
<p>
|
|
|
|
|
Contributions are welcome. Currently, the builder supports
|
|
|
|
|
packages using git, subversion, mercurial, bzr, cvs, darcs and
|
|
|
|
|
emacswiki.
|
|
|
|
|
</p>
|
|
|
|
|
</section>
|
|
|
|
|
</div>
|
2013-03-13 16:25:38 +00:00
|
|
|
|
<script src="http://platform.twitter.com/widgets.js" type="text/javascript"></script>
|
2013-03-13 14:50:22 +00:00
|
|
|
|
<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">
|
2013-05-10 11:34:10 +00:00
|
|
|
|
function updateSortIndicators() {
|
|
|
|
|
$("#package-list th.sorting .sort-ind").html('<i class="icon-chevron-down icon-white"></i>');
|
|
|
|
|
$("#package-list th.sorting_asc .sort-ind").html('<i class="icon-chevron-down"></i>');
|
|
|
|
|
$("#package-list th.sorting_desc .sort-ind").html('<i class="icon-chevron-up"></i>');
|
|
|
|
|
}
|
|
|
|
|
var table = $("#package-list");
|
|
|
|
|
table.find("th").append(' <span class="sort-ind"></span>');
|
|
|
|
|
table .dataTable({bPaginate: false, bLengthChange: false, fnDrawCallback: updateSortIndicators});
|
2013-03-13 14:50:22 +00:00
|
|
|
|
$('div.dataTables_filter input').focus().attr("placeholder", "Enter filter terms");
|
|
|
|
|
</script>
|
2013-03-13 20:45:31 +00:00
|
|
|
|
<script type="text/javascript">
|
|
|
|
|
var _gaq = _gaq || [];
|
2013-03-14 08:27:57 +00:00
|
|
|
|
_gaq.push(['_setAccount', 'UA-39278673-1']);
|
2013-03-13 20:45:31 +00:00
|
|
|
|
_gaq.push(['_trackPageview']);
|
|
|
|
|
(function() {
|
|
|
|
|
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
|
|
|
|
|
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
|
|
|
|
|
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
|
|
|
|
|
})();
|
|
|
|
|
</script>
|
2013-03-13 14:50:22 +00:00
|
|
|
|
</body>
|
|
|
|
|
</html>
|