Me gustaría probar spacemacs. Pero todavía no quiero cambiar mi configuración habitual de emacs, por lo que me gustaría que la configuración que está actualmente en mi .emacs.d
esté en un directorio, y la configuración equivalente para spacemacs esté en otro directorio. No me importa qué nombre tenga el directorio.
¿Es eso posible, sin chroots / LD_PRELOAD / otro truco? ¿Cómo puedo hacerlo?
spacemacs
apunte al ejecutable de emacs y usar el valor de(car command-line-args)
para decidir qué archivo de inicio ejecutar. Esto supone, por supuesto, que está ejecutando en un sistema unix que no sea OS X. (La forma en que funcionan los paquetes de aplicaciones en OS X hace que este truco sea difícil de llevar a cabo).Respuestas:
Una opción es especificar qué configuración desea cargar en un
~/.emacs
archivo. Cuando Emacs se inicie, buscará dicho archivo antes de buscarlo~/.emacs.d/
. Para obtener más detalles, puede leer sobre el archivo Init en el manual de Emacs.Entonces, por ejemplo, puede crear una
~/.spacemacs.d
y mantener su existente~/.emacs.d
tal como está. Luego cree una~/.emacs
para cargar la que tenga ganas de usar:Si lo desea, puede encontrar formas de cambiar las configuraciones sin modificar el archivo .emacs. Por ejemplo, haga que sus .emacs busquen alguna variable de entorno que establezca en su shell o en un script que use para iniciar spacemacs:
fuente
fboundp
) una función o comando que sea exclusivo de spacemacs?(setq user-emacs-directory "~/.spacemacs.d/")
para trabajo (en unprogn
en la rama spacemacs de su condicional). ¿Puedes agregar eso a tu respuesta para que pueda aceptarlo nuevamente?Como hay mucho más que hacer en init que solo cargar un archivo y, por otro lado, simular
.emacs.d
o cambiar losHOME
cambios en mi entorno de tiempo de ejecución, opté por una variante de lo que @glucas había propuesto. Usé el código destartup.el
y agregué el parche # 15539 para usar una variable de entorno para cambiar entre diferentes directorios de inicio. Si no se da ninguno, se usa el predeterminado.Hubo un problema con spacemacs:
async
no conoce el directorio init cambiado y, por lo tanto, no puede encontrar algunos archivos necesarios. Pero esto se ha resuelto recientemente en spacemacs: error al usar un directorio de configuración que no sea .emacs.d · Problema # 3390Así que aquí está mi
~/.emacs
que debería comportarse como el código de inicio original pero con un directorio de inicio configurable:También hay una buena adición que lo hace funcionar como un demonio sin esfuerzo adicional: el nombre del servidor se establecerá en el nombre del directorio init. Así que ahora puedes comenzar un segundo demonio emacs con un vainilla spacemacs
y sigo usando emacsclient
Mi caso de uso es muy simple y estoy asombrado de ser el único: tengo un demonio emacs siempre en ejecución y lo uso desde la interfaz gráfica de usuario y sobre la consola (con ssh, por ejemplo). En este emacs preparo toda mi documentación y registro de trabajo, por lo que tiene que estar allí todo el tiempo. Pero luego quiero probar spacemacs o uno de los otros paquetes de distribución e incluso configurarlo, hasta que pueda retirar mi configuración actual o usar algunas de las ideas inteligentes. Y como otros, quería crear una configuración básica simple para mis compañeros de trabajo y documentarla con el modo org en mi instancia de ejecución.
Dado que el único problema que conozco es
async
y que no conoce el directorio de inicio cambiado, pienso en la mejor manera de agregar alguna configuraciónasync
que tenga variables que deberían inyectarse de forma predeterminada, por lo que no es necesario parchear todo invocaciones deasync-start
lo que habían hecho los spacemacs.fuente
async
. :-( Ya que han pasado unos meses desde que publicaste, ¿tienes una solución?async-start
inicia emacs sin nada y si desea usar alguna variable, debe pasarla. Pero claro, sería Sea agradable y conveniente, si async se puede configurar con una lista de variables, que se utilizará en cada invocación deasync-start
.(setq custom-theme-directory user-emacs-directory)
aquí.Aquí se explica , y hay un RP en curso para agregarlo a la documentación:
fuente
Ya ha sido respondido y aceptado, pero si tiene ganas de probar nuevas formas de hacer las cosas de forma reversible (más allá de las configuraciones de emacs), le recomiendo que pase media hora familiarizándose con GNU Stow. Es una especie de
ln -s
esteroides, y puede haber varios enfoques para usarlo. Puede tener toda la configuración en un subdirectorio (incluidas las configuraciones offlineimap, las configuraciones de emacs, etc.), que sería un enfoque basado en el entorno, o tener un subdirectorio separado para cada aplicación que tenga. Dulce esquizofrenia.Por ejemplo, lista relacionada con emacs de mi ~ / Stow:
Hay una configuración inicial que he logrado utilizar, una configuración 'Me quedo con los valores predeterminados' y una 'Voy a rodar la mía'. Puedo activar y desactivar cada uno de estos y tenerlos siempre disponibles. Cada subdirectorio puede tener un árbol completo en relación con mi ~ / y es bastante útil mezclar y combinar.
fuente
Revisé el parche que usó @Uwe Koloska. No estaba incluido en la rama principal. Estoy de acuerdo, creo que el problema debería resolverse fuera de emacs usando el shell y dejando que emacs no sepa nada al respecto.
Tal vez esa característica sería más lógica desde la perspectiva del usuario, el uso de una bandera sería menos complicado para algunos usuarios.
En mi caso de uso, quiero mantener mi instalación de Emacs y Spacemacs, por lo que mi variación de las dos soluciones anteriores funciona de esta manera.
script de shell
Primero que nada el script para lanzar spacemacs:
Este script se llama
spacemacs
y se instala en la/usr/local/bin
carpeta.archivo .emacs
Luego necesito un
.emacs
archivo en mi carpeta de inicio que trate adecuadamente la variable de entornoEMACS_USER_DIR
.No tengo experiencia con elisp en absoluto, así que se me ocurrió esto, las personas más experimentadas probablemente podrían encontrar algo mejor. Pero bueno, funciona.
Ojos dulces
Entonces, ¿por qué no agregar un icono?
fuente
exec emacs "$@"
.Encuentro que usar Chemacs es realmente fácil para cambiar entre diferentes configuraciones de emacs.
Hice una respuesta aquí: https://emacs.stackexchange.com/a/44678/11979 .
fuente