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
とても便利。
出た。
最近のコメント