reposh

This entry was posted by on Sunday, 23 December, 2007

http://mono.kmc.gr.jp/~yhara/d/?date=20071222#p01こういうアイディアは良いと思うんですよね。

どういう点がよいかというと、世の中にはこのテのサブコマンドを持つプログラムというのはけっこうあるわけですが、一部のプログラムで気に入らないものがある。というのは DarwinPorts とか cpan とかがそうですが、サブコマンドを入力しないと、こういうシェルモードになっちゃうやつがあるわけですが、わたしはああいうの嫌いなんですよ。

サブコマンドを取るプログラムは単体ではこういう機能を提供せず、それをラップするようにする方がずっと理に適っていると感じていたので、いいなあと思った次第です。「ああいうのは嫌い」なんで、わたしが常用することはないと思いますが(笑)。

ところで、各バージョン管理システム名をプロンプトに埋め込みたいな、と思いまして、そのようなハックをするにはどうしたらよいか気になりました。つまりたとえばデフォルトの設定に

prompt: "#{@system_name}>"

としておけば system_name が展開されてくれるといいな、ということを考えるわけですが、これはなかなか難しい。 eval するのはさすがに危険だし、 inspect して式展開のところのクォートを落とすというのを考えましたが上手くは行かなさそう。けっきょくのところ ERb を使うのがベストなのかしら。なんか大仰なんだよなあ。うまい方法はないものですかね。とりあえず「inspectして式展開のクォートを落として eval する」というハックを書いてみましたが上手い方法なのかわからない。

 

わたしが「ああいうのが嫌い」なのは、何も引数を渡さないとヘルプが出てきてほしいからです。それから、必要もないのにシェルの上にシェルを重ねる思想があまり好きではないのだね。で、必要性を感じないのはもともとのコマンドシェルのサポートがあるからこそだと思います。

zsh は darcs のサポートが厚くて、実際問題としてはこういうものを必要と感じません。たとえば darcs add の文脈では add 候補のものしか補完対象にならないとかいったように、シェルがコマンドを理解していて文脈に最適なものだけを選ぶようになっている。 subversion とか cvs にも同様の補完関数が zsh で定義されていたと思いますが、そういうやたら高機能なものに比べると現在の reposh.rb は素の readline なので単純ですよね。もちろん、それなりの作業をすれば、さほど苦労せずにそれくらいの機能はつけられると思いますけど。

むむっ、書いていて気付いたが、必要ないのにというくらいならシェルが reposh.rb の機能をサポートするべきなのではないか? 特殊な状況を除けばふつうカレントディレクトリは一つのバージョン管理システムの下にあり、それは労せずわかる気がする。それを判別するzshモジュールを書けば幸せなのでは!?

……いやいや、書きませんけどね。だいいち zsh で「add」コマンドを打鍵するだけで勝手に darcs だか hg だかが発行されてしまう? ぞっとしないね。

あと時には monotone のことも思い出してあげてください。

Comments are closed.