Estoy usando package
para administrar mis extensiones de Emacs. Para sincronizar mi configuración de Emacs en diferentes computadoras, me gustaría una forma de especificar una lista de nombres de paquetes en el .emacs
archivo y luego package
podría buscar e instalar automáticamente los paquetes, de modo que no necesite instalarlos manualmente llamando M-x package-list-packages
. ¿Como hacer eso?
123
Respuestas:
fuente
package
.package-refresh-contents
que solo se ejecutará si el paquete no está instalado? ¿Cómo es(or (file-exists-p package-user-dir))
mejor / cómo incluso verifica si los paquetes están instalados?package-refresh-contents
. Esto probablemente solo se ejecutará la primera vez que abra emacs en una computadora nueva, y estoy de acuerdo con eso. Si un paquete necesita una actualización, puede hacerlo manualmente.use-package
, puede usar la:ensure
palabra clave para instalar paquetes automáticamente. Esto también se configurapackage-selected-packages
si necesita acceder a la lista de paquetes a través de personalizar o mediante programación.Basado en los comentarios de Profpatsch y las respuestas a continuación:
fuente
or
? Oh wow.mapc
es por efectos secundarios. ¿Pero por qué no usarunless
?(package-initialize)
antes de la referencia apackage-user-dir
Emacs 25.1+ realizará un seguimiento automático de los paquetes instalados por el usuario en la
package-selected-packages
variable personalizable .package-install
actualizará la variable de personalización, y puede instalar todos los paquetes seleccionados con lapackage-install-selected-packages
función.Otra ventaja conveniente de este enfoque es que puede usar
package-autoremove
para eliminar automáticamente los paquetes que no están incluidospackage-selected-packages
(aunque preservará las dependencias).Fuente: http://endlessparentheses.com/new-in-package-el-in-emacs-25-1-user-selected-packages.html
fuente
Aquí está el código que uso para Emacs Prelude :
Si no está utilizando MELPA, no es necesario que lo requiera (y si
melpa.el
tiene que estar en suload-path
(o instalado a través de MELPA). El paquete db no se actualiza cada vez (ya que esto retrasaría significativamente el inicio) ) - solo donde hay paquetes desinstalados presentes.fuente
Nadie ha mencionado Cask todavía, pero es bastante adecuado para esta tarea.
Básicamente, crea una
~/.emacs.d/Cask
lista de los paquetes que desea instalar. Por ejemplo:Ejecutar
cask
desde la línea de comandos instalará estos paquetes por usted y cualquier dependencia que necesiten.Además, puede actualizar automáticamente los paquetes instalados usando
cask update
.fuente
/path/to/emacs -Q --script /path/to/cask/cask-cli.el -- [args]
Llame
package-install
con el nombre del paquete como símbolo. Puede encontrar los nombres de paquete para sus paquetes llamando de formapackage-install
interactiva y completando el nombre. La funciónpackage-installed-p
le informará si ya está instalada.Por ejemplo:
fuente
error: Package
dired + 'no está disponible para la instalación'. dired + es un paquete que probé con su código.dired+
Aparece cuando correspackage-list-packages
? Creo que necesitarás agregar mermelada o melpa a tupackage-archives
. Si es así, ¿puedes correr(package-install 'dired+)
?(package-installed-p 'dired+)
debería regresart
y se omitirá en el código anterior.package-installed-p
solo funciona bien, pero todo el bloque de código no. He probado varios paquetes.fuente
Me gusta comprobar si el usuario quiere instalar los paquetes primero como se hace en esta respuesta . También estoy actualizando el contenido de mi paquete una vez antes de instalar cualquier cosa. No estoy seguro de si esta es la mejor manera, pero no creo que las mejores respuestas lo estuvieran haciendo por mí.
fuente
Me encontré con un problema que no pasó nada después de añadir
(package-install 'org)
en.emacs
. Quería instalar la versión actualizada deorg-mode
y el incorporadoorg-mode
es bastante antiguo.package-install
Extraje el código fuente de Emacs 25.3.1. La función self ya comprueba si un paquete está instalado o no y se niega a instalarlo si el paquete ya está instalado. Por lo tanto, la comprobación(unless (package-installed-p package) ...)
de la respuesta 10093312 de hecho no es necesaria.El incorporado
org-mode
también cuenta como instalado y sepackage-install
niega a instalar la versión más nueva de ELPA. Después de pasar algún tiempo leyendo package.el, se me ocurrió la siguiente solución.La razón por la que funciona es que las
package-*
funciones familiares manejan los argumentos de manera diferente en función de si es un símbolo o unpackage-desc
objeto. Solo puede especificar información de versión apackage-install
través de unpackage-desc
objeto.fuente
Aquí está el mío, es más corto :)
fuente
Aquí hay otra forma.
fuente