From: Stephen White Date: 2001-02-14T06:34:07+09:00 Subject: [ruby-talk:10807] Cute toy or start of something? 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):275:0> a.help 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' nil 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.strip 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 and says hello' a (or a.list) a.rename 'test', 'hello' a.edit 'hello' a.description 'hello', 'Prints out "hello world"' a.cat 'hello' a.delete 'greet' end end end -- spwhite@chariot.net.au