From: Helder Ribeiro Date: 2007-01-24T08:25:06+09:00 Subject: Re: Ruby text editor for beginner On Jan 22, 11:55 am, James Edward Gray II wrote: > On Jan 22, 2007, at 5:48 AM,HelderRibeirowrote: > > > Yes, but sometimes you can't chop it up so fine-grained that you have > > self-contained, one-lined commands (that's what I meant by > > 'scripting').I think it's harder for some projects than others, but I'm not > willing to go all the way to "can't". ;) > > > Say you write up a method and want to correct it, you have retype or > > find through the history by pressing "Up" all the lines that "worked" > > and re-entering them. You also can't just read them from a file > > either, > > AFAIK (not smthg like an incomplete method code, for instance). > > > Conversely, it's not trivial to go through the lines that "worked" in > > that awkward "Up"-key fashion, then select them and save them out to a > > file.Here are some ideas: > > >> def test > >> puts "This line is OK." > >> puts "So is this one." > >> Object.new.no_such_method # Oops! > >> end > => nil > >> test > This line is OK. > So is this one. > NoMethodError: undefined method `no_such_method' for # > from (irb):4:in `test' > from (irb):6 > >> h 6 > [0758] def test > [0759] puts "This line is OK." > [0760] puts "So is this one." > [0761] Object.new.no_such_method # Oops! > [0762] end > [0763] test > [0764] h 6 > => nil > >> get_lines(758..760) << "puts 'Now this is better.'" << "end" > => ["def test", " puts "This line is OK."", " puts "So is this > one."", "puts 'Now this is better.'", "end"] > >> eval((get_lines(758..760) << "puts 'Now this is better.'" << > "end").join("\n")) > => nil > >> test > This line is OK. > So is this one. > Now this is better. > => nil > > You can also write to a file: > > >> hw "test_method.rb", 758..760 > => nil > >> File.read("test_method.rb") > => "def test\n puts "This line is OK."\n puts "So is this one."\n" > >> File.open("test_method.rb", "a") { |f| f << " puts 'Fixed in the > file.'\nend\n" } > => # > >> File.read("test_method.rb")=> "def test\n puts "This line is > OK."\n puts "So is this one."\n puts 'Fixed in the file.'\nend\n" > >> load "test_method.rb" > => true > >> test > This line is OK. > So is this one. > Fixed in the file. > => nil > > The methods I am using here come from: > > http://blog.bleything.net/pages/irb_history > > Hope that helps. Wow, this is awesome! The language is introspective and so is the REPL =) I'll see how I get along with that. Thanks a lot! Helder Ribeiro