emacs でシェルの環境変数を全部読み込む

emacs で普段使っているシェルの環境変数を引き継ぎたい。

exec-path-from-shell を使うのがいいらしいが、 使いたい環境変数が増えるたびに el ファイルに追加していくのはめんどくさい。

ちょっと古いやり方かもしれないが、 実況中のシェルの環境変数を全部 el ファイルに書きだすようなスクリプトを書いた。 .emacs.d を git で管理していて github などにあげている場合は、 shellenv.el を .gitignore に追加しておかないとたぶん危ない。

https://github.com/handlename/dot-emacs/blob/master/scripts/init_shellenv.pl

実行すると、

$ perl scripts/init_shellenv.pl

こういうファイルが作られる。

$ cat shellenv.el
(setenv "TERM" "screen")
(setenv "PLENV_ROOT" "/Users/handle/.plenv")
(setenv "PLENV_VERSION" "5.18.1")
(setenv "HOME" "/Users/handle")
(setenv "GOPATH" "/Users/handle")
...

で、 init.el とかに

(load-file (concat user-emacs-directory "/shellenv.el"))

と書いておけば全部 set される。

元ネタはこれ。

シェルと Emacsの PATHを共有する - Life is very short