I am nicferrier, a hacker trying to do interesting things. I use Emacs every day all the time. Here's my blog.

I’ve used Emacs in some form since 1989. And GNU-Emacs every day, all the time for the last 15 years. I’ve done extensive Java, C, Python, ActionScript and Shell development inside Emacs, as well as a bunch of other languages.

The last couple of years I’ve started to look at ELisp as a practical language (since it had closures basically) in which I might one day do all my work.

About me

I work for an as yet unnamed Bank as a Technical Architect. I think Technical Architect is a stupid job. Really what I do is help people understand how to get software live.

I maintain the marmalade Emacs package repo and I have ported it to Elnode here. Please make a GitHub issue for any problem with marmalade.

I’ve started the EmacsBites, a series of screencasts about programming in Emacs and EmacsLisp. I would like to help more people learn Emacs as a second language so they can build tools for themselves. I am struggling to keep this going.

I am the author and maintainer of Elnode, the Emacs Async Webserver; more information about that in this page.

I hang out on #emacs a lot, I’m listed here and here. I wish that both of those references could be auto-generated.

I am currently paying for the EmacsWiki to be hosted on my servers. This is after AlexSchroeder has been doing it for years.

Check out my blog which has lots of stuff about Emacs.

Things I do with Emacs that are interesting

I live in Emacs. Like most people who do that I do a few interesting things. It’s hard to remember to write them down here. I try to.

Encrypt my config

I store lots of customizations in my ‘custom-file’ like this:

     (setq custom-file

this means that Emacs asks me the password for the file when I start Emacs. The password is then cached and I can use it for all sorts of secure stuff. As long as I have a decent screen lock I should be very secure.

Ubuntu forces you to use gnupg-agent for this

The variable ‘epa-file-cache-passphrase-for-symmetric-encryption’ used to be enough for this to work. Sadly it doesn’t anymore, at least on Ubuntu.

You now need to use package: ‘gnupg-agent’. Here’s my Emacs start script:


eval $(gpg-agent --daemon)
$(dirname $0)/emacs-24-3/bin/emacs

# End

When I want to start Emacs in Ubuntu I use ‘ALT-F2’ and that script.

Use Emacs for Google Talk

I started talking to people who use Google Talk so I started to use JabberEl and GoogleTalk - it’s a breeze actually.

Use an IRC Bouncer in EmacsLisp

I wrote ShoesOff because an IRC bouncer in EmacsLisp was obvious. I use it a lot.

I run a laptop at home with ShoesOff running all the time.

I have a NAT forwarded port on my home router to the bouncer port on the laptop so I can connect to ShoesOff even when I am not at home.

My home connection is reliable enough that this is rarely a problem.

Frame size

Changing font size is a pain so I wrote FrameSize, it’s now a major part of my workflow.

Read my Email under Emacs

I’ve read my Email in Emacs since 1999 and I have always used my own email client which has changed over time as email has changed.

Right now I use an IMAP free solution but am considering switching to an IMAP fetch solution.

My current MUA is Emacs Maildir

Building Emacs from source

I mostly always build Emacs from source (though I think the emacs-snapshot packages are great) so I use this page to track what I need to do.

Here is how to get a git clone of Emacs these days:

git clone --depth 1 git:// -b emacs-24

You can also clone these tags:

Elnode: an asynchronous HTTP server for Emacs

... or node.js for Emacs

Elnode is an asynchronous TCP server handling HTTP.

Elnode is in the marmalade repository

As of now Elnode is functional. I am starting to write things with it:

Other stuff I am considering:


Creole is a Wiki markup language very like the one used here on EmacsWiki.

I develop and maintain the EmacsLisp version of a Creole parser and HTML exporter.

We are using Creole to develop Elwiki, an EmacsWiki engine in EmacsLisp run with Elnode.

Emacs in a screen terminal: colors

I do some remote pair programming inside screen. I would like to use emacs. Standard colors are too difficult for me to read (my eyes are going!).

vim has the very nice:

set background=dark

which turns up the brightness on dark font faces. According to #emacs we have no equivalent.

So I wrote one:

(defvar dark-background nil)

(defun toggle-dark-background ()
  (let ((difficult-colors
         '("red" "blue" "medium blue")))
     (lambda (face)
       (and (member (face-attribute face :foreground)  difficult-colors)
            (set-face-bold-p face (not dark-background))))
  (setq dark-background (not dark-background)))

This toggles bold on the dark ones, which I think is all the vim thing is doing.

Project occur

Everyone needs a project occur. I have a good one for elisp inside Elpakit but I do a lot of webapp programming that isn’t Elisp exclusive so I need a more general one.

This page details my latest attempt at this.

Config and Customize

This page describes how I do my config which is somewhat interesting for a wierd section of the population who are obsessed with it.

Packages For Config - Small, Portable Init Files

Another interest of mine is achieving portable Emacs config. My plan is to achieve this through use of packages.

The idea is to:

This gist shows my self installing Emacs config except for the customizations. The customizations are insecure because they contain passwords and such, hence the need for encrypted packages.

Solving the problem of what is machine specific and what is not is hard.

Gravatar from Emacs

The image above is my Gravatar. It’s a useful service that ties an email address to an image, so if someone gives you an email you can maybe find a picture of them.

You need to hash the email to generate the url though, here’s how in EmacsLisp:

(print (md5 (downcase "")) (current-buffer))

List of various other ELisp bits and pieces

I’ve done quite a few other packages for Emacs, most are on github but check these out:

And some other stuff I haven’t packaged and probably never will:

Emacs under Mercurial

I used to maintain a mercurial copy of the emacs bzr repo at bitbucket.

here is the update script I used.

I no longer maintain that, people weren’t interested.