Emacs - Personalizando el mode line

Publicado el Jueves, 6 de agosto de 2015

En Emacs existe el Mode Line, una barra que describe lo que está pasando en el buffer actual. Por defecto, la línea tiene un formato bastante gris con información que puede o no sernos útil:

Emacs Mode Line por defecto

Los primeros guiones pertenecen al character set, seguidos de unos asteriscos si el archivo tiene cambios que no guardamos, nombre del buffer, posición, número de línea, información de los modos, etc. En general por lo menos en mi caso no le daba mucha importancia, más allá del nombre del archivo que estaba editando.

Hasta ahora lo único que le había agregado a mi Mode Line era Nyan Mode. Que de todas formas no es que se lo haya agregado, simplemente agregué el modo y el querido Nyan Cat paseaba por mi línea de modos a medida que avanzaba o retrocedía en un archivo.

Investigando un poco por Internet sobre formas de personalizar esta parte de Emacs para que me fuera un poco más útil, me encontré con un post de Amit Patel y su personalización:

Emacs: custom mode line - From Amit’s Thoughts

Me gustó bastante porque además de mostrar información útil de manera más visual, también usa Nyan Mode. Así que usé su código como plantilla y empecé a modificarlo hasta que quedó a mi gusto.

Cambié colores, tamaños y dejé de mostrar algunas cosas. El número de línea por ejemplo no me parece útil tenerlo en la barra de Mode Line porque en los archivos de código ya lo tengo activado por cada línea. También cambié de lugar el Nyan Cat para que se vea aunque tenga el frame dividido en varias ventanas (en Emacs el frame es lo que cualquier usuario llama "ventana" y la ventanas son divisiones dentro del frame).

A la izquierda quedó el directorio y nombre del archivo siendo editado. También cuando el archivo tiene cambios sin guardar aparece un asterisco rojo sobre fondo blanco. En el medio información de control de versiones, el modo mayor que estoy usando, Nyan Cat, y después los modos menores activados sobre el buffer.

Así quedó visualmente:

Emacs Mode Line personalizado

Y pueden encontrar el código en GitHub.

Es otra cosa interesante en la que se puede experimentar y meter mano en Emacs. Un comando que usé mucho fue eval-buffer. Cuando estamos editando un buffer con código Elisp, podemos usar eval-buffer para que Emacs evalúe el código, y en caso de ser algo que afecte el comportamiento del editor de texto, los cambios se ven en el momento. Por eso mientras iba probando meter mano en el archivo modeline-custom.el, ejecutaba eval-buffer a cada rato para ver lo que cambiaba o rompía.

Espero que les haya servido el post, aunque sea para tomar en cuenta la posibilidad de meterle mano a sus Mode Lines. Recuerden que los comentarios están abiertos si precisan cualquier ayuda con Emacs, prometo responder dentro de mi reducido conocimiento del tema.

8 comentarios en este post

Feed de comentarios
  1. Avatar

    Osvaldo 8 agosto. 2015 - 01:14

    Muy buen dato 😀 Vengo de a poco personalizando mi configuración de emacs a medida que lo uso, así que sumaré esto a la lista de cambios pendientes.
    Gracias.

    • Avatar

      Fernando 10 agosto. 2015 - 22:14

      Buenísimo, yo recién después de un tiempo de usar Emacs empecé a darle un uso útil a Mode Line, así que genial que lo vayas adaptando desde un principio.

      ¡Saludos!

  2. Avatar

    Matías Croce 11 agosto. 2015 - 17:47

    Interesante la elección de colores. Te basaste en algún tema que se pueda encontrar por ahí?

    Desde hace un tiempo vengo usando powerline para el modeline, en conjunto con moe-theme versión dark: https://github.com/kuanyui/moe-theme.el
    Estoy más que conforme, solo me falta hacer que el modeline cambie de color en base al estado de fly-check. Debiera ser sencillo pero todavía soy muy malo con elisp

    • Avatar

      Fernando 11 agosto. 2015 - 18:49

      Los colores son una variación de lo que había en el código original con el verde que uso acá en el blog. Lo genial es que se pueden usar colores en formato hexadecimal como en HTML.

      Muy buena idea lo de cambiar el color en base a flycheck, que aparezca rojo cuando detecta un tipo de error o algo así. Si lo llegás a implementar me interesa usarlo 🙂

      ¡Saludos!

  3. Avatar

    Javier Viveros 13 septiembre. 2015 - 20:14

    Hola, estoy iniciando con emacs y necesito saber si existe la manera de recargar el navegador automaticamente al guardar el html. Se que existe koala pero como adaptarlo a emacs..

    Saludos!

    • Avatar

      Fernando 13 septiembre. 2015 - 21:13

      Hola,
      Probé impatient-mode y parece ser una solución a lo que buscás. Tras instalarlo se puede activar con M-x impatient-mode en un archivo HTML, levantar un servidor con M-x httpd-start y abrir en el navegador la url http://localhost:8080/imp/. Ahí se actualiza automáticamente cada cambio que hagas en el archivo html. Está bastante bueno 🙂

      Espero que te sirva,
      ¡Saludos!

      • Avatar

        Javier Viveros 14 septiembre. 2015 - 23:59

        Muchas Gracias Amigo por tu explicación y por mantener este espacio, muy bien explicado ya funciona.

        Me siento como Goku y eso que apenas empiezo a personalizar mi emacs

Dejar un comentario

Toasty!