~ lattice /.irbrc
See the comments for a description of functionality.
# Enable tab-completion. require 'irb/completion' # Enable prompt-less prompts IRB.conf[:PROMPT][:XMP][:RETURN] = "\# => %s\n" IRB.conf[:PROMPT][:XMP][:PROMPT_I] = "" IRB.conf[:PROMPT_MODE] = :XMP # Auto-indentation. IRB.conf[:AUTO_INDENT] = true # Readline-enable prompts. require 'irb/ext/save-history' IRB.conf[:USE_READLINE] = true IRB.conf[:SAVE_HISTORY] = 1000 IRB.conf[:HISTORY_PATH] = File::expand_path("~/.irb.history") # local_methods shows methods that are only available for a given object. class Object def local_methods self.methods.sort - self.class.superclass.methods end end # Dynamic method finding; e.g., "hello".what? == 5 #=> ["length", "size"] begin # require File::expand_path("~/.irb_lib/method_finder") require 'rubygems' require 'what_methods' rescue LoadError puts "Error loading method_finder. Run 'sudo gem install what_methods' to enable Object#what? method finding." end # Colorize results begin require 'rubygems' require 'wirble' Wirble.init Wirble.colorize rescue LoadError puts "Error loading Wirble. Run 'sudo gem install wirble' to enable colorized results." end # Inline colorized ri (override wirble's) RIARGS = ['-f', 'ansi'] require 'rdoc/ri/ri_driver' class MyStupidRiDriver < RiDriver def self.ri(*topics) topics.map! { |topic| topic.to_s } begin MyStupidRiDriver.new(*topics).process_args rescue => e puts "Error processing ri request: #{e}" end end def initialize(*topics) @options = RI::Options.instance args = RIARGS.dup + topics @options.parse(args) paths = RI::Paths::PATH @ri_reader = RI::RiReader.new(RI::RiCache.new(paths)) @display = @options.displayer end end def Kernel.ri(*args) less { MyStupidRiDriver.ri(*args) } end class Module def ri(*args) topics = args.map { |arg| arg = "#{self}##{arg}" } less { MyStupidRiDriver.ri(*topics) } end end # Copious output helper def less spool_output('less') end def most spool_output('most') end def spool_output(spool_cmd) require 'stringio' $stdout, sout = StringIO.new, $stdout yield $stdout, str_io = sout, $stdout IO.popen(spool_cmd, 'w') do |f| f.write str_io.string f.flush f.close_write end end # Simple regular expression helper # show_regexp - stolen from the pickaxe def show_regexp(a, re) if a =~ re "#{$`}<<#{$&}>>#{$'}" else "no match" end end # Convenience method on Regexp so you can do # /an/.show_match("banana") class Regexp def show_match(a) show_regexp(a, self) end end # Textmate helper def mate *args flattened_args = args.map {|arg| "\"#{arg.to_s}\""}.join ' ' `mate #{flattened_args}` nil end # Vi helper def vi *args flattened_args = args.map { |arg| "\"#{arg.to_s}\""}.join ' ' `vi #{flattened_args}` nil end