The Uira text editor

Uira is a text editor I made as a fun project. I use it as a challenge to myself to make a simple, usable text editor within one month. It turned out quite suitable for my own writing needs.

Uira is written in Python, currently unoptimized. Most features are implemented in the most naïve way possible. Each text buffer is represented as an array of characters, and any edit simply creates a new array in the history. Whenever a buffer changes, the editor simply re-typesets the entire passage, and displays it on the screen. Syntax highlighting is only regex. Autocomplete just gets all word-like strings in the file and sorts them by decreasing frequency. This is surely slow for text files longer than 300 lines, but it turns out to be perfectly fine for small files.

Because I wrote Uira from scratch, I can add any feature to it in Python, without the need to look up the Emacs manual for Elisp or API usage. I haven't added any support for extensions (which may require a scripting language such as Lua), but now the editor is simply extensible by editing the code itself, taking advantage of the extensibility of the host language. I added two features, which I like a lot: The de Bruijn leap allows me to jump to any character on the screen, using three-letter coordinates based on de Bruijn sequences, and templates with holes let me insert a predefined template with “holes” and jump to each hole to insert some text (such as the function name, argument list, and function body of a function definition).

I don't expect Uira to be used by anyone other than me. But developing, using, and extending it has been very fun, and I might switch to it as my primary working editor instead of Emacs. I have already set my git editor to Uira, and now I write every commit message with it. I spent a few sleepless early mornings perfecting it, but the result is definitely worth the work. Due to my personal plans, I might not be able to work on it for the next few months, but I absolutely would like to continue improving it early 2025.