LoginSignup
8
8

More than 5 years have passed since last update.

emacsの起動時にPATHなどの環境変数を引き継ぐ

Last updated at Posted at 2016-06-20

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をインストール。

init.el
(require 'setup-cygwin nil 'noerror)

ショートカットをクリックして起動すれば.zshrcなどで設定した環境が引き継がれる。

問題点:

windowsの場合は起動に使うshell(zsh)のプロセスがemacsを終了するまでwaitして残る。ウインドウは開かないのでタスクマネージャーで見なければ気にならない。
cygwinは/etc/profile/etc/zprofileで環境変数INFOPATHを設定する。パスの表記がwindowsの形式ではないのと、セパレータが;ではなく:であるためntemacsではinfoが読めない。このためinfoに関してはemacs側でパスを再設定する必要がある。

init.el
(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

8
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
8
8