Posts
-
Essential Structured Navigation and Editing Commands
Most of us learn Emacs one motion at a time –
C-ffor a character,M-ffor a word,C-nfor a line. Useful, but those commands don’t know anything about the structure of your code. Emacs has a whole other family of commands that operate on balanced expressions and definitions instead, and once they become muscle memory they’re hard to give up.Lisp hackers know these commands intimately – they’re the foundation paredit builds on. What’s less appreciated is that they work in plenty of other languages too. I’ve been leaning on them heavily while building neocaml, my tree-sitter package for OCaml programming, so I’ll use OCaml for the examples here. The commands themselves are general, though, and most of what follows applies to any structure-aware major mode.
Read More -
Batppuccin and Tokyo Night Themes Land on MELPA
Quick heads-up: my two newest Emacs themes are now on MELPA, so installing them is a plain old
package-installaway.- batppuccin is my take on the popular
Catppuccin palette. Four
flavors (mocha, macchiato, frappe, latte) across the dark-to-light
spectrum, each defined as a proper
defthemethat plays nicely withload-themeand theme-switching packages. - tokyo-night is a faithful port of folke’s Tokyo Night, with all four upstream variants included (night, storm, moon, day).
Both themes come with broad face coverage out of the box (e.g. magit, vertico, corfu, marginalia, transient, flycheck, doom-modeline, and many, many more), a shared palette file per package, and the usual
*-select,*-reload, and*-list-colorshelpers.Installation is now as simple as you’d expect:
(use-package batppuccin-theme :ensure t :config (load-theme 'batppuccin-mocha t)) (use-package tokyo-night-theme :ensure t :config (load-theme 'tokyo-night t))If you’re curious about the design decisions behind these themes, I’ve covered the rationale in a couple of earlier posts. Batppuccin: My Take on Catppuccin for Emacs explains why I bothered with another Catppuccin port when an official one already exists. Creating Emacs Color Themes, Revisited zooms out to the broader topic of building and maintaining Emacs themes in 2026.
Give them a spin and let me know what you think. That’s all I have for you today. Keep hacking!
- batppuccin is my take on the popular
Catppuccin palette. Four
flavors (mocha, macchiato, frappe, latte) across the dark-to-light
spectrum, each defined as a proper
-
Stealing from the Best Emacs Configs
Good artists borrow, great artists steal.
– Pablo Picasso
After spending the past couple of weeks updating Prelude and my personal Emacs config, I figured it wouldn’t hurt to see what the competition has been up to. I hadn’t done a proper survey of other people’s configs in years, and the Emacs landscape has changed quite a bit since the last time I looked.
So I went through Doom Emacs, Purcell’s emacs.d, Centaur Emacs, Prot’s dotfiles, and a handful of others. Here are some of the most interesting things I found – settings and tricks that I either didn’t know about or had forgotten about entirely.
Read More -
The Many Faces of flet: cl-flet, cl-labels, and cl-letf
Way back in 2013 I wrote about the deprecation of
fletand hownofletcould fill the gap. Thirteen years later, it’s probably time for a proper overview of what replacedfletincl-liband when to use each option.Emacs Lisp doesn’t have a built-in way to define local functions (the way
Read Moreletdefines local variables), socl-libprovides several macros for this. If you’ve ever been confused bycl-flet,cl-labels, andcl-letf– you’re not alone. The naming doesn’t make the distinctions obvious, and the documentation is a bit dry. Let’s try to fix that. -
Live Regexp Feedback with minibuffer-regexp-mode
This is the third article in a small series inspired by my recent cleanup of Prelude and my personal Emacs configuration, following the ones on repeat-mode and read-extended-command-predicate. I’ve been going through the Emacs 28-30 changelogs for features I had ignored so far, and this one from Emacs 30 immediately caught my eye.
Writing Emacs regexps has always been a bit of a dark art. Between the double-escaped backslashes and the various group syntaxes (
\(...\),\(?:...\),\(?N:...\)), it’s easy to lose track of what you’re actually matching. You type something intoquery-replace-regexp, press RET, and hope for the best.Emacs 30 added
minibuffer-regexp-mode, a minor mode that gives you live visual feedback as you compose a regexp in the minibuffer:Read More(minibuffer-regexp-mode 1)
Subscribe via RSS | View Older Posts