Emacs: diferentes usuarios, diferentes temas, mismo archivo de inicio

Emacs: diferentes usuarios, diferentes temas, mismo archivo de inicio

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/.emacsy creé el siguiente .emacsarchivo 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 .emacsarchivo 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:

  1. Escribí un ~myuser/.emacsarchivo completo, que cargaré independientemente del usuario.
  2. Se definió un alias para commonuseresto:

    alias emacs='emacs -Q --load ~myuser/.emacs'
    

Esto hará que emacs ignore commonuserel archivo de inicio y cargue myuserel.

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))

información relacionada