読者です 読者をやめる 読者になる 読者になる

コンソールのサイズが変わった時にコンソールサイズ(行/列)を取る

$ irb -r io/console
irb(main):001:0>Signal.trap(:WINCH){ p STDIN.winsize }

(この後めちゃくちゃウィンドウサイズを変える)


一応解説。

コンソールはサイズが変わる度にSIGWINCHシグナルを端末に送る。 そしてIO#winsizeでは内部でioctl(2)TIOCGWINSZ操作をつかって端末のウィンドウサイズを取得している。

ここではSIGWINCHをtrapした直後にウィンドウサイズを取得して表示しているというわけ。