Blog sobre software libre
09 sep 2023

Configuración de Emacs con macros

Este verano tuve un par de sesiones de "coaching" con Protesilaos (https://www.protesilaos.com/). Aprendí varias cosas sobre elisp, y además creé mi propia macro para configurar Emacs.

El problema que estaba teniendo es que siempre que intentaba instalar Emacs desde cero en otro ordenador, la gestión de paquetes me daba problemas, y tenía que reiniciar Emacs varias veces para completar la instalación.

Mi objetivo es que con mi archivo de configuración pueda coger un ordenador cualquiera, iniciar Emacs y tenerlo todo configurado y listo, como si estuviera en mi propio ordenador (excepto en lo referente a archivos personales, claro).

Así que la solución a la que llegué con Prot fue hacerme mi propia macro, para gestionar así todo lo que tenga que ver con los paquetes, y saber qué está pasando en cada momento. La macro a la que he llegado es:

(defmacro my-package-install (package &rest body)
  "Installs PACKAGE.
If the package cannot be installed, remind the user to add the package-archives. Then, the user can configure the PACKAGE."
  `(progn
     ;;First stage; package installation
     (unless (package-installed-p ,package)
       (unless package-archive-contents
  (package-refresh-contents))
       (or (ignore-errors (package-install ,package))
    (message "Did you add MELPA to the `package-archives'")))
     ;;Second stage; package configuration
     (require ,package)
     ,@body
     )
  )

Básicamente lo que hace es comprobar si un paquete está instalado, y si lo está, lo configura con los argumentos que se le pasen. Además para evitar el error que tenía anteriormente, la macro te da una posible solución al error.

Con todo esto listo, ahora sólo tengo que implementar la macro con los paquetes de mi configuración. Una vez lo tenga todo hecho, debería poder usar Emacs en cualquier ordenador con sólo pulsar un botón.

Tags: emacs, macros, elisp
Other posts
Creative Commons License
www.finaprosadigital.com by Carlos Pajuelo is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.