· Cambiar idioma (Actualmente: Español)

Dos cambios a mi Emacs: tema misterioso y delimitadores arcoíris

Septiembre 26, 2015 00:00 -0500

Sobre el tema oscuro que estoy usando en Emacs y sobre cómo usar colores para no perderse entre paréntesis en el lenguaje de programación Scheme.

Figura 1

Figura 1. A la izquierda, tema claro predeterminado de Emacs 24.4.1. A la derecha, tema oscuro «Misterioso» activado.

Mi contacto con GuixSD y GNU Guile ha hecho que me interese más en usar GNU Emacs como entorno de desarrollo. Este editor de texto está diseñado para que la gente lo extienda con tan pocas restricciones que ya parece un sistema operativo completo por la cantidad de cosas que se pueden hacer con él: programar, navegar por la Web, leer correos, escuchar música... Con razón hay tanta gente que dice que vive en Emacs.

Emacs viene predeterminadamente con un tema claro (texto oscuro en fondo blanco). Para programar, este tema emite demasiada luz y me cansa los ojos muy rápido. Por eso lo primero que decidí hacer antes de empezar a usarlo en serio fue activar un tema oscurito. Afortunadamente, esta versión de Emacs que estoy usando (24.4.1) ya trae uno listo para usar. El tema se llama «Misterioso» (ver Figura 1) y se puede activar usando el comando M-x customize-themes, que abre un búfer con todos los temas disponibles.

Con el tema ya activado, el otro cambio que necesitaba es específicamente para ayudarme a programar en Guile, que es una implementación del lenguaje de programación Scheme. Una de las características superficiales de este lenguaje es el uso de paréntesis para encerrar partes sintácticas de un programa. Cuando se escriben expresiones compuestas —o sea siempre— el código puede terminar con un montón de paréntesis consecutivos que hacen difícil determinar a qué expresión corresponde cada uno de ellos. Por ejemplo, vea la última línea de este código:

;;; Ejemplo tomado del sitio Web de GuixSD
;;; http://git.savannah.gnu.org/cgit/guix/guix-artwork.git/tree/website/www.scm
;;;
(define (mkdir* directory)
  "Make DIRECTORY unless it already exists."
  (catch 'system-error
    (lambda ()
      (mkdir directory))
    (lambda args
      (unless (= EEXIST (system-error-errno args))
        (apply throw args)))))

Afortunadamente, Emacs tiene herramientas creadas específicamente para ayudar a manipular expresiones como si fueran bloques que se pueden mover de aquí para allá sin miedo a dejar paréntesis extraviados y sin emparejar. El manual de Guile recomienda instalar ParEdit para esto. Para mí, funciona muy bien.

Pero ParEdit no soluciona el problema de cómo notar visualmente dónde empieza y dónde termina una expresión en casos de anidamiento profundo, como se empieza a notar en el código de arriba. La solución, que encontré gracias a Chris Webber, es usar RainbowDelimiters, que es un modo de Emacs que permite asignarle colores a los paréntesis según su profundidad.

Sin embargo, después de instalar y activar RainbowDelimiters, noté que la paleta de colores usada predeterminadamente para los paréntesis, por lo menos sobre el tema oscuro, parecía más una degradación de un solo color que un arcoíris, como esperaría uno por el nombre de la herramienta. Así se veía:

Figura 2

Figura 2. Emacs con tema oscuro y RainbowDelimiters activado. Se muestra un procedimiento escrito en Guile Scheme. Los paréntesis son de diferentes colores, pero la diferencia es difícil de ver porque son colores poco saturados.

Pero esto es fácil de resolver porque en Emacs todo se puede configurar y acomodar a las necesidades propias. Con el comando M-x customize-group ENTER rainbow-delimiters-faces especifiqué los colores a mi gusto y ahora sí se ve el arcoíris que permite reconocer más fácilmente el inicio y el fin de cada expresión.

Figura 3

Figura 3. El mismo ejemplo de la Figura 2, pero esta vez con los paréntesis de colores diferenciables.

Por si le sirve a alguien, estos son los nombres de los colores que escogí para ocho niveles de profundidad:

  1. red
  2. magenta
  3. yellow
  4. green
  5. violet
  6. cyan
  7. black
  8. white smoke

Con estos cambios ya me siento más cómodo. Pero todavía me falta probar Geiser para mejorar mi instalación de Emacs como IDE para programar en Guile. En estos días lo pruebo.

Temas relacionados: