Eu gostaria de experimentar o spacemacs. Mas ainda não quero mudar da minha configuração regular do emacs, portanto, gostaria que a configuração que está atualmente no meu .emacs.d
esteja em um diretório e a configuração equivalente para o spacemacs esteja em outro diretório. Não me importo com o nome de nenhum diretório.
Isso é possível, sem chroots / LD_PRELOAD / outros truques desse tipo? Como eu posso fazer isso?
spacemacs
apontando para o executável do emacs e usar o valor de(car command-line-args)
para decidir qual arquivo init será executado. Isso pressupõe, é claro, que você esteja executando em um sistema unix diferente do OS X. (A maneira como os pacotes de aplicativos funcionam no OS X dificulta a execução desse truque.)Respostas:
Uma opção é especificar qual configuração você deseja carregar em um
~/.emacs
arquivo. Quando o Emacs inicia, ele procura esse arquivo antes de procurar~/.emacs.d/
. Para mais detalhes, você pode ler sobre o arquivo Init no manual do Emacs.Por exemplo, você pode criar um
~/.spacemacs.d
e manter o seu existente~/.emacs.d
como ele é. Em seguida, crie um~/.emacs
para carregar o que você deseja usar:Se você quiser, pode encontrar maneiras de mudar as configurações sem modificar o arquivo .emacs. Por exemplo, faça com que o seu .emacs verifique alguma variável de ambiente que você definiu no shell ou em um script usado para iniciar o spacemacs:
fonte
fboundp
) uma função ou comando exclusivo do spacemacs?(setq user-emacs-directory "~/.spacemacs.d/")
fazê-lo trabalho (em umprogn
no ramo spacemacs do seu condicional). Você pode adicionar isso à sua resposta para que eu possa aceitá-la novamente?Como há mais o que fazer no init do que apenas carregar um arquivo e, por outro lado, desvincular
.emacs.d
ou alterarHOME
alterações no meu ambiente de tempo de execução, optei por uma variante do que o @glucas havia proposto. Usei o códigostartup.el
e adicionei o patch do # 15539 para usar uma variável de ambiente para alternar entre diferentes diretórios init. Se nenhum for fornecido, o padrão é usado.Houve um problema com o spacemacs:
async
não sabe sobre o diretório init alterado e, portanto, não consegue encontrar alguns arquivos necessários. Mas isso foi resolvido recentemente no spacemacs: Erro ao usar um diretório de configuração diferente de .emacs.d · Edição nº 3390Então, aqui está o meu
~/.emacs
que deve se comportar como o código init original, mas com o diretório init configurável:Há também uma boa adição que o faz funcionar como um daemon sem esforço extra: o nome do servidor será definido como o nome do diretório init. Então agora você pode iniciar um segundo daemon do emacs com um spacemacs de baunilha
e ainda use o emacsclient
Meu caso de usuário é muito simples e estou surpreso por ser o único: tenho um daemon do emacs sempre em execução e o uso no gui e no console (com ssh por exemplo). Neste emacs, preparo toda a minha documentação e registro de trabalho, para que esteja lá o tempo todo. Mas então eu quero experimentar o spacemacs ou um dos outros pacotes de distribuição e até configurá-lo, até que eu possa aposentar minha configuração atual ou usar algumas das idéias inteligentes. E, como outros, eu queria criar uma configuração básica simples para meus colegas de trabalho - e documentá-la com o modo org na minha instância em execução.
Como o único problema que conheço é
async
e ele não conhece o diretório init alterado, penso na melhor maneira de adicionar algumas configurações àsasync
variáveis que devem ser injetadas por padrão, para que não seja necessário corrigir todos os invocaçõesasync-start
exatamente como os spacemacs haviam feito.fonte
async
. :-( Como já faz alguns meses desde que você postou, você tem uma solução alternativa?async-start
inicia o emacs sem nada e se você quiser usar alguma variável, precisará passar. Mas com certeza seja agradável e conveniente, se o assíncrono puder ser configurado com uma lista de variáveis, que serão usadas em todas as chamadas deasync-start
.(setq custom-theme-directory user-emacs-directory)
aqui.É explicado aqui e há um PR em andamento para adicioná-lo à documentação:
fonte
Ele já foi respondido e aceito, mas se você quiser experimentar novas maneiras de fazer as coisas da maneira reversível (além das configurações do emacs), recomendo que você gaste meia hora se familiarizando com o GNU Stow. É uma espécie de
ln -s
esteróides, e pode haver várias abordagens para usá-lo. Você pode ter toda a configuração em um subdiretório (incluindo configurações offlineimap, configurações do emacs etc.) - isso seria uma abordagem baseada no ambiente - ou ter um subdiretório separado para cada aplicativo que você possui. Doce esquizofrenia.Por exemplo, lista relacionada ao emacs do meu ~ / Stow:
Há uma configuração inicial que eu consegui usar, uma configuração de 'eu fico com os padrões' e uma 'eu vou rolar sozinha'. Posso ativar e desativar cada uma delas e sempre tê-las disponíveis. Cada subdiretório pode ter uma árvore inteira em relação ao meu ~ / e é bastante útil misturar e combinar.
fonte
Eu verifiquei o patch que @Uwe Koloska usou. Não foi incluído no ramo principal. Concordo um pouco, acho que o problema deve ser resolvido fora do emacs usando o shell e deixando o emacs sem saber nada sobre isso.
Talvez esse recurso seja mais lógico da perspectiva do usuário, o uso de um sinalizador seria menos complicado para alguns usuários.
No meu caso de uso, quero manter minha instalação do Emacs e do Spacemacs para que minha variação das duas soluções acima funcione dessa maneira.
script de shell
Primeiro de tudo o script para iniciar o spacemacs:
Este script é chamado
spacemacs
e está instalado na/usr/local/bin
pasta.arquivo .emacs
Então eu preciso de um
.emacs
arquivo na minha pasta pessoal que trate corretamente a variável de ambienteEMACS_USER_DIR
.Eu não sou experiente com o elisp, então vim à tona, pessoas mais experientes provavelmente poderiam criar algo melhor. Mas ei, isso funciona.
Eye-candy
Então porque não adicionar um ícone:
fonte
exec emacs "$@"
.Acho o uso do Chemacs muito fácil para alternar entre diferentes configurações do emacs.
Fiz uma resposta aqui: https://emacs.stackexchange.com/a/44678/11979 .
fonte