J'utilise emacs à différents endroits et je souhaite disposer d'une configuration et de packages similaires installés partout. Je suppose que je peux utiliser un référentiel de contrôle de version pour les fichiers d'installation. Depuis que j'utilise Prelude , ce serait ~/.emacs.d/personal/
.
Je ne sais pas comment faire avec les paquets. Existe-t-il un fichier quelque part dans .emacs.d/
la liste des packages installés que je peux utiliser pour créer emacs sur d’autres machines et pour installer également ceux répertoriés ici?
init-file
package
version-control
El Diego Efe
la source
la source
Réponses:
Il n'y a pas de fichier manifeste généré automatiquement que vous pouvez synchroniser pour obtenir l'effet souhaité.
Cela dit, vous pouvez ajouter des appels à
package-install
votre configuration emacs elle-même.L'idée est que
package-install
c'est idempotent, donc si le paquet est déjà présent, rien ne se passera réellement. En supposant que vous ayez un tel appel pour chaque paquet que vous utilisez (ou au moins les feuilles du graphique de dépendance), cela synchroniserait efficacement vos paquets sur toutes les machines.Pour plusieurs packages, vous pouvez utiliser les éléments suivants:
la source
package-install
.package.el
depuis cette réponse liée. Il est possible qu’à l’époque despackage-install
opérations aient été effectuées sur des packages existants, pas seulement désinstallés.Je garde mon répertoire .emacs.d dans le contrôle de version. Ensuite, dans mon init.el et les fichiers suivants, j'utilise use-package pour définir la configuration du paquet. Use-package ne charge pas uniquement vos paquets, il les téléchargera à la demande s'ils n'existent pas dans les dépôts de paquets que vous avez configurés.
Par exemple, j'utilise le mode go, mais pas sur toutes les machines. Dans mon init.el j'ai les éléments suivants:
Cela ajoute un crochet de mode, mais plus important encore, en spécifiant
:ensure t
, le package sera téléchargé à la demande.Pour garder une machine synchronisée, vous pouvez simplement effectuer une extraction ou une extraction dans le dépôt et démarrer Emacs. Tous les nouveaux packages seront téléchargés et installés.
la source
:ensure go-mode
répéter le nom du paquet, vous pouvez simplement spécifier:ensure t
:hook
mot clé pour simplifier votre code.Dans Emacs-25, il y a la variable
package-selected-packages
, vous pouvez donc personnaliser cette variable et l'utiliserpackage-install-selected-packages
pour vous assurer qu'elle est installée.la source
Ce que vous voulez utiliser est Cask , qui vous permet de créer un fichier Cask spécifiant sur quels paquets installer
cask install
. Il peut être utilisé pour gérer facilement les dépendances d’un paquet et les "dépendances" de votre configuration Emacs. Placez votre fichier Cask sous contrôle de version et installez / mettez à jour des paquetages machine par machine.la source
Une autre approche serait la suivante: puisque je ne veux pas seulement synchroniser mes paquets Emacs, mais aussi d' autres fichiers (par exemple
.emacs
,.bashrc
mais aussi d' autres répertoires) entre mon serveur et mon ordinateur portable, j'ai commencé à utiliserunison
, pour synchroniser les fichiers et des répertoires. Ainsi, lorsque je travaille sur mon ordinateur portable, je cours simplementunison laptop
avant toute autre chose. Mon~/.unison/laptop.prf
fichier contient la section suivante pour les fichiers liés à Emacs:Étant donné que mes paquets Emacs (ainsi que mes sauvegardes et signets Emacs) sont stockés dans
~/.emacs.d
cette mémoire, cela signifie que je dispose de tout le matériel sur toutes mes machines.Une autre approche serait de placer le
.emacs.d
répertoire dans un répertoire synchronisé avec OwnCloud, DropBox ou tout autre service de synchronisation de fichiers, puis de créer des liens symboliques à partir~/.emacs.d
de ce répertoire partagé.la source
Bien que ce
package.el
soit la méthode standard pour installer des paquetages, vous pouvez aussi essayerel-get
ce qui est très utile pour installer des paquets qui ne sont pas (ou ne peuvent pas être) sur elpa. Cette réponse traite de la synchronisation de tels paquets.La façon dont vous vous assurez que les paquetages sont installés lors de l’utilisation de el-get est d’ajouter quelque chose comme ceci à votre fichier init
où packages correspond à la liste des packages à installer. Cette fonction est similaire au fait
package-install
qu’elle installe les packages uniquement s’ils ne sont pas déjà installés, sinon elle initialise simplement les packages.la source
J'utilise un petit truc "volé" dans emacs-starter-kit (je pense):
Alors, quand j'ai besoin d'un paquet, j'utilise simplement:
Sur les startups emacs, en évaluant ma configuration, il
package.el
sera possible d’installer magit s’il n’est pas installé.Vous pouvez trouver ma configuration ici:
https://github.com/mdallastella/emacs-config/
la source
J'ai le répertoire ~ / emacs qui est contrôlé par la version mercurial et contient tout ce que ma configuration emacs contient (~ / emacs / site-lisp pour les bibliothèques téléchargées manuellement, ~ / emacs / elpa pour les bibliothèques installées par elpa, ~ / emacs / etc / pour les .emacs fractionnés, ~ / emacs / dot-emacs.el que je symlink comme ~ / .emacs). Certains paquets ont dû être peaufinés pour avoir tous les fichiers importants dans cet arbre, mais cela fonctionne bien. J'ai implémenté ces quelques bits spécifiques à la machine par des conditions sur le nom du système.
Donc, après avoir installé / reconfiguré / modifié quelque chose, je commets simplement à tirer / pousser tous les changements entre toutes les machines que j'utilise.
L’avantage supplémentaire est que j’ai un historique complet de ma configuration et que je peux revenir en arrière / bisecter / revenir en cas de problème.
PS mercurial semble particulièrement adapté car il possède une traction / poussée naturelle des deux côtés, mais une configuration similaire ne devrait pas être difficile à obtenir avec git ou tout autre lecteur de DVD.
la source
J'ai ceci
setup-packages.el
dans ma configuration emacs, qui est un hybride de code provenant de Prelude et du blog de Tomorokoshi sur la gestion des paquets .setup-packages.el
fait ce qui suit:elpa
packages s’il n’en existe pas et ajoutez-le ainsi que ses sous-répertoires au répertoireload-path
.package-archives
liste avec Melpa.my-packages
liste sont installés. Si un paquet n'est pas installé, installez-le.Comment mettre en œuvre
setup-packages.el
ci - dessous dans votre~/.emacs.d/
répertoire.user-emacs-directory
,setup-packages-file
et lesmy-packages
variables dans votreinit.el
et faire(load setup-packages-file)
.Lorsque vous démarrez emacs pour la première fois sur un ordinateur sur lequel ces packages ne sont pas installés, tous les packages énumérés dans
my-packages
s’installent automatiquement.setup-packages.el
init.el
Vous auriez besoin des éléments suivants dans votre
init.el
:la source
Afin de refléter ma configuration, j'ai décidé d'adopter une approche différente en utilisant Syncthing ; chaque modification de l'un de mes fichiers de configuration se propage à un autre de mes ordinateurs sans avoir à s'en soucier. Ainsi, lorsque je mets à jour des paquets, je ne dois le faire que dans l'un des ordinateurs.
la source
RSYNC : Synchronisez certains dossiers / fichiers à l’aide d’
rsync
un réseau domestique oussh
d’un serveur distant.rsync
est un utilitaire de synchronisation unidirectionnel capable de supprimer des fichiers sur la cible. Veillez donc à sauvegarder vos données sur les emplacements source et cible et à effectuer des tests approfondis à l'aide de l'--dry-run
option, avant de procéder.Pour savoir comment configurer correctement le
.authinfo
fichier, voir https://www.gnu.org/software/emacs/manual/auth.html. Un exemple de.authinfo
contenu de fichier (pouvant contenir plusieurs entrées différentes) est le suivant:Configurez et utilisez la fonction
rsync-remote
pour effectuer une synchronisation surssh
un serveur distant. Ou utilisez la fonctionrsync-local
pour synchroniser sur le même ordinateur ou sur un réseau domestique sécurisé.la source
https://github.com/redguardtoo/elpa-mirror crée un référentiel local de tous les packages installés.
L'utilisation est simple, il suffit de courir
M-x elpamr-create-mirror-for-installed
.Sur d’autres machines, insérez-les
(setq package-archives '(("myelpa" . "~/myelpa/")))
dans.emacs
et redémarrez Emacs.Maintenant, sur toutes les machines, vous obtenez exactement la même version des packages.
la source