Emacs: usuários diferentes, temas diferentes, mesmo arquivo init

Emacs: usuários diferentes, temas diferentes, mesmo arquivo init

Eu uso o emacs no trabalho, onde costumo me conectar ao sistema com dois usuários diferentes:

  • myuser
  • commonuser

O primeiro é meu usuário pessoal, enquanto o último é compartilhado por toda a equipe para gerenciar um aplicativo. (Dica irrelevante: esta é uma ideia terrível. Geralmente existem maneiras melhores, embora um pouco menos óbvias, de gerenciar privilégios. Aprenda com minha experiência).

Para evitar confusões infelizes, quero definir um tema separado para cada usuário e defini-lo em seus respectivos arquivos init.

Todo o resto definido no arquivo init deve ser compartilhado pelos dois.

Solução simples

Eu crio um arquivo init separado /path/to/init/file/.emacse criei o seguinte .emacsarquivo no diretório inicial de cada usuário:

(load-file "/path/to/init/file/.emacs")
(load-theme my-favorite-theme)

Isso funciona perfeitamente. Mas é claro que isso seria muito fácil!

Nova solução necessária

Pediram-me para não modificar o .emacsarquivo commonuser. Não vou entrar em detalhes sobre o motivo, mas permanece o fato de que tive que encontrar uma solução alternativa. Aqui está o que consegui até agora:

  1. Escrevi um ~myuser/.emacsarquivo completo, que irei carregar independente do usuário.
  2. Definiu um alias para commonuserassim:

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

Isso fará com que o emacs ignore commonusero arquivo init e carregue myuseros.

Agora minha (simples) pergunta é:

Como posso fazer com que o emacs se comporte de maneira diferente de acordo com o usuário que o inicia?

Estou procurando fazer algo semelhante:

if [[ $(whoami) == "myuser" ]]; then 
      (load-theme 'theme1)
if [[ $(whoami) == "commonuser" ]]; then 
      (load-theme 'theme2)

Responder1

O Emacs possui variáveis ​​que descrevem o nome do host e o nome de usuário atuais. Assim como você fariapara fazer algo condicionalmente com base no nome do host, você tem a variável user-login-name(da documentação: "O nome do usuário, retirado das variáveis ​​de ambiente, se possível.").

Então, acho que algo assim se aplicaria:

(when (string-equal user-login-name "myuser")
    (load-theme 'theme1))

(when (string-equal user-login-name "commonuser")
    (load-theme 'theme2))

informação relacionada