To pytanie zostało zadane na stronie superużytkownika, że istnieje sposób na przeładowanie zmiennych środowiskowych w emacach , ale nie podano dobrego rozwiązania.
Używam EmacsClient z często więcej niż 30 otwartymi buforami, jeśli zmienię zmienną środowiskową w powłoce, muszę wyjść z EmacsClient (i ponownie otworzyć wszystkie bufory) lub muszę ręcznie ustawić zmienną środowiskową również w Emacsie. Uważam za denerwujące, że nie mogę łatwo zaktualizować zmiennych środowiskowych w Emacsie. Jakieś sugestie?
emacsclient
environment
Håkon Hægland
źródło
źródło
Odpowiedzi:
exec-path-from-shell udostępnia
exec-path-from-shell-copy-env
polecenie, które pozwala skopiować wartość zmiennych środowiskowych do sesji Emacsa. Na przykładM-x exec-path-from-shell-copy-env RET FOO
ustawia także wartość$FOO
w Emacsie.Zauważ, że
exec-path-from-shell-copy-env
spawnuje nową powłokę, aby wyodrębnić wartość zmiennej środowiskowej. Dlatego będzie działał tylko dla zmiennych, które ustawisz w plikach konfiguracyjnych powłoki (np..bashrc
), Ale nie będzie działał tylko dla zmiennych ustawianych w uruchomionej sesji powłoki zexport
. Wyodrębnienie tych zmiennych jest zasadniczo niemożliwe bez zawiłych włamań, które sprawdzają/proc/
lub podobne API pod kątem uruchomionych procesów.źródło
Jako obejście można zastosować następujące (Linux, Bash):
printenv -0 > env.txt
z okna terminala Bash,Aktualizacja
Okazuje się, że można to zrobić bardziej elegancko, używając
--eval
opcjiemacsclient
polecenia: Zdefiniuj skrypt Bashupdate_emacs_env
:gdzie
server_name
jest nazwa twojego serwera Emacs imy-update-env
jest funkcją zdefiniowaną przez twój~/.emacs
plik:Teraz możesz po prostu pisać
update_emacs_env
w wierszu poleceń powłoki, aby zaktualizować zmienne środowiskowe Emacsa.źródło
source
.bashrc, .bash_profile itp.?export VAR=value
Użyłem tego:
Pozwala wyeksportować nazwaną zmienną, EG:
źródło