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

3

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

  • myuser
  • commonuser

O primeiro é meu próprio usuário pessoal, enquanto o segundo é compartilhado por toda a equipe para gerenciar um aplicativo. (Dica irrelevante: essa é uma idéia terrível. Geralmente, há maneiras melhores, embora menos óbvias, de gerenciar privilégios. Tire isso da minha experiência).

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

Tudo o mais definido no arquivo init deve ser compartilhado pelos dois.

Solução simples

Eu criei um arquivo init separado /path/to/init/file/.emacs e criei o seguinte arquivo .emacs no diretório pessoal de cada usuário:

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

Isso funciona como um encanto. Mas claro, isso seria fácil demais!

Nova solução necessária

Fui solicitado a não modificar o arquivo .emacs de commonuser . Eu não vou entrar nos detalhes do porquê, mas o fato é que eu tive que encontrar uma solução alternativa. Aqui está o que eu tenho até agora:

  1. Escrevi um arquivo ~myuser/.emacs completo, que carregarei independentemente do usuário.
  2. Definiu um alias para commonuser da seguinte forma:

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

Isso fará com que o emacs ignore o arquivo init commonuser e carregue myuser .

Agora, minha (simples) pergunta é:

Como posso fazer o emacs se comportar de maneira diferente de acordo com o usuário que o lança?

Estou procurando fazer algo semelhante:

if [[ $(whoami) == "myuser" ]]; then 
      (load-theme 'theme1)
if [[ $(whoami) == "commonuser" ]]; then 
      (load-theme 'theme2)
    
por rahmu 10.07.2012 / 17:31

1 resposta

5

O Emacs possui variáveis que descrevem o nome do host atual e o nome de usuário. Assim como você faria para fazer condicionalmente algo baseado no nome do host , você tem a variável user-login-name (dos documentos: "O nome do usuário, tirado de variáveis de ambiente, se possível.").

Então, acho que algo assim se aplica:

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

(when (string-equal user-login-name "commonuser")
    (load-theme 'theme2))
    
por 10.07.2012 / 17:37

Tags