If you’re using the Emacs version that you installed using
homebrew or similar, you might be missing the modules needed to use
vterm as your terminal emulator. The obvious question is what is
vterm, and why you would want it in your Emacs?
The description of the
libvterm package that is the core of
An abstract C99 library which implements a DEC VT100/VT220/VT320 or xterm-like terminal emulator. It doesn’t use any particular graphics toolkit or output system, instead it invokes callback function pointers that its embedding program should provide it to draw on its behalf. It avoids calling malloc() during normal running state, allowing it to be used in embedded kernel situations.
But we want a plain English explanation, which is: it’s a really performant terminal emulator, that is capable of running everything you’d expect - and it’s what NeoVim uses for its terminal mode.
The main reason to use
vterm instead of
ansi-term, or other terminal modes in Emacs is performance. It’s immediately obvious how much faster it is than the other implementations, in my tests rendering text was up to to two orders of magnitude faster. It also seems to handle bigger outputs and scrollback much better.
So how do we use it? To do that, we need to install
emacs-libvterm package: https://github.com/akermu/emacs-libvterm
Here’s how you can compile Emacs to include the modules required to use the package:
wget https://ftpmirror.gnu.org/emacs/emacs-26.3.tar.gz tar xf ~/Downloads/emacs-26.3.tar.gz cd ~/Downloads/emacs-26.3 ./autogen.sh ./configure --with-modules make -j`nproc --ignore 2` # optional, if you want to install the new compiled version globally sudo make install
The above code is pretty straight-forward: it downloads and extracts Emacs 26.3, prepares it for compilation, and then finally compiles it.
One part worth elaborating about is the compilation step: using the
-j flag enables us to specify how many cores you want to use for running the command, and running
nproc returns the total number of threads you have on your machine (for example, the laptop I wrote this post on has 6 cores and 12 threads). Telling
nproc to ignore 2 threads makes sure that when you’re compiling,
make doesn’t use all of your CPU resources and render your machine practically unusable until it finishes.