脳ざらし紀行


2005-02-15

_ [Ruby] irb に | less が欲しい

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

とても便利。

_ [Ruby] Rubyist Magazine 0005号

出た。

お名前:
E-mail:
コメント:
本日のリンク元

最近のコメント

2003|01|02|03|04|05|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|04|05|
2011|04|
2012|03|07|
2013|01|02|07|
トップ «前の日記(2005-02-13) 最新 次の日記(2005-02-17)» 編集