Cuaderno de GNUtas

Revoltijo Elisp (V)

Compilar TeX desde Dired con opciones

En ocasiones, necesito compilar rápidamente un documento (La)TeX, y no me apetece abrirlo ni dar la orden desde la línea de comandos. Perezoso que es uno. Pero, ya que me muevo muy a menudo por el navegador de archivos de Emacs, Dired, se me ocurrió escribir esta función para compilar el fichero donde tenemos situado el cursor en Dired a partir de una lista de posibles compiladores. La lista la podemos crear fácilmente mediante una «hydra» (yo uso bastante el paquete hydra y tengo definidas muchísimas, agrupadas sus cabezas de manera temática), pero aquí veremos cómo hacerlo de una forma —digamos— más idiomática a Elisp, mediante la expresión read-char-choice.

Primero de todo, definimos la función que invoca el comando de shell para compilar, que toma como argumento el compilador que luego escojamos, y como variable local, el archivo donde tenemos el cursor (dired-get-file-for-visit):

(defun compila-con (compilador)
  (interactive)
  (let
      ((archivo (dired-get-file-for-visit)))
    (shell-command  (concat (format "%s " compilador) (format "'%s'" archivo)))))

A continucación, definimos nuestra lista de compiladores. Naturalmente, escoger entre uno y otro presupone que sabemos ya lo que estamos escogiendo. En mi caso, casi siempre (por no decir siempre) uso LuaLaTeX. XeLaTeX, muy poco, principalmente para viejos documentos compilables ahí (francamente, creo que XeTeX está ya desfasado en favor de LuaTeX). Y pdfLaTeX y TeX a pelo son más bien testimoniales. Pero queríamos una lista, y aquí tenemos nuestra lista:

(setq lista-compilar '((?1 "LuaLaTeX" (lambda () (compila-con "lualatex")))
                       (?2 "XeLaTeX" (lambda () (compila-con "xelatex")))
                       (?3 "pdfLaTeX" (lambda () (compila-con "pdflatex")))
                       (?4 "plainTeX" (lambda () (compila-con "tex")))))

Y, por último, la función que ofrece la lista en el minibúfer y activa nuestra elección:

(defun compila-archivo-tex ()
  "Ofrece una lista de cuatro opciones para compilar el archivo
TeX sobre el que se sitúa el cursor en Dired"
  (interactive)
  (let ((compilador (read-char-choice (concat "compilar el archivo TeX con >>\n"
                                              (mapconcat (lambda (item) (format "%c: %s" (car item) (nth 1 item))) lista-compilar " -- "))
                                      (mapcar #'car lista-compilar))))
    (funcall (nth 2 (assoc compilador lista-compilar)))))

Publicado: 30/10/2019

Última actualización: 21/01/2230/10/2019


Índice general

Acerca de...

Esta obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial 4.0 Internacional.

© Juan Manuel Macías
Creado con esmero en
GNU Emacs