Je voudrais essayer spacemacs. Mais je ne souhaite pas pour l'instant passer de la configuration habituelle à emacs. J'aimerais donc que la configuration qui se trouve actuellement dans mon .emacs.d
répertoire soit dans un répertoire et que la configuration équivalente pour spacemacs se trouve dans un autre répertoire. Peu importe le nom de chaque répertoire.
Est-ce possible, à court de chroots / LD_PRELOAD / autre telle ruse? Comment puis-je le faire?
spacemacs
pointant sur l'exécutable emacs et utiliser la valeur de(car command-line-args)
pour décider du fichier init à exécuter. Ceci suppose, bien sûr, que vous utilisez un système Unix autre que OS X. (La manière dont les bundles d'application fonctionnent sur OS X rend cette astuce difficile à réaliser.)Réponses:
Une option consiste à spécifier la configuration que vous souhaitez charger dans un
~/.emacs
fichier. Quand Emacs démarre, il recherchera un tel fichier avant de regarder dedans~/.emacs.d/
. Pour plus de détails, vous pouvez en savoir plus sur le fichier Init dans le manuel Emacs.Ainsi, par exemple, vous pouvez créer un
~/.spacemacs.d
et conserver votre existant~/.emacs.d
tel quel. Créez ensuite un~/.emacs
fichier pour charger celui que vous souhaitez utiliser:Si vous le souhaitez, vous pouvez trouver des moyens de changer de configuration sans modifier le fichier .emacs. Par exemple, demandez à vos .emacs de vérifier certaines variables d’environnement que vous définissez dans votre shell ou dans un script que vous utilisez pour démarrer spacemacs:
la source
fboundp
) une fonction ou une commande unique à spacemacs?(setq user-emacs-directory "~/.spacemacs.d/")
cela pour cela travail (dans uneprogn
branche de votre conditionnel). Pouvez-vous ajouter cela à votre réponse pour que je puisse l'accepter à nouveau?Comme il y a plus à faire sur init que le simple chargement d'un fichier et que, d'autre part, créer des liens symboliques
.emacs.d
ou modifier lesHOME
modifications de mon environnement d'exécution, j'ai opté pour une variante de ce que @glucas avait proposé. J'ai utilisé le code destartup.el
et ajouté le correctif de # 15539 pour utiliser une variable d'environnement permettant de basculer entre différents répertoires d'initialisation. Si aucun n'est donné, la valeur par défaut est utilisée.Il y avait un problème avec spacemacs:
async
ne sait pas à propos du répertoire init modifié et ne peut donc pas trouver certains fichiers nécessaires. Mais ceci a été résolu récemment dans spacemacs: Erreur lors de l’utilisation d’un répertoire de configuration autre que .emacs.d · Issue # 3390Voici donc mon
~/.emacs
qui devrait se comporter comme le code init initial mais avec un répertoire init configurable:Il y a aussi un ajout intéressant qui le fait fonctionner comme un démon sans effort supplémentaire: le nom du serveur sera défini sur le nom du répertoire init. Alors maintenant, vous pouvez démarrer un deuxième démon emacs avec un spacemacs vanille
et toujours utiliser emacsclient
Mon cas d'utilisation est très simple et je suis stupéfait d'être le seul: j'ai un démon emacs qui tourne toujours et je l'utilise depuis gui et sur console (avec ssh par exemple). Dans cet Emacs, je prépare toute ma documentation et mon journal de travail, il doit donc être là tout le temps. Mais ensuite, je veux essayer spacemacs ou l'un des autres packages de distribution et même le configurer, jusqu'à ce que je puisse abandonner ma configuration actuelle ou utiliser certaines des idées intelligentes. Et comme d'autres, je voulais créer une configuration de base simple pour mes collègues - et la documenter avec org-mode dans mon instance en cours d'exécution.
Comme le seul problème que je connaisse est
async
qu’il ne connait pas le répertoire d’initialisation modifié, je pense au meilleur moyen d’ajouter une configuration à desasync
variables qui devraient être injectées par défaut, de sorte qu’il n’est pas nécessaire de corriger tous les correctifs. invocations d’async-start
espace comme les astronautes.la source
async
. :-( Depuis que vous avez posté depuis quelques mois, avez-vous une solution de contournement?async-start
démarre emacs sans rien et si vous voulez utiliser une variable, vous devez la transmettre. être agréable et pratique, si async peut être configuré avec une liste de variables, qui sera utilisé à chaque invocation deasync-start
.(setq custom-theme-directory user-emacs-directory)
ici.Il est expliqué ici et un PR est en cours pour l'ajouter à la documentation:
la source
Cela a déjà été répondu et accepté, mais si vous avez envie d'essayer de nouvelles façons de faire les choses de manière réversible (au-delà de la configuration emacs), je vous recommanderais de passer une demi-heure à vous familiariser avec GNU Stow. C'est en quelque sorte
ln -s
sur les stéroïdes, et il pourrait y avoir plusieurs approches pour l'utiliser. Vous pouvez avoir la configuration complète dans un seul sous-répertoire (y compris les configurations offlineimap, emacs, etc.) - ce serait une approche basée sur l'environnement - ou avoir un sous-répertoire distinct pour chaque application que vous possédez. Schizophrénie sucrée.Exemple: liste relative à emacs de mon ~ / Stow:
Il y a une configuration initiale que j'ai réussi à rendre utilisable, une configuration «je reste avec les valeurs par défaut» et une «je vais rouler la mienne». Je peux simplement activer et désactiver chacun de ces éléments et les avoir toujours disponibles. Chaque sous-répertoire peut avoir un arbre entier par rapport à mon ~ / et il est très pratique de le mélanger.
la source
J'ai vérifié le patch utilisé par @Uwe Koloska. Ce n'était pas inclus dans la branche principale. Je suis plutôt d’accord, je pense que le problème devrait être résolu en dehors d’emacs en utilisant le shell et laisser emacs n’en sait rien.
Peut-être que cette fonctionnalité serait plus logique du point de vue de l'utilisateur, l'utilisation d'un drapeau serait moins compliquée pour certains utilisateurs.
Dans mon cas d'utilisation, je souhaite conserver mon installation Emacs et Spacemacs afin que ma variante des deux solutions ci-dessus fonctionne de la manière suivante.
script shell
Tout d’abord le script de lancement de spacemacs:
Ce script s'appelle
spacemacs
et est installé dans le/usr/local/bin
dossier.fichier .emacs
Ensuite, j'ai besoin d'un
.emacs
fichier dans mon dossier personnel qui traiterait correctement la variable d'environnementEMACS_USER_DIR
.Je ne suis pas du tout habitué à elisp, alors je suis venu ici, des personnes plus expérimentées pourraient probablement proposer quelque chose de mieux. Mais bon, ça marche.
Eye-candy
Alors pourquoi ne pas ajouter une icône:
la source
exec emacs "$@"
.Je trouve l’utilisation de Chemacs vraiment facile pour basculer entre les différentes configurations d’emacs.
J'ai fait une réponse ici: https://emacs.stackexchange.com/a/44678/11979 .
la source