LoginSignup
9
8

More than 5 years have passed since last update.

Emacsにzshの環境変数PATHを取り込む

Last updated at Posted at 2012-12-26

追記:

この記事の内容は時代遅れなので、purcell/exec-path-from-shellを利用しよう。
EmacsでPATHの設定が引き継がれない問題をエレガントに解決する - Qiita

Ruby や Python を /usr/bin/usr/local/bin などのシステムディレクトリではなく、バージョンごとにホームディレクトリ内にインストールして環境変数 PATH を通して使用する、なんてひとも少なくはないですね。筆者も rbenv や Pythonz 、 nodebrew に頼りきりです。

ところで Ubuntu で GTK 版の Emacs をデスクトップのランチャーから起動すると、ユーザのログインシェルを /bin/zsh などに設定してても、 環境変数をちゃんと引き継いでくれません。これは困った! 特に /usr/bin/ruby には何もありませんし。

Emacs から term などで、 zsh を起動する場合はその中で .zshenv を読んでくれるのでまた困らないんですけど、 Emacs のシェルと言ったら Eshell なので、こっちの PATH は確実に設定しておきたいところです。

あ、Zsh の PATH はちゃんと .zshenv とかに設定しといてください。

set_path.el
(let* ((zshpath (shell-command-to-string
         "/usr/bin/env zsh -c 'printenv PATH'"))
       (pathlst (split-string zshpath ":")))
  (setq exec-path pathlst)
  (setq eshell-path-env zshpath)
  (setenv "PATH" zshpath))

これを評価すると

  1. zsh を起動して、出力される $PATH を文字列として受け取る
  2. 1 で取得した PATH 環境変数を Emacs の環境にも設定する
  3. PATH: 区切り形式の文字列なのでリストに変換する
  4. 2 のリストを Emacs の exec-patheshell-path-env に設定する

って流れで設定していきます。

練習がてらにもうちょっと汎用性持たせて Windows のこともちょびっと考慮しつつ Emacs Lisp としてまとめてみるのも良いですかね。

9
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
8