こんにちはこんにちは、DT です。全然説明してなかった気がするので、説明に上がりました。
ステマのお時間です。
前回
前提
- EmacsはGUIで起動したい
- システムデフォルトじゃないシェル(zshとか)を常用してる
- Bash と zsh で二度も同じ設定を書きたくない
設定するのがめんどくさいだけじゃなくて、実際に困ることがありますからね ヾ(〃><)ノ゙☆
導入
前回の記事ではel-getを使って導入する方法をおすすめしましたが、OS X環境に最新のGitを入れると .gitconfig
とデフォルトの git
のバージョンのミスマッチでel-getが動かなくなる現象が起こるので、 $HOME/.emacs.d/site-lisp/shellenv-el
みたいな位置に配置することにしました。
僕は .emacs.d
をGitで管理してるので、サブモジュールにして置きます。つまり ~/.emacs.d
にリポジトリルートがあるとすると、こんな感じのコマンドで配置できますね。
git submodule add git@github.com:zonuexe/shellenv-el.git site-lisp/shellenv-el
で、 ~.emacs.d/init.el
の、できるだけ頭の行に二行を足します。
.emacs
(require 'shellenv "~/.emacs.d/site-lisp/shellenv-el/shellenv")
(shellenv/setpath 'zsh)
この函数を評価すると、以下の副作用が発生します。
-
zsh
が起動され、$PATH
を取得します- このとき、
.zshenv
などが実行されます
- このとき、
- Emacsの環境変数
"PATH"
に、zshの$PATH
の内容をセットする -
setq-default
で次の変数を設定する-
eshell-path-env
にzshから取得した$PATH
を(Lispの)リストに変換したもの -
exec-path
にzshから取得した$PATH
のリストに既存のexec-path
を追加したリスト
-
その結果、次のような効果を得ることができます。
-
shell-command
でzshと同じコマンドを実行することができる - EShellでzshと同じコマンドを実行することができる
やりましたね ヾ(〃><)ノ゙☆
さらに
任意の環境変数をセットしたい
$HOGE
を取得したいときは、こんなふうに書けば良いですね。
.emacs
(shellenv/setenv "HOGE" 'zsh)
shellenv/setenv
は環境変数の取得とセットをします。
任意の環境変数を取得したい
別にセットはしなくていいけど、取得した文字列を自分で利用したい、みたいな場合。
.emacs
(shellenv/.getenv "HOGE" 'bash)
こんな感じで取得できます。
何度もシェルの名前を指定するのはだるい
.emacs
(setq shellenv/shell 'zsh)
(shellenv/setpath)
(shellenv/setenv "HOGE")
これでいけます。
その他
上記で説明した用途だと問題ないはずですが、このレールから外れたところにまだバグがあ残ってるくさいので直していきたい…?