Mac や Ubuntu で Emacs を GUI で立ち上げると PATH の設定が引き継がれないので、引き継ぐための方法がいろいろ公開されている。しかし、elispからshellを起動して環境変数を取りに行っているものが多い。
自分なりの方法
Ubuntu 16.04:
環境変数を.bashrcではなく.profileに記述してログインしなおせばemacsにも反映される。環境変数を.profileに書けば済む話?
$ cp /usr/share/applications/emacs24.desktop ~/.local/share/applications
$ diff /usr/share/applications/emacs24.desktop ~/.local/share/applications/emacs24.desktop
8c8
< Exec=/usr/bin/emacs24 %F
---
> Exec=/bin/bash -lc "/usr/bin/emacs24 %F"
emacs24.desktopをコピーしてExecを変更すると、.bash_login
に記述した環境変数も反映されるようになる。ログインしなおさなくてもよい。
emacs側で何も設定しなくても、.bash_login
や.profile
で設定した任意の環境変数がemacs上で(getenv "環境変数名")
で取得できた。試しただけで普段は使っていないので不具合などは未確認。
Fedora 24:
何もしなくても.bashrc, .bash_profileの環境変数が反映される。
ただしログインしなおす必要がある。
Windows Cygwin + NTemacs:
run
パッケージをインストール。
適当なフォルダにC:\cygwin\bin\run.exe
へのショートカットを作成。
ショートカットの名前をemacsなどに変更。
ショートカットを右クリックしてプロパティを設定
リンク先 C:\cygwin\bin\run.exe zsh -lic /usr/local/emacs/bin/emacs
(cygwinから見たNTemacs(emacs.exe)へのパス。ログインシェルがbashならzshをbashに変える。)
作業フォルダー %HOME%
アイコンの変更 %SystemDrive%\cygwin\usr\local\emacs\bin\emacs.exe
cygwinのパスを理解させるためにsetuo-cygwin
をインストール。
(require 'setup-cygwin nil 'noerror)
ショートカットをクリックして起動すれば.zshrc
などで設定した環境が引き継がれる。
問題点:
windowsの場合は起動に使うshell(zsh)のプロセスがemacsを終了するまでwaitして残る。ウインドウは開かないのでタスクマネージャーで見なければ気にならない。
cygwinは/etc/profile
や/etc/zprofile
で環境変数INFOPATH
を設定する。パスの表記がwindowsの形式ではないのと、セパレータが;
ではなく:
であるためntemacsではinfoが読めない。このためinfoに関してはemacs側でパスを再設定する必要がある。
(when (eq system-type 'windows-nt)
(setenv "INFOPATH" nil))
(setq Info-additional-directory-list
'("c:/cygwin/usr/share/info"
"c:/cygwin/usr/local/emacs/info"))
ただし環境変数INFOPATHを消しているので子プロセスにINFOPATHが引き継がれない。
参考:
EmacsでPATHの設定が引き継がれない問題をエレガントに解決する
NTEmacs + cygwin or msys2 で exec-path-from-shell