1 min read

ALE: arcfide's line editor

ed(1) meets Emacs implemented in APL, a la Acme. ALE is a line editor that I have created because I can.

ed(1) meets Emacs implemented in APL, a la Acme


ALE is a line editor that I have created because I can. One of my all time favorite editors to use in the classic Unix ed(1) editor. Line editors are, in my opinion, grossly under-appreciated for their workflow and power as interactive editors. With that said (or should I say, sed?), the pre-eminent example of this in the modern computing world, ed(1), does have a few issues that I felt I could improve upon.

Furthermore, I was tired of the infrastructure setup that is required in order to use a line editor inside of modern operating systems. They aren't convenient to use by default in GUI environments, and there isn't a good, clean, fast way to "just get" ed(1) on Windows, because so much of ed(1)'s design relies on having the wider UNIX ecosystem available to it. This means, really, that if I wanted to use ed(1) on Windows, I was more or less resigned to also installing a rather heavyweight UNIX environment as well. This greatly interferes with the simplicity of the editor itself, as well as integration.

Since almost all of my work is done with APL, I realized the potential value of having an easy to use line editor that was written in a deeply integrated way with the APL language. APL is itself a pretty good textual editing language, and by simply creating a "dictionary" of editing commands, I could leverage the power of the existing Dyalog APL session to do almost all the heavy lifting for me.

The result is an editor that retains the benefits of the ed(1) editor with some noticeable improvements in flexibility, while simultaneously making the editor itself simpler, easier to maintain, and amenable to customized extensions, macros, and other composability and programmability benefits usually only seen in more complex editors, all with basically zero real additional complexity.

In short, ALE is a programmable, composable, but simpler and more streamlined, syntactically consistent replacement for the venerable ed(1).