<%#-*- coding: utf-8 -*-%> <% 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) downloads_json = JSON.parse(File.open("../download_counts.json").read) rescue {} packages = (archive_json.keys & recipe_json.keys).sort.map do |pkgname| package = OpenStruct.new package.name = pkgname package.downloads = downloads_json[package.name] 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}" package.source = recipe["fetcher"] if package.descr =~ /(.*?)(\s*-\*-.*?)?\s*\[(\w+)\]\s*/ package.descr = $1 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" 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 when /\Alp:(.*)/ then "https://launchpad.net/" + $1 end end package end %> MELPA
  • Up-to-date packages built on our servers from upstream source
  • Installable in any recent Emacs using "package.el" - no need to install svn/cvs/hg/bzr/git/darcs etc.
  • Curated - no obsolete, renamed, forked or randomly hacked packages
  • Comprehensive - more packages than any other archive
  • Automatic updates - new commits result in new packages
  • Extensible - contribute recipes via github, and we'll build the packages
Latest build:

Current List of <%=h packages.size %> Packages (<%= packages.map(&:downloads).compact.inject(0) { |a,b| a+b } %> downloads to date)

<% packages.each do |package| %> <% end %>
Package Version Description Recipe Source DLs
<%=h package.name %> <%=h package.version %> <%=h package.descr %> recipe <% if package.source_url %> <%=h package.source %> <% else %> <%=h package.source %> <% end %> <%=h package.downloads %>

Installing

To add the repository put this before the call to package-initialize in your init.el file.

(add-to-list 'package-archives
  '("melpa" . "http://melpa.milkbox.net/packages/") t)

In Emacs < 24, you'll also need to explicitly include the GNU ELPA archive, which provides important compatibility libraries like cl-lib:

(when (< emacs-major-version 24)
  (add-to-list 'package-archives '("gnu" . "http://elpa.gnu.org/packages/")))

Please read about 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 your *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 inpackage-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 inpackage-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: These fixes are included in the melpa.el package.

There is a small bug in Emacs24’s package.el such that the dependency order comes out backwards. The problem is patched by some advice.

 (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.

Development

https://github.com/milkypostman/melpa

Contributions are welcome. Currently, the builder supports packages using git, subversion, mercurial, bzr, cvs, darcs and emacswiki.