Utilizo emacs en el trabajo, donde suelo conectarme al sistema con dos usuarios diferentes:
myuser
commonuser
El primero es mi usuario personal, mientras que el segundo lo comparte todo el equipo para gestionar una aplicación. (Pista irrelevante: esta es una idea terrible. En general, existen formas mejores, aunque un poco menos obvias, de administrar los privilegios. Tómelo de mi experiencia).
Para evitar confusiones desafortunadas, quiero definir un tema separado para cada usuario y definirlo en sus respectivos archivos de inicio.
Todo lo demás definido en el archivo de inicio debe ser compartido por los dos.
Solución simple
Creo un archivo de inicio separado /path/to/init/file/.emacs
y creé el siguiente .emacs
archivo en el directorio de inicio de cada usuario:
(load-file "/path/to/init/file/.emacs")
(load-theme my-favorite-theme)
Esto funciona de maravilla. ¡Pero claro, eso sería demasiado fácil!
Se necesita una nueva solución
Me pidieron que no modificara el .emacs
archivo de commonuser
. No entraré en detalles de por qué, pero el hecho es que tuve que encontrar una solución. Esto es lo que obtuve hasta ahora:
- Escribí un
~myuser/.emacs
archivo completo, que cargaré independientemente del usuario. Se definió un alias para
commonuser
esto:alias emacs='emacs -Q --load ~myuser/.emacs'
Esto hará que emacs ignore commonuser
el archivo de inicio y cargue myuser
el.
Ahora mi (simple) pregunta es:
¿Cómo puedo hacer que emacs se comporte de manera diferente según el usuario que lo inicia?
Estoy buscando hacer algo similar:
if [[ $(whoami) == "myuser" ]]; then
(load-theme 'theme1)
if [[ $(whoami) == "commonuser" ]]; then
(load-theme 'theme2)
Respuesta1
Emacs tiene variables que describen el nombre de host y el nombre de usuario actuales. Justo como lo haríaspara hacer algo condicionalmente basado en el nombre de host, tiene la variable user-login-name
(de los documentos: "El nombre del usuario, tomado de las variables de entorno si es posible").
Entonces, supongo que se aplicaría algo como esto:
(when (string-equal user-login-name "myuser")
(load-theme 'theme1))
(when (string-equal user-login-name "commonuser")
(load-theme 'theme2))