Eu gostaria defonteum script de shell que altera minhas variáveis de ambiente no Emacs. Ou seja, eu gostaria que o shell script alterasse o ambiente no qual o Emacs é executado e gostaria de fazer isso dentro de uma sessão do Emacs em execução.
Em outras palavras:
- Eu inicio o Emacs a partir de
zsh
- Gostaria de obter um
zsh
script do Emacs que altere variáveis de ambiente comoLD_LIBRARY_PATH
Fundo:
Esta é uma tentativa de contornar o problema que descreviaqui, onde eu precisodefinir LD_LIBRARY_PATH
para executar o Emacs, mas precisodesarmarpara executar uma distribuição Python específica (Anaconda).
Especificamente, quero usar um pacote Emacs (emacs-jedi) que requer acesso a esta distribuição Python, mas atualmente precisodesarmar LD_LIBRARY_PATH
primeiro a iniciar o Emacs, então eu precisariadefinirmais tarde para que eu possa usar emacs-jedi
no Emacs.
Tudo isso é possível?
Responder1
Não acredito que isso seja possível, pois cada vez que você invoca um subshell para obter o script, está invocando um processo filho do processo original onde os aplicativos emacs foram iniciados.
A exportação de variáveis de ambiente é uma via de mão única onde apenas o pai pode fornecer variáveis para qualquer processo filho, mas nenhum processo filho pode manipular o ambiente do pai.
Experimentar
Estou usando, vim
mas o mesmo deve se aplicar ao emacs
. Arquivo de amostra para a fonte.
$ more ~/vars.bash
export VAR=somevalue
Ambiente pai inicial,
$VAR
não está definido$ echo $VAR $
Lançar
vim
. Em seguida, invoque um subshell para obter o arquivo acima (:sh
).# check variable $ echo $VAR $ # source and re-check $ source ~/vars.bash $ echo $VAR somevalue
Saia do subshell e retorne ao vim. Em seguida, invoque outro subshell (
:sh
).$ exit ... back in vim, do another `:sh` ... # check variable $ echo $VAR $
Responder2
Se tudo que você precisa é desabilitar LD_LIBRARY_PATH após carregar o Emacs, basta adicionar
(setenv "LD_LIBRARY_PATH")
para ~/.emacs
ou outro arquivo init.
Se você precisar alternar, salve o resultado em (getenv "LD_LIBRARY_PATH")
uma variável primeiro para poder restaurá-lo mais tarde.
Responder3
Eu encontrei este belo pedaço de lisp do Emacs que usa diff
para comparar as saídas do export
comando antes e depois do sourcing e, em seguida, chama setenv
a função de acordo:
https://gist.github.com/ffevotte/9345586