pickup.el書いた

emacsでvirtualenvとbuildoutでツクッタpythonを呼ぼうとするときに必要になった。

考え方は単純で「現在の位置から親を再帰的にたどり望みのパスのコードが無いか調べる」というもの。

例えば

cwd = ~/venv/foo/bar/boo/bee/boo.py 

を編集している時、おそらくvirtualenvのpython

~/venv/foo/bin/python

これは

~/venv/foo/bar/boo/bee/bin/python
~/venv/foo/bar/boo/bin/python
~/venv/foo/bar/bin/python
~/venv/foo/bin/python
~/venv/bin/python
~/bin/python
...

と探していけば良い。あったらそのパスを返す。

buildoutでツクッタ場合これだけでは足りない。

~/venv/foo/deploy/dev/bin/python

などにあったりするため。 こういうのに対応するために、".pickup"という間接参照的なファイルを用意する。 これを~/venv/foo/.pickupなどにおいておく。

(("bin/python" . "./deploy/dev/bin/pyhon"))

.pickupには等と書いておく。