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-install
su propia configuración de emacs.La idea es que
package-install
es 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.el
desde esa respuesta vinculada. Es posible que en ese momentopackage-install
realizara 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 t
que 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-mode
repetir el nombre del paquete, puede especificar:ensure t
:hook
palabra clave para simplificar su código.En Emacs-25, existe la variable
package-selected-packages
, por lo que puede personalizarla y usarlapackage-install-selected-packages
para 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
,.bashrc
sino 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 laptop
antes que nada. Mi~/.unison/laptop.prf
archivo 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.d
esto, me asegura que tengo todo en todas mis máquinas.Un enfoque alternativo sería colocar el
.emacs.d
directorio 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.d
ese directorio compartido.fuente
Si bien
package.el
es la forma estándar de instalar paquetes, es posible que también desee probarel-get
cuá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-install
que 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.el
proporcionará 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.el
en mi configuración de emacs, que es un híbrido de código del blog de Prelude y Tomorokoshi sobre Package Management .setup-packages.el
hace lo siguiente:elpa
paquetes si no existe y agréguelo junto con sus subdirectorios alload-path
.package-archives
lista con Melpa.my-packages
instalados todos los paquetes enumerados en la lista. Si un paquete no está instalado, instálelo.Cómo implementar
setup-packages.el
siguiente en su~/.emacs.d/
directorio.user-emacs-directory
,setup-packages-file
ymy-packages
variables en suinit.el
y 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-packages
se 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 mediantessh
un servidor remoto.rsync
es 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-run
opción, antes de hacer lo real.Para leer sobre cómo configurar correctamente el
.authinfo
archivo, consulte https://www.gnu.org/software/emacs/manual/auth.html. El.authinfo
contenido de un archivo de ejemplo (que puede contener varias entradas diferentes) es el siguiente:Configure y use la función
rsync-remote
para sincronizar conssh
un servidor remoto. O utilice la funciónrsync-local
para 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.emacs
y reinicie Emacs.Ahora en todas las máquinas, obtienes exactamente la misma versión de paquetes.
fuente