LoginSignup
4
3

More than 5 years have passed since last update.

Emacsに環境変数を取り込む… をもっと。

Posted at

こんにちはこんにちは、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)

この函数を評価すると、以下の副作用が発生します。

  1. zsh が起動され、 $PATH を取得します
    • このとき、 .zshenv などが実行されます
  2. Emacsの環境変数 "PATH" に、zshの $PATH の内容をセットする
  3. 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")

これでいけます。

その他

上記で説明した用途だと問題ないはずですが、このレールから外れたところにまだバグがあ残ってるくさいので直していきたい…?

4
3
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
4
3