Macなどのシェルで使えるコマンドがEmacsのshellやeshellからは実行できないので不便だったので、それを使えるようにした時のメモです。
なお以下のサイトを参考にさせていただきました。
- シェルのPATHをEmacsに引き継がせる
- purcell/exec-path-from-shell - GitHub
- exec-path-from-shell による Emacs とシェルの変数共有
なぜEmacsのシェルからは実行できないのか?
EmacsをランチャーなどGUIから起動すると、EmacsはMacのシェルの環境変数を読み込まないようです。そのためMacのシェルではコマンド名だけで実行できるのコマンドもEmacsシェルではそれができないようです。ちなみに、MacのシェルからEmacsを起動すると環境変数は引き継がれるようです。
exec-path-from-shellはMacシェルの環境変数をEmacsに設定してくれるパッケージとのことなのでこれを導入します。
exec-path-from-shellのインストール
Melpaリポジトリにexec-path-from-shellパッケージが公開されているので、package.elでインストールできました。
Emacsの設定
使い方はEmacsの設定ファイルに以下のように書いてあげれば良いようです。
(when (memq window-system '(mac ns x)) (exec-path-from-shell-initialize))
このようにすれば$MANPATHと$PATHをEmacsのexec-pathに設定してくれるとのこと。他の環境変数もコピーしたい場合はexec-path-from-shell-initializeを呼び出す前にexec-path-from-shell-variables変数をカスタマイズするか、exec-path-from-shell-copy-env関数を使えば良いとのことなので、例えば以下のような感じでしょう。
(when (memq window-system '(mac ns x)) (exec-path-from-shell-copy-env "PYTHONPATH") (exec-path-from-shell-initialize))