![show/hide quicksearch [+]](./images/find.png)
An example printer for irb.
It's much like the standard library PrettyPrint, that shows the value of each expression as it runs.
In order to use this library, you must first require it:
require 'irb/xmp'
Now, you can take advantage of the Object#xmp convenience method.
xmp <<END foo = "bar" baz = 42 END #=> foo = "bar" #==>"bar" #=> baz = 42 #==>42
You can also create an XMP object, with an optional binding to print expressions in the given binding:
ctx = binding x = XMP.new ctx x.puts #=> today = "a good day" #==>"a good day" ctx.eval 'today # is what?' #=> "a good day"
Creates a new XMP object.
The top-level binding or, optional bind parameter will be used when creating the workspace. See WorkSpace.new for more information.
This uses the :XMP prompt mode, see Customizing the IRB Prompt at IRB for full detail.
 
               # File irb/xmp.rb, line 55
def initialize(bind = nil)
  IRB.init_config(nil)
  IRB.conf[:PROMPT_MODE] = :XMP
  bind = IRB::Frame.top(1) unless bind
  ws = IRB::WorkSpace.new(bind)
  @io = StringInputMethod.new
  @irb = IRB::Irb.new(ws, @io)
  @irb.context.ignore_sigint = false
  IRB.conf[:MAIN_CONTEXT] = @irb.context
end
             
            Evaluates the given exps, for example:
require 'irb/xmp' x = XMP.new x.puts '{:a => 1, :b => 2, :c => 3}' #=> {:a => 1, :b => 2, :c => 3} # ==>{:a=>1, :b=>2, :c=>3} x.puts 'foo = "bar"' # => foo = "bar" # ==>"bar"
 
               # File irb/xmp.rb, line 80
def puts(exps)
  @io.puts exps
  if @irb.context.ignore_sigint
    begin
      trap_proc_b = trap("SIGINT"){@irb.signal_handle}
      catch(:IRB_EXIT) do
        @irb.eval_input
      end
    ensure
      trap("SIGINT", trap_proc_b)
    end
  else
    catch(:IRB_EXIT) do
      @irb.eval_input
    end
  end
end