LinuxやBSDでは、stty sizeコマンドを実行して、それを解析し取得する方法もあるが、OSに依存するため使えない。
Sorarisなど、同じコマンドがあっても微妙に結果が違ったりするものもあるので…
以前のバージョンでは、cursesを使って獲得していた。
require "curses"
def gettermsize
Curses::init_screen
x = Curses::cols
y = Curses::lines
Curses::close_screen
return {"x"=>x.to_i, "y"=>y.to_i}
end
この方法も、RubyにCursesライブラリが入っていないと駄目という問題が。
しかも、環境によって、標準出力のバッファリングがおかしくなることがあるという謎の現象が…
これを回避するには、標準出力を同期モードにしてやればよいようだった。
STDOUT.sync = true
これをcurses読み込み前に書いておけば、標準出力がプログラムの流れと同期して表示されるようになった。
もっと効率が良く、どのプラットフォームでも同じ結果が得られるものは無いのだろうか…
0 件のコメント:
コメントを投稿