Obtener un script de shell desde Emacs

Obtener un script de shell desde Emacs

Me gustaríafuenteun script de shell que cambia mis variables de entorno desde Emacs. Es decir, me gustaría que el script de shell cambiara el entorno en el que se ejecuta Emacs, y me gustaría hacerlo desde una sesión de Emacs en ejecución.

En otras palabras:

  1. Empiezo Emacs desdezsh
  2. Me gustaría obtener un zshscript desde Emacs que cambie las variables de entorno comoLD_LIBRARY_PATH

Fondo:

Este es un intento de evitar el problema que describí.aquí, donde necesitocolocar LD_LIBRARY_PATHpara ejecutar Emacs, pero necesitodesarmadopara ejecutar una distribución de Python específica (Anaconda).

Específicamente, quiero usar un paquete de Emacs (emacs-jedi) que requiere acceso a esta distribución de Python, pero actualmente necesitodesarmado LD_LIBRARY_PATHprimero en iniciar Emacs, por lo que necesitaríacolocarmás tarde para poder usarlo emacs-jedidesde Emacs.

¿Es esto posible?

Respuesta1

No creo que esto sea posible, ya que cada vez que invocas un subshell para generar el script, estás invocando un proceso hijo del proceso original donde se iniciaron las aplicaciones de emacs.

La exportación de variables de entorno es una vía de sentido único donde solo el padre puede proporcionar variables a cualquier proceso hijo, pero ningún proceso hijo puede manipular el entorno del padre.

Experimento

Lo estoy usando vimpero lo mismo debería aplicarse a emacs. Archivo de muestra a la fuente.

$ more ~/vars.bash 
export VAR=somevalue
  1. Entorno principal inicial, $VARno está configurado

    $ echo $VAR
    
    $
    
  2. Lanzamiento vim. Luego invoque un subshell para generar el archivo anterior ( :sh).

    # check variable
    $ echo $VAR
    
    $
    
    # source and re-check
    $ source ~/vars.bash
    $ echo $VAR
    somevalue
    
  3. Salga del subshell y regrese a vim. Luego invoca otra subcapa ( :sh).

    $ exit
    
    ... back in vim, do another `:sh` ...
    
    # check variable
    $ echo $VAR
    
    $ 
    

Respuesta2

Si todo lo que necesita es desarmar LD_LIBRARY_PATH después de cargar Emacs, simplemente agregue

(setenv "LD_LIBRARY_PATH")

a ~/.emacsu otro archivo de inicio.

Si necesita intercambiar de un lado a otro, (getenv "LD_LIBRARY_PATH")primero guarde el resultado en una variable para poder restaurarlo más tarde.

Respuesta3

Encontré esta buena pieza de Emacs lisp que se utiliza diffpara comparar las salidas del exportcomando antes y después del abastecimiento, y luego llama a setenvla función en consecuencia: https://gist.github.com/ffevotte/9345586

información relacionada