From: SonOfLilit Date: 2007-02-18T04:41:34+09:00 Subject: Re: Help with customising the IRB prompt I was a bit unclear, so let me give an example: class Hashlike < Hash def [] (key) return " " * $indentation_level if key == :PROMPT_I super end end IRB.conf[:PROMPT][:INDENTS] = Hashlike.new( # can I pass a Hash to Hash.new ? :PROMPT_I => "#{%i.times {print ' '}} >> ", :PROMPT_S => "#{%i.times {print ' '}} >> ", :PROMPT_C => "#{%i.times {print ' '}} >> ", :RETURN => "=> %s\n" You might be able to achieve a similar effect with a Hash and a default block, I don't remember it's syntax. Aur Saraf On 2/17/07, SonOfLilit wrote: > This is a constant so you cannot just assign it a dynamic value. > > If you really want, you can assign it an instance of a class that > exposes an interface similar to that of a Hash but acts dynamically. > > You'd still need to somehow get the value of "%i", whatever that is > (I'm not familiar with IRB configuration but I know it's very hard to > achieve this with Ruby so I just guess you meant @i or something (if > I'm wrong, sorry)). > > You might as well just modify a few lines of IRB code, I guess. > > By the way, printf() like formatitng in Ruby has a great syntax: > > "%f" % 0.1 > "%d %d" % [1, 2] > > (String could be dynamic, Numerics could be dynamic, Array could be dynamic). > > > Have a look at the Adopt-a-newbie thread here in the mailing list :-) > > > Aur Saraf > > On 2/17/07, Peter B. wrote: > > Hi, I'm new to this newsgroup, so I'm not sure if this is the right > > place to ask. > > > > Ok, so what I'm trying to do is customise the IRB prompt in a rather > > complicated way: I want to print %i*2 (or even just %i) spaces at the > > beginning of each line of prompt. Here was my best attempt (not sure > > if there's a better way to format this for Usenet): > > > > IRB.conf[:PROMPT][:INDENTS] = { > > :PROMPT_I => "#{%i.times {print ' '}} >> ", > > :PROMPT_S => "#{%i.times {print ' '}} >> ", > > :PROMPT_C => "#{%i.times {print ' '}} >> ", > > :RETURN => "=> %s\n" > > } > > > > So, what I want it do is like this: > > > > >> if "Jim" == "Fred" > > >> print "Ruby Sucks!" > > >> else > > >> print "Ruby is cool!" > > >> end > > >> print "And you know it!" > > > > But obviously, It tries to work out the value of the #{ } as soon as > > it's set, not when it's displayed, after the %i has been gsub'd for > > displaying. So, I get an error thrown at me. > > > > Does anybody know how to do this? Maybe some printf() trickery? > > > > Thanks in advance. > > > > > > >