Readline.set_screen_size と Readline.get_screen_size を追加
ruby の trunk (r22013) に Readline.set_screen_size と Readline.get_screen_size を追加しました。それぞれのメソッドを以下に説明します。
Readline.set_screen_size(rows, columns) 端末のサイズを rows で指定した行数と、columns で指定したカラム数に設定します。 詳しくは GNU Readline の rl_set_screen_size 関数を参照してください。 Readline.get_screen_size -> [rows, columns] 端末の行数とカラム数を返す。 詳しくは GNU Readline の rl_get_screen_size 関数を参照してください。
これまでは、端末の行数やカラム数は、それぞれ ENV["LINES"] や ENV["COLUMNS"] で取得したり、Curses を使用していたと思います。これからは、Readline.get_screen_size を使って以下のように書けます。
require "readline" rows, columns = *Readline.get_screen_size
(なんとなく) ENV よりも安心感がないですか?
次は Readline の補完処理を記述しやすくするため、TAB を押すなどにより、ユーザが補完を要求したときに、現在入力中の文字列やカーソル位置を取得できるようにしよう。GNU Readline はグローバル変数をつかっているので、Ruby の API をどのようにするか悩ましいのですよね。補完処理が終わった後に、補完した時点の入力中の文字列を操作できるといやだろうし。。。