goshでreadline
最近、ほとんどのプログラムをGaucheで作成している。
Gaucheがなにかについては、以下のサイトに詳しい。
少しだけ触りを書くと、GaucheはSchemeの実装の一つである。
SchemeはLISPの系譜の言語だが、Common Lisp系のようなラグジュアリーな全部入りの体系とは異り、可能な限り単純化された言語体系を持つ。また、言語の仕様と実装、実用的に使用するためのライブラリが異る開発者コミュニティによって運営されているという開発モデルも特徴的である。
Gaucheはschemeの標準に準拠しつつ、実用的な機能を盛り込んだ実装である。実用的であるということはGaucheの他のschemeの実装に対して特徴となっていると言えるだろう。
加えて、開発者は日本人ということもあり、日本語のドキュメントが他のschemeの実装に比べ、充実しているということもある。
しかし、Gaucheは非常に強力な言語なのだが、対話モードでの使用にはいささか不便がある。履歴機能などが使用できないのだ。
emacsを対話モードのインタフェースとして使用すれば、履歴機能や、キーワード補完などが利用できるから問題はないという指摘はあるだろう。またgaucheはscheme(≒lisp)なのだから、それに最適化されているemacsをインタフェースとして使用するべきであるという主張は、正当なものだと思う。
しかし、残念なことに、僕は、vimをメインの作業環境としている。
#ちなみに、vim+schemeという開発環境は相当”かわっている”ということは自覚している。
そこで、Gaucheの対話モード(gosh)において、readlineライブラリを使用するためのパッケージがGauche:Packageで公開されているので、これをインストールしてみることにした。
しかし、結果は、失敗であった。
MacosX10.5ではどうもreadlineのライブラリを正しく取得できないらしく、利用することが出来なかった。
そこで、readlineを利用できない場合の対応方法としてrlwrapというコマンドを利用することにした。
rlwrapは、readlineのラッパーで、readlineに対応していない対話型のコマンドをreadlineに対応させてしまうことができる。各種のunixで動作するものが公開されており、aptやyam、portsなどでインストールすることができる。補完は出来無いが、履歴やdeleteキーが使用できるようになる。