Estoy trabajando en una configuración de Emacs pequeña y personalizada que quiero compartir con algunos amigos como un repositorio git para que puedan usar como línea de base para sus propias configuraciones futuras.
Para esto necesito alguna forma de probar mi configuración y la solución más simple que puedo encontrar es algo como:
$ emacs --eval "(setq user-emacs-directory \"~/Code/my_custom_emacs.d/\")"
Pero parece que no puedo hacer que funcione.
Cualquier ayuda muy apreciada.
.emacs.d
directorio personalizado a menos que cambie HOME, lo que me parece problemático. La gente ha proporcionado soluciones a continuación, pero, para mí, esto parece una solicitud de función muy razonable para el propio Emacs.wontfix
y cerrada en el rastreador de errores.Respuestas:
El enfoque básico que uso para esto es modificar
$HOME
, ejecutando:Entonces usas
/path/to/dir/.emacs.d
Es posible que también desee vincular cualquier archivo o directorio de importancia en este directorio de inicio falso a los reales, para que Emacs los vea.
fuente
La forma en que uso para mantener varios
.emacs.d
directorios en paralelo es la siguiente.emacs se inicia así:
Cada
init.el
archivo comienza así, para configurar correctamente las variablesuser-init-file
yuser-emacs-directory
:He encontrado que esto funciona de manera muy confiable en los últimos meses. Aquí hay algunos comentarios:
se rompe
emacs-init-time
, que solo informa el tiempo necesario para cargar la configuración predeterminada del sistema, pero no su propio archivo de inicio. Si está interesado en comparar su tiempo de inicio, tendrá que hacerlo de otra manera (consulte, por ejemplo, ¿Cómo mido el rendimiento del código elisp? ).no es equivalente a un inicio normal y deberá ocuparse de algunos puntos específicos. En particular:
after-init-hook
se ejecuta antes cargar el archivo init.*scratch*
búfer se crea antes de cargar el archivo de inicio. Tendrás que cambiar su modo explícitamente (en lugar de usarinitial-major-mode
).package-initialize
; no se hará automáticamenteel camino a
init.el
puede ser elegido arbitrariamente; en particular, el directorio en el queinit.el
reside no tiene que ser nombrado.emacs.d
. Utilizo esto para tener, por ejemplo, al.emacs.d.23
lado.emacs.d.24
para poder cambiar entre diferentes versiones de emacs (el sistema que estoy usando en el trabajo está desactualizado y no puedo instalar emacs 24 en todas las máquinas que uso).Este flujo de trabajo no requiere modificar el entorno (y especialmente el
HOME
entorno), lo que puede ser deseable si ejecuta programas desde dentro de emacs, que podrían verse afectados por el entorno modificado).fuente
--load
archivo ed es el archivo init. Para empezar, me parece que la inicialización del paquete normal (predeterminado) no se producirá yafter-init-hook
se ejecutará antes de que se evalúe el archivo de inicio (falso). Estas son cosas que puede solucionar, sin duda, pero tenga en cuenta que no es exactamente lo mismo que Emacs que usa la ruta especificada como el archivo de inicio.after-init-hook
. Pero tengo que decir que aunque uso esta técnica todo el tiempo, nunca tuve ningún problemaafter-init-hook
(pero no la uso explícitamente, y tal vez soy afortunado de que los paquetes que uso no confíen en ella) . ¿Qué quiere decir con "la inicialización normal (predeterminada) del paquete no ocurrirá"?command-line
eso no llamarápackage-initialize
en esa situación. Debería llamarlo manualmente en el archivo de inicio falso.Puedes vincular
~/.emacs.d
, esto es lo que hagoIntentar mantener mi configuración de emacs
~/.emacs.d
orientada, es decir, todos los archivos de configuración relacionados con emacs deberían vivir en esa carpetaLuego tengo una
~/.emacs_configs
carpeta donde viven todas las carpetas de configuración (básicamente una carpeta con unainit.el
y el resto de la configuración), por lo que mi carpeta de configuración personal será~/emacs_configs/iqbal
, habrá una distribución previa~/emacs_configs/prelude
Muy temprano en mi configuración personal de emacs configuré
user-emacs-directory
la ruta completa a mi configuración usando lo siguienteLuego, finalmente, hago un enlace simbólico
~/.emacs.d
a la configuración que realmente quiero usar, por ejemplo. para usar mi configuración lo haréln -s ~/emacs_configs/iqbal .emacs.d
. Si desea probar alguna configuración, simplemente copie la carpeta de configuración~/emacs_configs/whatever_name
y cambie el enlace simbólicoLa ventaja del tercer paso es que emacs comenzó con mi configuración personal y no se ve afectada incluso si cambio el
.emacs.d
enlace simbólico mientras emacs se está ejecutando.Otra ventaja es que
HOME
no se modifican los programas externos con los que emacs podría necesitar interactuar y no se ven afectadosfuente
(setq user-emacs-directory (file-truename "~/.emacs.d/"))
para que todas puedan ejecutarse sin verse afectadas simultáneamente?~/.emacs.d
lugar de usaruser-emacs-directory
. He encontrado al menos una de esas bibliotecas, pero desafortunadamente no puedo recordar el nombre.Puede encontrar una configuración que no cambia
HOME
o que funciona con enlaces simbólicos en mi respuesta https://emacs.stackexchange.com/a/20508/934 . Con esta configuración, puede cambiar lauser-emacs-directory
configuración de una variable de entorno:y esto incluso funciona con el demonio.
fuente
Encontré esta solución ordenada de EmacsWiki :
(no utiliza exactamente un directorio personalizado, pero funciona bien porque es muy probable que tenga un solo archivo de entrada de todos modos)
fuente
El parche que le permite especificar la ubicación .emacs.d a través de la variable de entorno `EMACS_USER_DIRECTORY 'está disponible en https://debbugs.gnu.org/cgi/bugreport.cgi?bug=15539 pero aún no se ha fusionado.
fuente
Establezca su var antes de cargar su archivo init:
Luego, en su archivo init (en este caso
~/.emacs
):fuente
Ampliando la respuesta de @phils, hice este pequeño script de shell (llamado
testrun.sh
) para probar mi nueva configuración de emacs. Esto también podría tener sentido en otros casos (por ejemplo, cuando se prueban cambios en su init.el que pueden dañar emacs).fuente
Aquí hay un pequeño script basado en la respuesta y el comentario de @ Phil sobre cómo cambiar la
HOME
variable de entorno y luego restaurarla dentro de Emacs.fuente
Si el caso de uso es compartir el directorio ".emacs.d" de configuración de emacs con todos los usuarios de una máquina Linux, entonces esta solución https://emacs.stackexchange.com/a/4258/5488 funcionaría en la mayoría de los casos, pero en algunos casos emacs intenta escribir archivos temporales en el directorio de usuario-emacs (como el archivo .ido.last). En tales casos, si el directorio de configuración compartido tiene permiso de escritura para todos los usuarios, funcionará, pero puede que no sea la solución deseada, ya que cada usuario del sistema puede no querer compartir el mismo directorio para almacenar archivos temporales. En tal caso, la siguiente solución será una mejor opción.
El archivo de configuración común compartido .emacs.d / init.el debería comenzar con
Haga que la configuración compartida .emacs.d tenga permiso de lectura para todos los usuarios (no necesita tener permisos de escritura)
Cada usuario tendrá su propio directorio "~ / .emacs.d /" pero solo se usará para guardar los archivos temporales, pero los paquetes y otras configuraciones se cargarán desde el directorio de configuración compartido.
fuente