views:

335

answers:

2

Hi Guys, I'm fairly new to ruby, and am configuring IRB. I like pretty print (require 'pp'), but it seems a hassle to always type pp for it to pretty print it. What I'd like to do is make it pretty print by default, so if i have a var , say, 'myvar', and type myvar, it automatically calls pretty_inspect instead of the regular inspect. Where do I get started? Ideally, I would be able to add a method to my .irbrc file that is automatically called. Any ideas?

Thanks!

+1  A: 

when irb starts, it reads .irbrc from your $HOME directory. If you edit (or create) that file and add

require 'pp'

it will be loaded each time you start irb.

Check out this addition to pretty_print method lists too. Toss that in your .irbrc and you can do :

>> 5.pm
                      %(arg1)         Fixnum
                      &(arg1)         Fixnum
                      *(arg1)         Fixnum
                     **(arg1)         Fixnum
                      +(arg1)         Fixnum
                     +@()             Fixnum(Numeric)
                      -(arg1)         Fixnum
                     -@()             Fixnum
                      /(arg1)         Fixnum
                     <<(arg1)         Fixnum
                     >>(arg1)         Fixnum
                     [](arg1)         Fixnum
                      ^(arg1)         Fixnum
                    abs()             Fixnum
                    ago(arg1, ...)    Fixnum(ActiveSupport::CoreExtensions::Numeric::Time)
               between?(arg1, arg2)   Fixnum(Comparable)
                   byte()             Fixnum(ActiveSupport::CoreExtensions::Numeric::Bytes)
                  bytes()             Fixnum(ActiveSupport::CoreExtensions::Numeric::Bytes

Jeff Paquette
+3  A: 

Pretty printing objects by default in irb is exactly what hirb was made to do. These posts explain how hirb can convert pretty much anything into an ascii table. Although hirb is meant to be configured per class, you could have all objects displayed as tables:

# put this in ~/.irbrc
require 'rubygems'
require 'hirb'
Hirb.enable :output=>{'Object'=>{:class=>:auto_table, :ancestor=>true}}

# in irb
>> %w{three blind mice}
+-------+
| value |
+-------+
| three |
| blind |
| mice  |
+-------+
3 rows in set

>> 1..5
+-------+
| value |
+-------+
| 1     |
| 2     |
| 3     |
| 4     |
| 5     |
+-------+
5 rows in set

>> {:a=>1, :b=>2}
+---+---+
| 0 | 1 |
+---+---+
| a | 1 |
| b | 2 |
+---+---+
2 rows in set

This related overflow solution also has an example of hirb in action.