Je travaille sur une petite configuration personnalisée Emacs que je souhaite partager avec des amis en tant que référentiel git qu'ils pourront utiliser comme base de référence pour leurs propres configurations futures.
Pour cela, j'ai besoin d'un moyen de tester ma configuration et la solution la plus simple que je puisse trouver est quelque chose comme:
$ emacs --eval "(setq user-emacs-directory \"~/Code/my_custom_emacs.d/\")"
Mais je n'arrive pas à le faire fonctionner.
Toute aide très appréciée.
.emacs.d
répertoire personnalisé à moins que vous ne changiez HOME, ce qui me semble problématique. Les gens ont fourni des solutions de contournement ci-dessous, mais pour moi, cela ressemble à une demande de fonctionnalité très raisonnable pour Emacs lui-même.wontfix
et fermée dans le suivi des bogues.Réponses:
L’approche de base que j’utilise pour cela consiste à modifier
$HOME
, en exécutant:Vous utilisez alors
/path/to/dir/.emacs.d
Vous voudrez peut-être aussi créer un lien symbolique entre tous les fichiers ou répertoires d’importance de ce faux répertoire personnel, afin qu’Emacs puisse les voir.
la source
La façon dont j'utilise pour maintenir plusieurs
.emacs.d
répertoires en parallèle est la suivante.emacs est lancé comme ceci:
Chaque
init.el
fichier commence comme ceci, pour configurer correctement les variablesuser-init-file
etuser-emacs-directory
:J'ai trouvé que cela fonctionnait de manière très fiable au cours des derniers mois. Voici quelques remarques:
ça casse
emacs-init-time
, ce qui ne rapporte que le temps nécessaire pour charger la configuration système par défaut, mais pas votre propre fichier init. Si vous souhaitez analyser votre temps d'initialisation, vous devrez le faire d'une autre manière (voir par exemple Comment mesurer les performances du code elisp? ).ce n'est pas équivalent à un démarrage normal et vous devrez vous occuper de quelques points spécifiques. En particulier:
after-init-hook
est exécuté avant le chargement du fichier init.*scratch*
tampon est créé avant le chargement du fichier init. Vous devrez changer son mode explicitement (au lieu d'utiliserinitial-major-mode
).package-initialize
; ça ne se fera pas automatiquementle chemin à suivre
init.el
peut être choisi arbitrairement; en particulier, le répertoire dans lequelinit.el
réside ne doit pas être nommé.emacs.d
. J'utilise ceci pour avoir par exemple.emacs.d.23
côte.emacs.d.24
à côte afin de pouvoir basculer entre les différentes versions d’emacs (le système que j’utilise au travail est passablement obsolète et je ne peux pas installer emacs 24 sur toutes les machines que j’utilise).ce flux de travail ne nécessite pas de modification de l'environnement (et en particulier de la
HOME
variable d'environnement, ce qui peut être souhaitable si vous exécutez des programmes à partir d'emacs, ce qui pourrait être affecté par l'environnement modifié).la source
--load
fichier ed comme étant le fichier init. Pour commencer, il me semble que l'initialisation normale du paquet (par défaut) ne se produira pas etafter-init-hook
qu'elle s'exécutera avant l'évaluation du fichier (factice) init. Ce sont des choses sur lesquelles vous pouvez travailler, certes, mais sachez que ce n'est pas exactement la même chose qu'Emacs utilisant le chemin spécifié comme fichier init.after-init-hook
. Mais je dois dire que bien que j'utilise cette technique tout le temps, je n'ai jamais rencontré de problème avecafter-init-hook
(mais je ne l'utilise pas explicitement, et peut-être que je suis juste chanceux que les paquets que j'utilise ne dépendent pas d'elle) . Qu'entendez-vous par "l'initialisation normale du paquet (par défaut) ne se produira pas"?command-line
cela n'appellera paspackage-initialize
dans cette situation. Vous devrez l’appeler manuellement dans le faux fichier init.Vous pouvez créer un lien symbolique
~/.emacs.d
, c'est ce que je faisEssayez de garder ma configuration emacs
~/.emacs.d
orientée, c’est-à-dire que tous les fichiers de configuration liés à emacs doivent vivre dans ce dossier.Ensuite, j'ai un
~/.emacs_configs
dossier où tous les dossiers de configuration (essentiellement un dossier avec uninit.el
et le reste de la configuration) résident, donc mon dossier de configuration personnel sera~/emacs_configs/iqbal
, une distribution prélude sera dans~/emacs_configs/prelude
Très tôt dans ma configuration personnelle emacs, j’ai défini le
user-emacs-directory
chemin complet de ma configuration en utilisant ce qui suit:Enfin, je crée un lien symbolique
~/.emacs.d
vers la configuration que je souhaite utiliser, par exemple. pour utiliser ma configuration je vais faireln -s ~/emacs_configs/iqbal .emacs.d
. Si vous voulez essayer une configuration, copiez simplement le dossier de configuration~/emacs_configs/whatever_name
et changez le lien symboliqueL’avantage de la troisième étape est que emacs démarré avec ma configuration personnelle peut fonctionner sans
.emacs.d
aucune modification, même si je modifie le lien symbolique alors qu’emacs est en cours d’exécution.Un autre avantage réside dans le
HOME
fait que les programmes externes avec lesquels emacs pourrait avoir besoin d’interagir ne sont pas modifiés.la source
(setq user-emacs-directory (file-truename "~/.emacs.d/"))
afin qu'elles puissent toutes fonctionner sans être affectées simultanément?~/.emacs.d
plutôt que de l'utiliseruser-emacs-directory
. J'ai rencontré au moins une de ces bibliothèques, mais malheureusement, je ne me souviens plus de son nom.Une configuration qui ne change pas
HOME
ou ne fonctionne pas avec des liens symboliques se trouve dans ma réponse à l' adresse https://emacs.stackexchange.com/a/20508/934 . Avec cette configuration, vous pouvez changer leuser-emacs-directory
en définissant une variable d’environnement:et cela fonctionne même avec le démon.
la source
J'ai trouvé cette solution intéressante d' EmacsWiki :
(n'utilise pas exactement un répertoire personnalisé, mais fonctionne bien parce que vous avez de toute façon un seul fichier d'entrée)
la source
Le correctif qui vous permet de spécifier l'emplacement .emacs.d à l'aide de la variable d'environnement EMACS_USER_DIRECTORY est disponible à l' adresse https://debbugs.gnu.org/cgi/bugreport.cgi?bug=15539 mais il n'a pas encore été fusionné.
la source
Définissez votre var avant de charger votre fichier init:
Ensuite, dans votre fichier d'initialisation (dans ce cas
~/.emacs
):la source
En développant la réponse de @phils, j'ai créé ce petit script shell (appelé
testrun.sh
) pour tester ma nouvelle configuration emacs. Cela peut également être utile dans d’autres cas (par exemple, lors du test de modifications apportées à votre fichier init.el qui pourraient endommager emacs).la source
Voici un petit script basé sur la réponse et le commentaire de @ Phil sur la modification de la
HOME
variable d'environnement, puis sa restauration dans Emacs.la source
Si le cas d'utilisation concerne le répertoire ".emacs.d" de configuration unique d'Emacs entre tous les utilisateurs d'une machine Linux, cette solution https://emacs.stackexchange.com/a/4258/5488 fonctionnerait dans la plupart des cas, mais dans certains cas. cases emacs essaie d'écrire des fichiers temporaires dans le répertoire user-emacs (tel que le fichier .ido.last). Dans ce cas, si le répertoire de configuration partagé est autorisé en écriture pour tous les utilisateurs, il fonctionnera mais ne constituera peut-être pas la solution souhaitée, car chaque utilisateur du système peut ne pas vouloir partager le même répertoire pour stocker les fichiers temporaires. Dans ce cas, la solution suivante sera la meilleure option.
Le fichier de configuration partagé commun .emacs.d / init.el devrait commencer par
Assurez-vous que le fichier de configuration partagé .emacs.d dispose d'une autorisation de lecture pour tous les utilisateurs (aucune autorisation d'écriture n'est nécessaire)
Chaque utilisateur aura son propre répertoire "~ / .emacs.d /" mais utilisé uniquement pour enregistrer les fichiers temporaires, mais les packages et autres configurations seront chargés à partir du répertoire de configuration partagé.
la source