%% MELPA [ [Packages](#current-list-of-packages) ] [ [Installing](#installing) ] [ [Known Issues](#known-issues) ] [ [Updating Packages](#updating-packages) ] [ [Development](#development) ] *MELPA* or *Milkypostman's ELPA* or *Milkypostman's Experimental Lisp Package Repository* if you're not into the whole brevity thing. > a repository for development versions of Emacs packages (hot from the repo). **Last Update:** *<%= Time.now.strftime("%Y.%m.%d %H:%M") %>* ## 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 else stack[-1] << tok end end return stack[-1][-1] end headers = ["Package", "Version", "Description"] data = parse(File.open("../packages/archive-contents").read)[1..-1] data.map! do |row| [row[0], row[1][0], row[3..-2].join(" ")] end data.sort! colwidth = [0,0,0] 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. (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 I ahve created a package that will allow you to enable only certain packages or exclude certain packages. You can install the package 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: `melpa-package-enable` : List of MELPA packages to enable. Empty list enables all packages. `melpa-package-exclude` : List of MELPA package to exclude. This list trumps those specified in `melpa-package-enable`. ## 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*. (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*. (defadvice package-compute-transaction (before package-compute-transaction-reverse (package-list requirements) activate compile) "reverse the requirements" (setq requirements (reverse requirements)) (print requirements)) (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.