I was working on the terminal output for a Common Lisp logger, and I realized that SLIME does not interpret ANSI escape sequences.
This is not the end of the world, but having at least colors would be nice. Fortunately there is a library to do just that.
First let us install the package, here using
use-package
and
straight.el
.
(use-package slime-repl-ansi-color
:straight t)
While in theory we are supposed to just add slime-repl-ansi-color
to
slime-contribs
, it did not work for me, and I add to enable the minor mode
manually.
If you already have a SLIME REPL hook, simply add (slime-repl-ansi-color-mode 1)
. If not, write an initialization function, and add it to the SLIME REPL
initialization hook:
(defun g-init-slime-repl-mode ()
(slime-repl-ansi-color-mode 1))
(add-hook 'slime-repl-mode-hook 'g-init-slime-repl-mode)
To test that it works as intended, fire up SLIME and print a simple message using ANSI escape sequences:
(let ((escape (code-char 27)))
(format t "~C[1;33mHello world!~C[0m~%" escape escape))
While it is tempting to use the #\Esc
character, it is part of the Common
Lisp standard; therefore we use CODE-CHAR
to obtain it from its ASCII
numeric value. We use two escape sequences, the first one to set the bold flag
and foreground color, and the second one to reset display status.
If everything works well, should you see a nice bold yellow message: