I'm not very bright today. I sent a previous version of the message. Here
is the version I meant to send.
I wrote a quick little hack to add buffers to irb. This reminds me of the
editing environment in the good ol' days.
Here's how it works:
irb(main):274:0> load 'irbide'
true
irb(main):276:0> a = IRBIDE.new
Newly created environment. No buffers exist
irb(main):277:0> a.add 'test', 'Prints out "hello"'
"New buffer test created"
irb(main):278:0> a.add 'greet', 'Takes a name as a string argument and says
hello'
"New buffer greet created"
irb(main):279:0> a
test: Prints out "hello"
greet: Takes a name as a string argument and says hello
irb(main):280:0> a.rename 'test', 'hello'
hello: Prints out "hello"
greet: Takes a name as a string argument and says hello
irb(main):281:0> a.edit 'hello'
class Test
def greet
puts "hello world"
end
end
nil
irb(main):282:0> a.description 'hello', 'Prints out "hello world"'
hello: Prints out "hello world"
greet: Takes a name as a string argument and says hello
irb(main):283:0> a.cat 'greet'
nil
irb(main):284:0> a.delete 'greet'
hello: Prints out "hello world"
Whatever you edit in the buffers is immediately loaded into irb when you
exit. Try "Test.new.greet". You can do "a.help" as well.
Here's the source code. It's not good enough for public use, but if there's
no interest from other people then I'll know not to expend the effort to
polish it up other than to add stuff for myself. :)
Save this as "irbide" and use the load command shown at the top. You will
probably want to change "joe" to "emacs" or "vi", depending on your
religious persuasion.
require "tempfile"
class IRBIDE
def initialize
@list = {}
end
def add name, description="Lazy Me", text=""
@list[name] = [ description, text ]
"New buffer #{name} created"
end
def inspect
result = ""
@list.each do |i, j|
result += " #{i}: #{j[0]}\n"
end
if result.empty?
"Newly created environment. No buffers exist"
else
result.chomp
end
end
def list
print inspect
end
def rename oldname, newname
@list[newname] = @list[oldname]
@list.delete oldname
self
end
def description name, description="Stupid Me"
@list[name][0] = description
self
end
def edit name
tf = Tempfile.new(name)
tf.write(@list[name][1])
tf.close
system "joe " + tf.path
load tf.path
tf.open
@list[name][1] = tf.read
tf.close
puts @list[name][1]
end
def cat name
puts @list[name][1]
end
def delete name
@list.delete name
self
end
def help
puts <<-end
IRBIDE: Adds editable buffers to irb.
a = IRBIDE.new
a.add 'test', 'Prints out "hello"'
a.add 'greet', 'Takes a name as a string argument and says hello'
a (or a.list)
a.rename 'test', 'hello'
a.edit 'hello'
a.description 'hello', 'Prints out "hello world"'
a.cat 'greet'
a.delete 'greet'
end
end
end
--
spwhite / chariot.net.au