Uso emacs en diferentes lugares y quiero tener una configuración y paquetes similares instalados en todas partes. Supongo que puedo usar un repositorio de control de versiones para los archivos de configuración. Desde que uso Prelude , eso sería ~/.emacs.d/personal/.
No sé cómo hacer con los paquetes. ¿Hay algún archivo en algún lugar .emacs.d/con la lista de paquetes instalados que pueda usar para hacer emacs en otras máquinas para instalar también los que figuran allí?
init-file
package
version-control
El Diego Efe
fuente
fuente

Respuestas:
No hay un archivo de manifiesto generado automáticamente que pueda sincronizar para lograr el efecto deseado.
Dicho esto, algo que puede hacer es agregar llamadas a
package-installsu propia configuración de emacs.La idea es que
package-installes idempotente, por lo que si el paquete ya está presente, en realidad no pasará nada. Suponiendo que tenga esa llamada para cada paquete que use (o al menos las hojas en el gráfico de dependencia), eso sincronizaría efectivamente sus paquetes entre las máquinas.Para múltiples paquetes puede usar lo siguiente:
fuente
package-install.package.eldesde esa respuesta vinculada. Es posible que en ese momentopackage-installrealizara operaciones en paquetes existentes, no solo desinstalados.Mantengo mi directorio .emacs.d en control de versiones. Luego, en mi init.el y archivos posteriores, uso use-package para definir la configuración del paquete. Use-package no carga de forma perezosa sus paquetes, los descargará a pedido si no existen desde cualquier repositorio de paquetes que haya configurado.
Por ejemplo, uso el modo go, pero no en todas las máquinas. En mi init.el tengo lo siguiente:
Esto agrega un enlace de modo, pero más importante, al especificar
:ensure tque descargará el paquete a pedido.Para mantener una máquina sincronizada, solo puede realizar el pago o extraer del repositorio e iniciar Emacs. Cualquier paquete nuevo se descargará e instalará.
fuente
:ensure go-moderepetir el nombre del paquete, puede especificar:ensure t:hookpalabra clave para simplificar su código.En Emacs-25, existe la variable
package-selected-packages, por lo que puede personalizarla y usarlapackage-install-selected-packagespara asegurarse de que esté instalada.fuente
Lo que desea usar es Cask , que le permite crear un archivo Cask que especifique en qué paquetes instalar
cask install. Se puede usar para administrar las dependencias de un paquete y las "dependencias" de su configuración de Emacs con facilidad. Ponga su archivo Cask bajo control de versiones e instale / actualice paquetes por máquina.fuente
Un enfoque alternativo sería la siguiente: puesto que no sólo quiero sincronizar los paquetes de Emacs, pero también otros archivos (por ejemplo
.emacs,.bashrcsino también otros directorios) entre mi servidor y mi portátil, empecé a utilizarunison, para sincronizar los archivos y directorios. Entonces, cuando trabajo en mi computadora portátil, simplemente corrounison laptopantes que nada. Mi~/.unison/laptop.prfarchivo tiene la siguiente sección para archivos relacionados con Emacs:Dado que mis paquetes de Emacs (y también mis copias de seguridad y marcadores de Emacs) están almacenados en
~/.emacs.desto, me asegura que tengo todo en todas mis máquinas.Un enfoque alternativo sería colocar el
.emacs.ddirectorio en un directorio que esté sincronizado con OwnCloud, DropBox o cualquier otro servicio de sincronización de archivos y luego crear enlaces simbólicos desde~/.emacs.dese directorio compartido.fuente
Si bien
package.eles la forma estándar de instalar paquetes, es posible que también desee probarel-getcuál es muy útil para instalar paquetes que no están (o no pueden estar) en elpa. Esta respuesta trata sobre la sincronización de dichos paquetes.La forma en que se asegura de que se instalen determinados paquetes al usar el-get es agregar algo como lo siguiente a su archivo init
donde paquetes son la lista de paquetes que desea instalar. Esta función es similar a la
package-installque instala los paquetes solo si aún no están instalados, de lo contrario, simplemente inicializa los paquetes.fuente
Uso un pequeño truco "robado" de emacs-starter-kit (creo):
Entonces, cuando necesito un paquete, simplemente uso:
En los inicios de emacs, evaluar mi configuración
package.elproporcionará instalar magit si no está instalado.Puedes encontrar mi configuración aquí:
https://github.com/mdallastella/emacs-config/
fuente
Tengo el directorio ~ / emacs que está controlado por la versión mercurial y contiene todo lo que mi configuración de emacs consiste en (~ / emacs / site-lisp para bibliotecas descargadas manualmente, ~ / emacs / elpa para bibliotecas instaladas por elpa, ~ / emacs / etc / para .emacs divididos, ~ / emacs / dot-emacs.el que enlace simbólicamente como ~ / .emacs). Se requirió algunos ajustes de algunos paquetes para tener todos los archivos importantes dentro de este árbol, pero funciona bien. Esos pocos bits que son específicos de la máquina los he implementado por condicionales en el nombre del sistema.
Entonces, después de instalar / reconfigurar / cambiar cualquier cosa, simplemente confirmo pull / push todos los cambios entre todas las máquinas que uso.
Un beneficio adicional es que tengo un historial completo de mi configuración y puedo retroceder / bisecar / revertir en caso de que algo salga mal.
PS mercurial parece particularmente adecuado, ya que tiene un tirón / empuje natural de dos lados, pero una configuración similar no debería ser difícil de lograr con git o cualquier otro dvcs.
fuente
Tengo esto
setup-packages.elen mi configuración de emacs, que es un híbrido de código del blog de Prelude y Tomorokoshi sobre Package Management .setup-packages.elhace lo siguiente:elpapaquetes si no existe y agréguelo junto con sus subdirectorios alload-path.package-archiveslista con Melpa.my-packagesinstalados todos los paquetes enumerados en la lista. Si un paquete no está instalado, instálelo.Cómo implementar
setup-packages.elsiguiente en su~/.emacs.d/directorio.user-emacs-directory,setup-packages-fileymy-packagesvariables en suinit.ely hacer(load setup-packages-file).Cuando inicia emacs por primera vez en una máquina que no tiene estos paquetes instalados, todos los paquetes enumerados
my-packagesse instalarán automáticamente.setup-packages.el
init.el
Necesitaría lo siguiente en su
init.el:fuente
Para reflejar mi configuración, decidí adoptar un enfoque diferente, usando Syncthing ; cada cambio en cualquiera de mis archivos de configuración se propaga a cualquier otra de mis PC sin tener que preocuparme por eso, así que cuando actualizo paquetes solo tengo que hacerlo en una de las PC.
fuente
RSYNC : Sincronice carpetas / archivos seleccionados utilizando
rsync, ya sea a través de una red doméstica o mediantesshun servidor remoto.rsynces una utilidad de sincronización unidireccional que puede eliminar archivos en el destino, así que asegúrese de hacer una copia de seguridad de sus datos en las ubicaciones de origen y destino, y pruebe a fondo utilizando la--dry-runopción, antes de hacer lo real.Para leer sobre cómo configurar correctamente el
.authinfoarchivo, consulte https://www.gnu.org/software/emacs/manual/auth.html. El.authinfocontenido de un archivo de ejemplo (que puede contener varias entradas diferentes) es el siguiente:Configure y use la función
rsync-remotepara sincronizar consshun servidor remoto. O utilice la funciónrsync-localpara sincronizar en la misma computadora o en una red doméstica confiable.fuente
https://github.com/redguardtoo/elpa-mirror crea un repositorio local de todos los paquetes instalados.
El uso es simple, solo corre
M-x elpamr-create-mirror-for-installed.En otras máquinas, inserte
(setq package-archives '(("myelpa" . "~/myelpa/")))en su.emacsy reinicie Emacs.Ahora en todas las máquinas, obtienes exactamente la misma versión de paquetes.
fuente