Posts
-
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) -
Declutter M-x with read-extended-command-predicate
This is another article inspired by my recent cleanup of Prelude and my personal Emacs config, following the one on repeat-mode. I’ve been going through the Emacs 28-30 changelogs looking for features I had overlooked, and this small one from Emacs 28 turned out to be a real gem.
Ever noticed how
M-xshows you every command, including ones that make no sense in your current buffer? Org commands while editing Ruby, Magit commands in a shell buffer, that sort of thing. It’s not a huge deal if you know what you’re looking for, but it adds noise to the candidate list – especially if you’re using a completion framework like Vertico or Ivy that shows everything at a glance.Emacs 28 added a simple way to fix this:
Read More(setq read-extended-command-predicate #'command-completion-default-include-p)
Subscribe via RSS | View Older Posts