12 de marzo de 2009

Coloreado de cambios con Emacs

Hace mucho que no escribo, hoy voy a hablar un poco del Maravilloso Emacs. Editor que uso para editar cualquier fichero de texto desde hace poco más de un año. Y que me encanta. Y como lo hecho de menos cuando tengo que usar el Horroroso Vim.

En concreto, quiero comentar una pequeña funcionalidad de Emacs. Como colorear las partes nuevas en el fichero que estés escribiendo en un momento dado. Bueno, a partir de aquí, los párrafos entre paréntesis (lo que otros llaman código Lisp) va en el fichero de configuración de Emacs.

Primero creamos una función que nos limpia el coloreado de los cambios.

(defun clear-highlight ()
(interactive)
(if (boundp 'highlight-changes-mode)
(highlight-changes-remove-highlight (point-min) (point-max))))
Luego añadimos un par de accesos de teclado.
(define-key global-map (read-kbd-macro "<f3>") 'highlight-changes-mode)
(define-key global-map (read-kbd-macro "<f4>") 'clear-highlight)
Y ya esta. Ahora cuando apretemos por primera vez F3 con un fichero abierto, se activa la funcionalidad. Lo que escribamos a partir de entonces se colorea diferente. Si volvemos a apretar F3, se quita el coloreado, ..etc. Y con F4 lo que conseguimos es limpiar el coloreado como si empezáramos a editar de nuevo el fichero (ojo, no quiere decir que deshaga los cambios)

Aunque si quieres que te active el coloreado de cambios nada más abrir el fichero, puedes hacerlo con una linea como la que sigue. En este caso activa el coloreado para ficheros de LaTex.

(add-hook 'latex-mode-hook 'highlight-changes-mode)

Y si se quiere que se limpie el coloreado actual automáticamente cuando salvamos, bastaría con añadir una llamada a nuestra función clear-highlight cada vez que se salva.

(add-hook 'after-save-hook 'clear-highlight)

2 comentarios:

Diego Sevilla dijo...

Muy interesante... Sin embargo, no sé qué versión de emacs usarás, pero por lo que veo en la documentación, la definición de teclas de función se hace con "<f3>" en vez de "f3" (quizá un error de copia/pega y html...)

Saludos!
diego.

Luis Cabellos dijo...

Gracias Diego! efectivamente era un error de html, que lo entendia como etiqueta.