BLOGサブスレッドの日常

2019.02.26

tcshでも pyenv-virtualenv したい

tama

Slackwareで一瞬Linuxに触れたあと、安定性を求めてFreeBSD 3.xに移ってそれ以来BSD文化で育ってきたので長らくcsh派でした。tamaです。
history-search-backward/forward と complete=enhance が便利すぎてtcshをまだ離れられずにいます。
(今回の件で相当嫌気したしbashにも history-search-backward/forward があると知ったのでちょっぴりbash転向に傾いたんですが)

最近になってPython仮想環境を virtualenv から pyenv-virtualenv に切り替えました。
pyenv local _hoge_ すれば activate しなくてもディレクトリごとに適切な仮想環境が使ってもらえるので、いろんなプロジェクトのいろんな仮想環境があるPCの中では思ってた以上にストレスフリーです。
そうするとbash環境下で eval "$(pyenv virtualenv-init -)" とか eval "$(pyenv virtualenv-init -)" とかできるのが羨ましくなります。

完璧に同じ機能でなくてもいいので、せめてプロンプトに仮想環境の名前を表示しておきたい。

というわけでモドキを実現してみました。
.cshrc に次の設定を書き加えます。

set pyenvname = ~/.tmp.pwd.pyenv
alias  setprompt  '((\pyenv local || \pyenv global) >! $pyenvname) >& /dev/null ; set prompt="[%P](`cat $pyenvname`):%~% " ; rm $pyenvname'
alias  cd         'cd \!* ; setprompt'
alias  pyenv      'pyenv \!* ; setprompt'

泥臭いなぁ💦
.python-version がないと pyenv local が標準エラーにエラーを吐くので、それを /dev/null に捨てるために標準出力は一時ファイルに入れる必要があります。
(/dev/stdout とか /dev/tty ではバッククォートで実行結果を取り込めなかった…)

プロンプトには現在時刻も表示してる派なので、これで

[2:52:58](3.6.5):~%

みたいな結果が得られます。(∩´∀`)∩ワーイ

cd したあとと pyenv したあとに毎回プロンプトの再設定が行われてしかも一時ファイルが作られちゃいますが
それでもよければ tcsh でも pyenv-virtualenv を便利に使えるということで。

最後に20年以上も前(生まれる前だ!)に記された含蓄に富んだドキュメントを紹介してこのブログを締めたいと思います。
有害な csh プログラミング

この記事を書いた人

tama