Cocoa Emacs内のshellにおけるPATH設定

Cocoa Emacsを使用していてshell-commandを使用するelisp(私の場合はrcodetools.el)を使用したとき、PATHの設定が意図したものにならなくて困った。

症状としてはM-x shell-commandでのPATHに

M-x shell-command echo $PATH
=> /usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin

setenvやexec-pathで設定したPATHが反映されないということに。

(getenv "PATH") #=> ("/opt/local/bin", ...)
exec-path #=> ("/opt/local/bin", ...)

結果として、macのデフォルトのrubyが使われてしまって困った。
(http://d.hatena.ne.jp/handlename/20101118/1290098356と同じ症状の様子。)

対応としてはshell-file-nameにzshではなくbashを設定することでなおった。
以下コード

    ;; for m-x shell-command
    (setq shell-file-name "/bin/bash")
    ;; for m-x shell
    (setq explicit-shell-file-name "/bin/zsh")

emacs本体もしくはzshのバグなのかな。。。

id:ramusara さんに"/etc/zshenv"が呼ばれてるのではと指摘され、"~/.zshenv"にPATH関係の設定をすれば

    ;; for m-x shell-command
    (setq shell-file-name "/bin/zsh")

でもうまくいきました。ありがとうございまーす。