Emacs Lisp

The GNU Emacs Lisp Reference Manual is a very enjoyable read and will prepare you for everything you need to contribute to any Emacs package.

We have some suggested hacks for Emacs Lisp that you may enjoy.

If you want a playground to exercise your newly found Emacs Lisp muscles, consider forking @fommil’s port of 99 problems and re-implementing the answers.


Try setting the following and reading the documentation of what each does (recall you can do this with C-h v over any variable in Emacs)

(setq debug-on-error t
      debug-on-quit t
      ensime-log-events t
      ensime--debug-messages t)


First, clone the git repo hosted at If you pick up a ticket, please comment on it to let us know so that we can help (and also to avoid overlapping with somebody else). Feel free to ask questions on the github issue tracker or

The .drone.yml describes what our CI does and this can be followed for your local development.

You must install Cask, the excellent build tool for Emacs Lisp projects and then initialise the repository and install the dependencies with:

cask pkg-file
cask install


It all starts with a test.

The old tests are in ensime-tests.el but we want to migrate to use ert (see test/ensime-emacs-test.el) and ecukes (see the features directory).

To run the old tests, run the hacky test/ script.

To run the new, preferred style, tests, type cask exec ert-runner and cask exec ecukes.


If you think the client side is suffering performance problems, use M-x profiler-start, edit some code and experience the slowdown, M-x profiler-report. Once you find the cause, you can stop profiling with M-x profiler-stop.