I've been using emacs (and, on occasion, xemacs) as one of my editing tools of choice for a few years now. In that time I've written a small number of elisp (emacs' own lisp) packages. Below are ones that I'm not (too) ashamed to show to the world.

If you're looking for pointers for other emacs lisp packages you might want to take a look at melpa and the EmacsWiki.


5x5.el is a simple but annoying puzzle for emacs. Please note that this package is part of GNU emacs as of version 21.1.


avmmf.el provides a set of functions, and an interactive function, for dealing with the proposed AVM microformat.


become.el provides a set of interactive functions that allow for easy transformation of the current buffer.


I once saw a "binary clock" running on a friend's Windows machine and thought to myself "emacs could do that too". binclock.el was the result.



boxquote.el provides a set of functions for using a text quoting style that partially boxes in the left hand side of an area of text, such a marking style might be used to show externally included text or example code.

| The default style looks like this.

A number of functions are provided for quoting a region, a buffer, a paragraph and a defun. There are also functions for quoting text while pulling it in, either by inserting the contents of another file or by yanking text into the current buffer.



cheat-sh.el provides a simple Emacs interface for looking things up on cheat.sh.



constellations.el provides a constellation abbreviation lookup tool. I can never remember the abbreviations for most constellations so, when I'm writing my observing logs I find this little tool handy — saves me from having to remember.


csrclr.el provides a command that sets the cursor to a different colour depending on the environment. I find this especially handy if I open a read-only buffer.


dad-joke.el is a terrible bit of elisp code inspired by seeing https://goo.gl/NXTJXk and also with https://goo.gl/ji4Viv in mind.



An emacs implementation of ddate(1). All hail discordia.


equinox.el provides two support functions and one interactive command for displaying the date and the number of days to the next equinox or solstice.


expando.el provides a simple tool for expanding macros into a different window so they can be quickly and easily checked and read.


festival.el provides a simple interface into the festival speech synthesis program from emacs lisp.

It was only once I'd more or less finished writing the first version of this that I noticed that a festival.el comes with festival itself (yeah, I know, I should spend more time examining the contents of software packages). As it is, I decided to press on with this anyway because I'd done a couple of different things and, more importantly, I was having far too much fun.


fscroll.el extends `scroll-up' and `scroll-down' so that the cursor is positioned at the very end/start of the buffer once you've scrolled as far as you can.


garble.el is an emacs interface for garble, a command line utility for interfacing with a Garmin GPS unit.


handyurl.el is a package that provides a simple method of popping up a list of URLs and allowing the selection and insertion of an URL into the previous buffer.

Note that this code then went on to inspire quickurl.el, which then went on to be part of GNU emacs itself.


icmp-info.el provides a function for looking up the meaning of ICMP type/code combinations.


insert.el contains commands for quickly and easily inserting useful things into the current buffer.


itch.el provides a tool for quickly and easily getting back to your *scratch* buffer (with optional erase).


lbdb.el is an emacs interface into the Little Brother's Database


macdob.el provides a simple command that reports on a Mac's "date of birth". That is, it tries to report when the OS on the machine was first set up.


moving.el provides some extra commands for moving around a buffer.


mutt-alias.el provides a couple of functions for looking up and inserting the expansion of mutt mail aliases.


I often mention the names of newsgroups in mail or news postings and it's pretty tedious typing out their names again and again. I've tried using things like abbrev to speed this up but have found that that isn't the right solution.

Given that almost all the groups I mention are groups I subscribe to it seemed that ngn.el was a reasonable solution. It provides a couple of functions for inserting a group name into a buffer using a completing read, the lookup list for that completing read is taken from ~/.newsrc.


nuke-buffers.el provides a command that aims to kill as many buffers as possible without causing any work to be lost or any important buffers to be lost.

CAUTION: This works based on my own idea of what is "safe"!


nukneval.el is a little utility function I wrote to help out when writing elisp code. I use it to unbind function and variable definitions in an elisp buffer and to then reevaluate the buffer.


numbers.el is a little wrapper around numbersapi.com that can be used to display maths information and trivia about numbers.



obfusurl.el provides a command for obfuscating an URL in written text such that the URL itself won't give the reader a clue to what it's pointing at but it can still be used as an URL.

This is useful if the URL itself could be a spoiler when you want it to be a surprise.



I wrote parenface.el as an experiment in "hiding" parenthesis in lisp code. It is often said that lisp programmers simply don't notice the parenthesis (it's my experience that this is true) and it was once suggested in comp.lang.lisp that you could use an editor to colour the parens so that they are almost invisible and a lisp programmer wouldn't notice.

Boris Schaefer provided the main part of the code in a post to comp.lang.scheme and I tidied it up and "packaged" it.

PLEASE NOTE: I'm deprecating this code in favour of the much nicer paren-face.el by @tarsius.


post.el is an emacs mode directed at people who use emacs as their mail editor when using mutt. I'm not the main author of post.el but I did contribute a whole bunch of code from a similar mode I use myself.


protocols.el provides code for reading the content of /etc/protocols. It also provides a command for doing protocol lookups (something that might be useful when you're having a read of log files).



qrencode.el provides a simple Emacs interface for turning text into text-based QR codes, via qrenco.de. Originally written as a bit of a lunchtime hack after this tweet.


quickurl.el provides a method of quickly getting at URLs you often quote. It allows you to do it by word expansion (a little like abbrev) or by selecting from a menu.

Please note that this package will be part of GNU emacs from version 21.1 onwards.


sawfish.el is a package for working with sawfish. As well as providing a programming mode for editing sawfish config files (nothing clever, it simply derives from emacs-lisp-mode) it also allows direct interaction with the window manager from the buffer.


services.el provides code for reading the content of /etc/services. It also provides a command for doing service lookups (something that might be useful when you're having a read of log files).



setup-compile.el provides a command that makes it easy to quickly set a sensible compile command for the given buffer. Essentially it checks to see if there's a Makefile in the directory and, if there isn't, it builds a command that should do the job.


slashdot.el is some code I wrote so that I can view the slashdot headline database I build with slashcache.lisp.


slstats.el provides commands that make it easy to load and view the basic stats about the Second Life grid and its economy.



smartsig.el is a package that provides an adaptive signature facility to a news/email editing mode in emacs. Unlike many adpative signature tools which work on who you are sending the text to, smartsig works on the content of your text.


spamprobe.el contains some utility functions that used to help me keep track of how well spamprobe was doing at detecting spam.


thinks.el is a little bit of silliness inspired by the think bubbles you see in cartoons. It allows you to

. o O ( insert text that looks like this )

into a buffer. This could possibly be handy for use in email and usenet postings.

Note that the code can handle multiple lines

. o O ( like this. That is, a body of text where the number of characters )
      ( exceeds the bounds of what you might consider to be a acceptable  )
      ( line length (he says, waffling on to fill a couple of lines).     )

You also have some control over the look of the bubble.



tld.el is a package that allows you to lookup TLDs and country names.


unbind.el contains a handful of utility functions I use for unbinding symbols when mucking about in emacs.


uptimes.el provides a simple system for tracking and displaying the uptimes of your emacs sessions. Simply loading uptimes.el from your ~/.emacs file will start the tracking of any session.



webinfo.el provides a simple command that displays information about a given web server.


At one time I was helping to develop an Xbase mode for emacs. You can find out more about xbase.el at its home page and you can download the latest version of the file from CVS.

Page last modified: 2017-07-09 12:18:30 UT
Dave Pearson <davep@davep.org>
Valid XHTML 1.1 Valid CSS