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 はグローバル変数をつかっているので、RubyAPI をどのようにするか悩ましいのですよね。補完処理が終わった後に、補完した時点の入力中の文字列を操作できるといやだろうし。。。