whatever I've been playing around with lately

Clojure Programming in Acme

Today I finally got round to trying out something i’d been meaning to look into for nearly a year, and seeing as clojure and editors seems to be a topic again I thought it would help add some diversity.

Acme is an editor unlike any other. It was designed by Rob Pike for Plan9 (although it’s available for unix-like systems using Plan9 from User Space).
It’s designed to be an editor and shell. Unlike emacs and vim which encourage you to keep your hands on the keyboard, acme requires use of a 3-button mouse, and it supports something called mouse chording. A rough guide would be:

Button 1: Select Text

Button 2: Execute Command

Button 3: Search/ acquire text (or load file)

Button 1-2 Cutting

Button 1-3 Pasting

Button 1-2,3 Cut+Paste (Copy)

My introduction to acme was via Russ Cox’ video, which is a great starting point:

You can probably summarise the whole thing by saying that in acme – text is data. Once you type some text, it can be saved into a file, executed as a command or passed as an argument to a command.

Obviously this resonated with the clojure part of my brain. It occured to me that being able to select some clojure code in acme and evaluate it would make acme a great editor for clojure.

Thanks to nrepl the job is really quite easy. I wrote a very very simple nrepl client in go. You can find it on my github

All it does is read clojure code from stdin and send it to nrepl. This is really all there is to do. In acme you just need to type your command in one of the scratch areas:

Take a look at the below screenshot. You can see:

In yellow: selected clojure code with mouse button 1

In red: selected command with mouse button two

Release the buttons and the window in the bottom right contains the evalutated code