Ah claro, uso Emacs

Cuando entré a mi posgrado, con esto de escribir notas, preámbulos extendidos y artículos, fue necesario que volviera a escribir documentos en \LaTeX regularmente, algo que había dejado de hacer durante mi carrera profesional, porque fuera de la academia \LaTeX es básicamente inútil. El PDF de mi novela fue generado por \LaTeX, pero la escribí en un archivito de texto con un formato que me inventé, y luego escribí un script en Perl que generaba un documento \LaTeX que luego compilaba a PDF. Y eso sólo porque soy un geek: la gente normal no usa \LaTeX, y la verdad no tendría razones para hacerlo.

Como sea, yo volví a escribir en \LaTeX, y para mi tesis de maestría decidí pasarme a la “modernidad” y escribirla en gedit. La verdad gedit es un editor más que pasable, y pude terminar mi tesis de maestría usando su plugin para \LaTeX, pero al final sí estaba sufriendo porque yo fui indoctrinado en el mejor editor que nunca jamás el mundo ha tenido, Emacs.

Sin embargo, después de utilizar Emacs al inicio de mi licenciatura, me pasé a XEmacs por una combinación de factores ligeramente idiotas. Entre ellos estaba el hecho de que leía mi correo electrónico dentro del editor, y eso funcionaba mejor en XEmacs que en Emacs, así que obviamente me pasé al primero. La verdad no lo lamento: XEmacs fue un gran editor durante muchos años, y yo lo usé alegremente como programador profesional, incluso durante las tristes ocasiones en que tuve que programar en Visual Studio (el editor de Visual Studio apesta).

Así fue hasta que llegó el momento de escribir mi tesis de maestría, cuando me pasé a gedit porque, entre otras cosas, XEmacs pasaba unos momentos dolorosos en ese entonces, donde el grupo de desarrolladores que lo mantenían no sabían qué hacer con múltiples tecnologías modernas que reemplazaban y/o mejoraban varios hacks que el venerable editor había tenido que implementar por su cuenta. Cosas como UTF-8, fuentes con antialias, y bibliotecas de interfaces gráficas, Emacs y XEmacs las habían tenido que implementar por su cuenta (¡y en Emacs Lisp, ‘arajo!), y cuando implementaciones más sensatas hicieron su aparición, los desarrolladores de ambos editores tardaron un rato en adaptarse a las nuevas tecnologías.

Así que escribí mi tesis de maestría en gedit, pero sí estaba sufriendo al final, extrañando todas las maravillas que Emacs y XEmacs siempre han ofrecido. Ya en el doctorado regresé a XEmacs, pero pronto descubrí que Emacs ahora jalaba mucho más bonito (se integra con GTK+ y tiene mejor soporte para fuentes con antialias), y regresé a usarlo después de casi diez años de tenerlo abandonado.

La cosa es que sencillamente ningún otro editor (con la posible excepción de Vim) le llega ni siquiera al ombligo (creo que sí ya superaron sus talones). El editor de GNOME, gedit, es endemoniadamente bueno, y con sus extensiones en Python se acerca (al menos potencialmente) al nivel de funcionalidad que Emacs ofrece al estar escrito, básicamente, en Emacs Lisp; sin embargo, la capacidad de navegar un documento rápidamente utilizando solamente el teclado es algo que está inherentemente alambrado en Emacs. Los algoritmos (y la implementación de los mismos) fueron escritos originalmente hace casi treinta años, y han sido refinados y optimizados durante todo ese tiempo. Es realmente ilusiorio esperar que el triste widget de texto de GTK+ (por bueno que sea) se le pueda acercar.

Llevo ya un par de años escribiendo \LaTeX en Emacs y siendo bastante rápido, pero había una cosa de las Mac que envidiaba. En las Mac, en TeXShop, uno está trabajando en un documento \LaTeX, y tiene el PDF compilado al lado, y si uno le pica a alguna parte del PDF y le dice que haga “sync”, el editor de texto se centra “cerca” del código \LaTeX que generó la parte del PDF clickeada. La tecnología es llamada SyncTeX, y de hecho Evince (mi visor de PDFs de siempre) la soporta desde hace un rato. Sin embargo, no creí que fuera posible utilizarlo en conjunción con Emacs, porque Evince (siendo parte de GNOME) no tiene una opción para configurar qué editor debe llamarse o de qué manera esto debe ocurrir para que enmarque la parte del documento deseada. A la gente de GNOME no le gusta “confundir” a los usuarios con opciones de configuración.

En su lugar, Evince tiene una señal en DBus que se dispara cuando el PDF visto fue compilado con SyncTeX, y uno hace Ctrl-click en una parte del mismo. Esa señal la captura quién sea que se conecte a DBus, y hace lo que sea que tenga que hacerse con la información que pasa la señal (básicamente el nombre del archivo .tex, y la línea correspondiente). Entonces yo creí que no había forma de que yo pudiera hacer eso desde Emacs, porque DBus es una tecnología “moderna”.

Y por supuesto resultó que estaba equivocado porque, claro, uso Emacs.

Por supuesto algún demente implementó soporte para DBus en Emacs, y entonces fue sólo cosa de poner lo siguiente en mi .emacs:

;; SyncTex from DBus
(require 'dbus)

(defun synctex-find-file (file)
  (find-file (substring file 7))
  (goto-line (car linecol))
  (unless (= col -1)
    (move-to-column col)))

(defun synctex-switch-to-buffer (file)
  (switch-to-buffer buf)
  (goto-line (car linecol))
  (unless (= col -1)
    (move-to-column col)))

(defun my-evince-sync (file linecol time)
  (let ((buf (get-file-buffer (substring file 7)))
        (line (car linecol))
        (col (cadr linecol)))
    (if (null buf)
      (synctex-find-file file)
      (synctex-switch-to-buffer buf))))

(dbus-register-signal
 :session nil "/org/gnome/evince/Window/0"
 "org.gnome.evince.Window" "SyncSource"
 'my-evince-sync)

El código original lo saqué de aquí, y lo modifiqué para que funcionara con Evince 3 (porque yo uso GNOME 3), y para que si no estaba abierto el buffer del archivo Emacs lo abra. Con eso, y teniendo la ventana de Evince “Always on top”, funciona casi exactamente igual que en un Mac:

Emacs con SyncTeX

Emacs con SyncTeX

De hecho funciona mejor; hasta ahora, el editor se centra exactmente en la línea correcta, no como en TeXShop.

Esto me hizo reevaluar mi opinión acerca de que Evince no tenga una opción para especificar qué editor debe “actualizarse” cuando uno hace Ctrl-click: la idea de que el visor sólo dispare una señal, y que sólo los editores conectados a DBus respondan como debe de ser me parece fabulosamente elegante, y ciertamente mucho más flexible y poderosa. Tal vez la gente de GNOME de hecho tenga la razón con esta idea de no ofrecer miles opciones de configuración a lo idiota (el plugin de gedit que aprovecha SyncTeX funciona igual: sólo se conecta al bus y captura la señal correspondiente de Evince).

Fue divertido que mi fe flaqueara un poco, ¿cómo pude dudar que hubiera algo que Emacs no puede hacer? Si como todo mundo sabe, Emacs es un buen Sistema Operativo; lástima que le falte un buen editor.

Real Programmers

Real Programmers

3 comentarios sobre “Ah claro, uso Emacs

  1. En anteriores posts has explicado porque usas Emacs, este tipo de preguntas las considero casi como religiosas:

    ¿Tendría yo alguna ventaja en aprender a usar Emacs y dejar de usar Eclipse para programar?

    Como dato curioso: Texmaker en sus versiones más recientes cuenta con el previsualizador en PDF con la capacidad de dar click y detectar la sección del código Latex correspondiente.

    1. ¿Tendría yo alguna ventaja en aprender a usar Emacs y dejar de usar Eclipse para programar?

      Siempre tiene ventajas aprender algo nuevo. Eclipse es bueno; yo lo he usado varias veces en mi vida. Sólo Emacs (en mi no tan humilde opinión) es mucho más poderoso, y correspondientemente toma mucho más tiempo aprenderlo a usar.

      Como dato curioso: Texmaker en sus versiones más recientes cuenta con el previsualizador en PDF con la capacidad de dar click y detectar la sección del código Latex correspondiente.

      Me parece que ya casi cualquier combo editor/visor decente tiene la opción de synctex.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *