¿Cómo generar y activar cargas automáticas para paquetes locales?

9

Está claro que no todos los paquetes locales / personalizados / personales deberían lanzarse oficialmente, y sería una tontería hacerlo solo para beneficiarse del soporte de administración de paquetes incorporado. Me pregunto cómo generar y activar cargas automáticas para paquetes locales. Eso es similar a cómo package.elfunciona para los paquetes instalados de ELPA. Para evitar reinventar la rueda, ¿hay alguna forma de que "pretenda" que algún directorio local (con subdirectorios cada uno de los cuales es un paquete local / personalizado / personal) es ELPA? También estoy abierto a el-getsi tal escenario puede ser soportado a través de, por ejemplo, recetas personalizadas.

Estoy seguro de que la tarea es bastante común y cualquiera que use Emacs en el nivel avanzado llega a ese punto tarde o temprano. ¿Alguien podría compartir sus experiencias en este campo?

Alexander Shukaev
fuente
3
update-directory-autoloadsse puede usar independientemente de cualquier administrador de paquetes.
npostavs
@npostavs, lo sé, pero no es recursivo y no es una solución integral en este caso. Seguro que no será suficiente y tendría que incluirlo en mi propia implementación.
Alexander Shukaev
1. Puede proporcionar una lista de directorios (por ejemplo, un directorio y sus descendientes) update-directory-autoloadspara, en efecto, hacerlo recursivo. 2. Puede usar update-file-autoloadspara cada archivo que le interese, independientemente del directorio en el que se encuentre.
Drew
FYI: package.eltampoco es recursivo (es decir, no admite paquetes con fuentes en subdirectorios).
npostavs
Configuré un MELPA local en Linux. No tengo ninguna buena solución para Windows. Realmente desearía que emacs admitiera este tipo de cosas fuera de la caja. Puede valer la pena revisar use-package para ver si puede.
eflanigan00

Respuestas:

7

La solución correcta (IMO) es usar un administrador de paquetes que tenga soporte explícito para este caso de uso. Esto sería straight.el, lo que escribí para este propósito.

Puede leer documentación detallada, incluidas las comparaciones con otros gestores de paquetes, en el archivo README , por lo que me limitaré a cómo puede utilizarlo straight.elpara resolver su problema específico.

  1. Coloque su repositorio en ~/.emacs.d/straight/repos/<my-repo>.
  2. Cárgalo usando

    (straight-use-package '(<my-package> :local-repo "<my-repo>"))
    
  3. Ya terminaste Cada vez que realice cambios en el código fuente, la generación de carga automática y la compilación de bytes se rehacerán (en el próximo inicio de Emacs). También obtienes cosas como gestión de dependencias, automatización de control de versiones opcional, etc. gratis.

  4. Cuando (si) desea publicar el paquete, simplemente empújelo en algún lugar y modifique la receta para que apunte a ese repositorio de Git.
  5. También puede usar straight.elcon use-packagesi lo prefiere (en su mayor parte es solo azúcar de sintaxis).
Radon Rosborough
fuente
3

Hago lo siguiente en Linux:

Configuré un repositorio local de melpa clonando melpa.

Modifico las recetas que quiero señalar a mis paquetes locales. Lo siguiente eslocal-melpa/recipies/ace-window

(ace-window
  :url "/home/my_home/.emacs.d/packages/ace-window/"
  :fetcher git)

Luego, desde el tipo local-mepla make allo make recipies/ace-windowpara compilar los paquetes enlocal-melpa/packages

Luego make packages/archive-contents, que llena la lista de paquetes.

Luego en uso para seguir para decirle a emacs que use mi melpa local

(setq package-archives '(("local-melpa" . "~/.emacs.d/packages/local-melpa/packages/")))

No he descubierto cómo ejecutar makeen Windows. Pero puedo construir los paquetes en local-melpaLinux y copiarlos en Windows y emacs entiende e instala los paquetes correctamente.

El beneficio de esto es que puedo restablecer en cualquier momento que desee eliminando mi ~/.emacs.d/elpa/*directorio e instalando cualquier actualización personalizada en cualquier paquete.

eflanigan00
fuente
¿Quizás quelpa también sería de interés?
npostavs
Creo que tienes razón npostavs. Tengo que sentarme y mirarlo.
eflanigan00
2

Si ha reemplazado un paquete ya instalado con una versión diferente, y todo lo que falta es el archivo de carga automática, puede usar package-generate-autoloads para generarlo:

(package-generate-autoloads "async" "~/.emacs.d/elpa/async-1.9.3/")

Encontré más fácil que usar update-directory-autotools cuando necesito degradar un paquete a una versión anterior.

De hecho, creo que realmente no he respondido tu pregunta. Dejaré esta respuesta aquí por el momento, pero mi respuesta es más relevante aquí: /programming/26348561/how-to-generate-autoloads-for-elpa-packages/50100170

Andreas Raster
fuente