Xeebi

home categories feeds

mit-scheme の REPL, タブ補完とか履歴が効かないのが気に入らない

問題

$ mit-scheme すると repl が起動してやりとりができるようになるが,タブ補完も矢印上下のコマンド補完も効かないし, 矢印キーもemacs的なショートカットも効かない. 下手をするとこういう惨状が起こる:

1 ]=> (defni^[[D^[[D^[[A^A

これはひどすぎる.何とかしたい.Python とかの repl でも採用しているような readline が使えればそれでいいのだけど.

Ask Stackoverflow

というわけで,Stackoverflow に質問があった.mit-scheme REPL with command line history and tab completion (aaronstacy による質問).

SICP を読んでて, OS X 10.8 に homebrew で mit-scheme 入れて使ってる.

いい感じなんだけど,履歴とか補完をやってくれる Python とか Node.js の REPL の便利さに甘やかされてしまってるらしい.

すごい重いのを求めてるわけじゃなくて, こういう機能って最近の REPL なら簡単に使えるようにできるよね( Python なら 簡単な startup ファイルで, Node.js でも数行で実装できる).

重たい application 入れるとか,emacs に乗り換えるとかじゃなくて(例えば xterm 上で動くような感じで)タブ補完と コマンド履歴の機能を mit-scheme で使う方法ってあるだろうか.

そして Bobby Norton による回答:

readline wrapper を入れましょう.

brew install rlwrap 1

インストールすれば, rlwrap scheme で履歴,括弧の対応,タブ補完が使えるようになる. 個人的には次のようなオプションを渡して使ってる:

-r, --remember : put all words seen on in- and outpu on the completion list -c, --complete-filenames : complete filenames -f, --file file : Split file into words and add them to the completion word list.

-f には MIT Scheme Reference Manual から抽出したのを使ってる.ここ に上げといた. これを $HOME/scheme_completion.txt に保存しておいて

rlwrap -r -c -f "$HOME/scheme_completion.txt" scheme

でこんなかんじだ

1 ]=> (flo:a <tab tab>
  flo:abs    flo:acos   flo:asin   flo:atan   flo:atan2
  1 ]=> (flo:abs -42.0)
 ;Value: 42.

めでたい.

ということで rlwrap 超便利です.

  1. Ubuntu のレポジトリにもある.