Endless Parentheses

Concise ramblings on Emacs productivity.

Prettify your Apostrophes

Now that you’ve started your journey on the Typography Express by using round double quotes, take a seat and extend that to your apostrophes as well. This snippet binds a round apostrophe to the ' key, but also inserts a pair of single round quotes with a prefix. [...]

Visit Directory inside a Set of Directories

Almost every directory I work with, is either directly under “~/Dropbox/” or under “~/Dropbox/Work/”. However, I never actually visit these two directories, only the directories inside them. The number of possible targets for find-file is approaching the outer borders of two-digit land, so there's no hope for my brain to remember registers for all of these. [...]

Paradox 2.0 Released: Execution hook, Interface improvements, Async Execution

I've just released Paradox version 2.0. If you've been following the blog, you already know this features the ability to do background upgrades. Below is a list of other features. [...]

New in Emacs 25.1: comment-line

After the previous post, I got in touch with the nice fellas at emacs-devel about including comment-line in Emacs. Understandably, there was a wee bit of concern with using up one of the oh-so-important C- binds, so it's been put under C-x C-; for now. [...]

View the Change-Log for packages before upgrading, with Paradox

Paradox has had this feature for a while, but I've never blogged about it. When you're in the Packages Menu, and you're about to upgrade your packages with the always reliable U x, do you ever wonder what's actually changed in them? When I do it, there's usually something between 5 and 20 of them just waiting for me to answer y, but rarely do I see any actual difference in the new versions. [...]

New on (M)Elpa: speed-of-thought-lisp

When your computer is feeling slow and you decide to upgrade it, where do you start? You start by finding the bottleneck, of course. That awesome CPU won't do you any good with crappy RAM disk. The same logic holds for your coding skills. [...]

Implementing comment-line

Why we don't have a comment/uncomment-line function is beyond me. While we fix that, might as well make it as complete as possible. [...]

New in Emacs 25.1: Easily install multifile package from a directory

When developing a package, package-install-from-buffer is a very useful command. It installs the current buffer as an Elpa package, so you can test installation, byte-compilation, autoloading, and activation, all in one fell swoop. If your package has multiple files, however, it gets a little more complicated. [...]

Be a 4clojure hero with Emacs

This year I made it my resolution to learn clojure. After reading through the unexpectedly engaging romance that is Clojure for the Brave and True, it was time to boldly venture through the dungeons of 4clojure. Sword in hand, I install 4clojure.el and start hacking, but I felt the interface could use some improvements. [...]

Automate a package's group and version number

One month ago, I officially announced Names, a package that writes your elisp namespaces for you. Today, I go into other ways in which Names can help. Think of these as delicious Easter eggs hidden inside the shabby wood cabin that is the define-namespace macro (which is built on top of an underground Machiavellic engine of infinite cogs and spikes, but that's beyond the point). [...]

What's a defconst and why you should use it

Any Emacs package developer worth their salt knows the difference between a defvar and defcustom. These two comprise the vast majority of variable definitions in Elisp code, but there's a third child, the defconst. While regular variables and customizable variables only really differ when it comes to Emacs' customize system, constants differ in loading logic in a subtle but important way. [...]

Asynchronous package upgrades with Paradox

Two months ago, I listed a few big things I was looking forward to for Emacs 25. I knew I was being unrealistically optimistic to mention concurrency in Elisp, but there was a point behind it. It bothered me a lot that I had to get up and go for a coffee whenever I upgraded more than a few packages, and asynchronous upgrades were the only way I saw of fixing that. This Christmas, as promised and well ahead of schedule, I've implemented asynchronous execution into Paradox, thanks to the fantastic async library. [...]

Where do YOU bind expand-region?

Expand region is one of those packages that deserves to be built-in. It's so simple and useful it makes Emacs worthwhile all by itself. Fundamentally, the entire package boils down to a single command, expand-region, which incrementally increases the selected region by semantic units. So deciding where to bind this command is an important decision. [...]

New on Elpa and in Emacs 25.1: let-alist

let-alist is the best thing to happen to associative lists since the invention of the cons cell. This little macro lets you easily access the contents of an alist, concisely and efficiently, without having to specify them preemptively. It comes built-in with 25.1, and is also available on GNU Elpa for older Emacsen. [...]

Introducing Names: practical namespaces for Emacs-Lisp

A little over a month ago, I released a package called Names, designed for mitigating Emacs' namespace issue. Before I even had a chance to announced it, it made a bit of a splash on r/emacs, which I've taken to mean that people are interested. I've been holding off on this post until I had a couple of Names-using packages under my belt, so I could actually speak from experience as opposed to expectation, and that's finally the case. [...]