Instalación manual de un paquete de múltiples archivos para "elpa /"

7

Cuando estoy escribiendo un nuevo paquete, es genial que pueda probar su instalación simplemente emitiendo M-x package-install-from-buffer. Esto instalará el paquete con package.el, de modo que quede debajo "~/.emacs.d/elpa". Sin embargo, esto no funciona en paquetes de múltiples archivos.

¿Cuál es el procedimiento para instalar todos los .elarchivos en el directorio actual como un paquete multifile único?

Malabarba
fuente

Respuestas:

7

Emacs 25.1 ahora tiene esta característica . Del NEWSarchivo:

** package-install-from-buffery package-install-filetrabajar en directorios. Esto sigue las mismas reglas que la instalación desde un .tararchivo, excepto que el -pkg.elarchivo es opcional.

No hay nuevos comandos para recordar. Simplemente emita package-install-from-bufferdesde un búfer dired, o invoque package-install-filey proporcione un directorio. Cualquiera que sea el paquete contenido en ese directorio, se leerá e instalará, ya sea simple o múltiple, sin -pkg.elnecesidad de taring o archivo.

Malabarba
fuente
El -pkg.elarchivo opcional es interesante. ¿Qué valores predeterminados tienen en ese caso?
phils
@phils al igual que los repositorios de paquetes, encuentra un archivo elisp con un encabezado de paquete completo y genera el archivo -pkg a partir de eso.
Malabarba
1
Ah, no me había dado cuenta de que así se generaban normalmente. Sus cambios tienen mucho sentido, entonces. Buen trabajo.
phils
Malabarba: Noto que la cadena de documentación actual en el tronco package-install-fileno menciona que funcione para directorios (aunque, como usted ha dicho, lo hace).
phils
@phils Gracias por notarlo. Lo estoy arreglando ahora.
Malabarba
1

package-install-from-buffer dice:

Se supone que el búfer actual es un único archivo .el o .tar que sigue las pautas de empaquetado

¿Entonces se supone que puede archivar el directorio (suponiendo que cumpla con los criterios), cargar el archivo tar en Emacs y usarlo package-install-from-buffercomo antes?

Editar: O, como señala lunaryorn, no visite el archivo en Emacs y úselo package-install-file.

phils
fuente
1
Suena como una función para (re) tar el directorio actual y luego hacer la instalación del paquete sería útil.
glucas
1
Alternativamente, M-x package-install-file.
No funciona Intenta encontrar un paradox/paradox-pkg.elarchivo dentro tary errores cuando no lo hace. Lo mismo para ambos install-filey install-from-buffer. Supongo que necesito crear este -pkgarchivo como una especie de receta.
Malabarba
1
@Malabarba Un paquete TAR debe tener un -pkgarchivo, de lo contrario no es un paquete válido, por lo que simplemente no funcionará el tar'ing un directorio aleatorio. Emacs debe tener un lugar para buscar los metadatos del paquete después de todo. Puede usar MELPA package-buildo caskcrear paquetes TAR adecuados desde un árbol de directorios.
Malabarba: Ver C-h i g (elisp) Multi-file Packagespara más detalles.
Phil
1

package.elno tiene buen soporte para este caso de uso. Tiene que volver a ejecutar package-install-from-buffercada vez que realiza una actualización del paquete, y también M-x find-functiony los amigos no saltarán al código fuente, sino a la copia que se package.elincluye ~/.emacs.d/elpa. Como consecuencia, recomendaría no usar package.elpara este caso de uso (o en absoluto, ya que tiene una serie de otros problemas).

En cambio, puede probar mi administrador de paquetes straight.el, que está diseñado explícitamente para este caso de uso. Con straight.el, no hay un procedimiento de "instalación local". Simplemente coloque su repositorio ~/.emacs.d/straight/repos/<my-package-repo>y luego cargue el paquete en su archivo init:

(straight-use-package '(<my-package> :local-repo "<my-package-repo>"))

Cada vez que realiza un cambio en el código fuente, la generación de carga automática y la compilación de bytes se rehace (una vez que reinicia Emacs). Además, está ejecutando directamente desde el repositorio de Git, por lo que los M-x find-functionamigos trabajarán como se esperaba.

Finalmente, las versiones local y ascendente son completamente intercambiables. straight.elle permite realizar los cambios locales que desee, y se tratan tan sagrados como los cambios ascendentes (aunque straight.elle permite revertir automáticamente [e interactivamente] sus repositorios a sus versiones ascendentes, si lo desea). Por lo tanto, no hay que preocuparse por realizar cambios en su configuración si desea realizar un desarrollo local: simplemente realice el desarrollo local. Y si tiene un paquete privado que publica, es trivial: simplemente empuje ese paquete en algún lugar (y probablemente actualice la receta en su archivo init para apuntar a ese repositorio Git, para que straight.elpueda volver a clonarlo desde una máquina diferente).

A diferencia de package.el, no hay diferencia en el tratamiento de los paquetes de varios archivos y de un solo archivo.

Para obtener documentación detallada sobre straight.el, incluidas las comparaciones con otros gestores de paquetes, consulte el archivo README .

Radon Rosborough
fuente