virtualenv上のpythonをquickrunで呼ぶ
quickrun
現在のバッファの内容をファイル名に結びついた言語のコマンドで実行してくれる(e.g. foo.pyならpython)
https://github.com/syohex/emacs-quickrun
motivate
pythonを書くときには、virtualenvでプロジェクトごとに環境を分けている。
なので以下のようなことがquickrunでもできたら良いなと思った。
- ~/venvs/poject1/foo/bar.pyでは~/venvs/project1/bin/pythonを利用して欲しい。
- ~/venvs/poject2/boo/boo.pyでは~/venvs/project2/bin/pythonを利用して欲しい。
一方で、quickrunのpythonの設定を見ると、:command "python"とpython決め打ちだったのであまり良くない。
how to solve it
実際にコードを読んでみたら、`quickrun/eval-paramater'が期待どおりの実装になっていた。
どういうことかというと、:commandに関数を渡せる。(渡した場合渡された関数を評価した結果が使われる)
こういうことができる。*1
("python" . ((:command . (lambda () (print "hey") "python")) (:compile-only . "pyflakes %s") (:description . "Run Python script")))
e.g.
以下のような場合でもM-x quickrunが動作するようになった。
以下のような場合
普通のpythonだとモジュールが足りなくて実行できないような例。virtualenv上のpythonだと実行できる。
$ pwd /home/podhmo/.virtualenvs/my/sandbox $ python joinmodel.py Traceback (most recent call last): File "joinmodel.py", line 1, in <module> import sqlahelper ImportError: No module named sqlahelper $ ~/.virtualenvs/my/bin/python joinmodel.py name Person.name foo age Person.age 20 skill Person.skill fire id Person.id None
*1:もちろん表示されるheyには何の意味もない