irb を使っていると画面に入り切らないくらいの大量の出力があった時に、| less したくなることがある。というわけで、作ってみました。.irbrc に以下のように書く。rdoc を参考にしました。
require 'pp' class IRBLess def setup_pager for pager in [ ENV['PAGER'], "less", "more", 'pager' ].compact.uniq return IO.popen(pager, "w") rescue nil end end def less(obj) pager = setup_pager begin save_stdout = STDOUT.clone STDOUT.reopen(pager) pp obj ensure STDOUT.reopen(save_stdout) save_stdout.close pager.close end end end class Object def |(less) if less.is_a?(IRBLess) less.less(self) end end end class Array alias :orig_bar | def |(less) if less.is_a?(IRBLess) less.less(self) else orig_bar(less) end end end def less IRBLess.new end
使い方。以下のように使う。
irb(main):001:0> Array.new(100){ rand.to_s } | less
とても便利。
出た。
最近のコメント