結論
Emacsのことが全然わかってないので使ってコード読んでフルボッコにしてください
はじめに
しばらく前にEmacsにzshの環境変数PATHを取り込むといふ記事を書きました童貞です。
こんばんはこんばんは。
標準以外のシェル (Zshellとか) を愛用してると、 GUI な Emacs を利用したときに環境変数、たとへばPATHなどがふだんのシェル環境と一致しなくて困ったことが起こりえます。
具体的にはユーザディレクトリ下に.rbenvディレクトリがあって、ここにあるrubyを使用したい。そのために$HOME/.rbenv/shimsがPATHの先頭にあって欲しい。みたいなケースですね。
そんな問題を、.emacsにちょっとしたコード断片を書き加へて解決しようとしたのが前回の記事でした。が、
練習がてらにもうちょっと汎用性持たせて Windows のこともちょびっと考慮しつつ Emacs Lisp としてまとめてみるのも良いですかね。
……などと、前の記事で口走ってしまったので、旧年中に伏線を回収に上がりました。
つまるところ、この記事は人柱募集所なのですがヾ(〃><)ノ゙☆
対象環境
Emacs24が動いてるUNIXっぽい環境(OS Xとか、Linuxとか、*BSDとか…)なら、きっと動く気がします。WindowsとかCygwin環境のことはちょっとわからないので、そのうち調べます……。
Emacs23では動作確認すらしてないです……!
導入
インストール方法はshellenv.elをダウンロードしてload-pathの通ったディレクトリに抛り込むなり、git cloneしてきてディレクトリをload-pathに追加するなり、お好みの方法でどうぞ。
個人的にはel-getを使ったパッケージ管理が最近のイチオシです。ただ、まだちゃんとしたレシピファイルを用意してないので、.emacsファイル(できれば$HOME/.emacs.d/init.el)にel-getセットアップ用のスクリプトを加へて、さらにその下に以下のコードを貼ってくださると良さげです。
(setq el-get-sources
'((:name shellenv
:type github
:pkgname "zonuexe/shellenv-el"
:description "load environment variables of your shell")))
(el-get 'sync 'shellenv)
設定
いちばんシンプルなのはこんな感じです。custom-set-variablesじゃなくてsetqでも可。
(require 'shellenv)
(custom-set-variables
'(shellenv/shell 'zsh))
(shellenv/setpath)
あるいは、起動するシェルのパスを直接指定することもできます。
(require 'shellenv)
(custom-set-variables
'(shellenv/path "/usr/local/bin/zsh"))
(shellenv/setpath)
わざわざ'zshと指定するのは、このスクリプトがbash, dash, ash(それとPOSIX.1準拠っぽいその他sh)にも対応してるからですヾ(〃><)ノ゙☆
わざわざ「対応」って呼ぶほどの最適化をしてるわけではないのですが…‥。
書いてみて
自分でLispのコードをちゃんと書いたのはこれが初めてなのですが、こんな書き方で良いんですかね…? よくわからないので、無作法なところがあれば指摘が欲しいです ヾ(〃><)ノ゙
変数名や函数名の付け方はかなりオレオレで、プレフィクスにはshellenv/を付ける、スクリプトローカル用の函数はプレフィクスの次に.を付ける、ローカル変数はlet*束縛内で.を付けて短めな名前にする、みたいなルールでつけました。