結論
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*
束縛内で.
を付けて短めな名前にする、みたいなルールでつけました。