First you have to excuse the awful title, but a cinephile cannot resist the temptation of an easy reference when the Emacs package he is going to write about is called Vertico.
Daniel Mendler has become such a prolific contributor to our Emacs world. His
work with Omar Antolín Camarena and Clemens Radermacher (to name a few!) has
been showing me how much can be done with little improvements on Emacs default
completion system. Actually, “little” is a bit unfair to them because they have
been putting a lot of effort in their packages and contributions. What “little”
stands for instead is the amount of code I had to add to my init.el
to get a
superb completion UI. I combine Vertico with
Orderless and I didn’t have to do much
beside this after the installation via package.el
:
(require 'orderless)
(setq completion-styles '(orderless))
(require 'vertico)
(vertico-mode 1)
Well, to be fair I did something more, like binding vertico-exit-input
to
C-j
and setting orderless-matching-styles
to orderless-regexp
,
plus I am using Daniel’s consult to extend
Vertico capabilities, but I guess you see where I am going by now. The
combination of small packages makes for a modular system that I can interact
with more easily. For instance, Daniel can go berserk and forget about the
lovely 500 lines of code limit he set himself to with Vertico. Why should
I trust this criminal mind, then? I can switch to
Selectrum and keep using Consult and
Orderless with it.1
The beauty of Vertico is that it is not about reinventing Emacs completion once again. By sticking to Emacs built-in commands and completion facilities, Vertico succeeds in staying close to the source without losing the chance to improve on it. On the one hand, moving to Vertico means it is up to the user to configure extra niceties. That is what packages like Consult, Orderless, Embark, and Marginalia aim for, but again, the user is in charge of the right setup for their needs, while a solution such as Helm offers a lot of functionalities out of the box. On the other hand, tools such as Helm, Ivy, and Selectrum are more complex than Vertico and may bring in code you do not necessarily need, which is something even Emacs itself doesn’t shy away from.2
I find it amazing that a seemingly simple and yet so central feature in my everyday Emacs such as the completion system has pushed people to create all these amazing packages. It seems to me that Helm has helped pave the way for a more powerful experience when it comes to completion and that by studying Emacs internals carefully one can achieve similar benefits with a different approach. As humble end-users of all this we really are a lucky bunch.