vince
vince

Reputation: 2838

How to format irb command prompt

Previously I was using Ruby 1.8 and my irb command prompt used to look like this:

Air ~: irb
>> a = 1
=> 1
>> b = 2
=> 2
>> a + b
=> 3

I installed rvm (and Ruby 1.9.2) and now my irb command prompt looks like this:

Air ~: irb
ruby-1.9.2-p180 :001 > a = 1
 => 1 
ruby-1.9.2-p180 :002 > b = 2
 => 2 
ruby-1.9.2-p180 :003 > a + b
 => 3 

Is there a way to remove the ruby-1.9.2-p180 :001 from the command line?

Upvotes: 17

Views: 9729

Answers (7)

Alter Lagos
Alter Lagos

Reputation: 12540

Whoever want to add a prompt timestamp, this isn't possible yet (check "special strings" section), so I implemented it in a monkey-patchy way:

module IrbTimePrompt
  def prompt(prompt, ltype, indent, line_no)
    # I used %T as time format, but you could use whatever you want to.
    # Check https://apidock.com/ruby/Time/strftime for more options
    p = prompt.dup.gsub(/%t/, Time.new.strftime('%T'))
    super(p, ltype, indent, line_no)
  end
end

module IRB
  class Irb
    prepend IrbTimePrompt
  end
end

Now, add this to your lib/ project folder (in case is a Rails project, ensure lib/ is part of config.autoload_paths in config/application.rb) or in a more aggresive way (not recommended), look for lib/irb.rb file in your local ruby instance and in def prompt method, add a new when condition to the method, like:

    when "t"
      Time.now.strftime('%-d-%-m %T%Z')

then in your .irbrc file (it could be located in your home folder or root project folder) you could modify your prompt. I'm adding my current prompt, but please adjust it to your needs:

def rails_prompt
  # This is my base prompt, displaying line number and time
  def_prompt = '[%01n][%t]'
  # Maybe you're only running as `irb` an not `rails console`, so check first
  # if rails is available
  if defined? Rails
    app_env = Rails.env[0...4]
    if Rails.env.production?
      puts "\n\e[1m\e[41mWARNING: YOU ARE USING RAILS CONSOLE IN PRODUCTION!\n" \
           "Changing data can cause serious data loss.\n" \
           "Make sure you know what you're doing.\e[0m\e[22m\n\n"
      app_env = "\e[31m#{app_env}\e[0m" # red
    else
      app_env = "\e[32m#{app_env}\e[0m" # green
    end
    def_prompt << "(\e[1m#{app_env}\e[22m)" # bold
  end

  IRB.conf[:PROMPT] ||= {}
  IRB.conf[:PROMPT][:WITH_TIME] = {
    PROMPT_I: "#{def_prompt}> ",
    PROMPT_N: "#{def_prompt}| ",
    PROMPT_C: "#{def_prompt}| ",
    PROMPT_S: "#{def_prompt}%l ",
    RETURN: "=> %s\n",
    AUTO_INDENT: true,
  }
  IRB.conf[:PROMPT_MODE] = :WITH_TIME
end

rails_prompt

Then start irb or rails console and check the awesomeness:

[1][13:01:15](deve)> 'say hello to your new prompt'
=> "say hello to your new prompt"
[2][13:01:23](deve)>

Upvotes: 1

Aman Kothari
Aman Kothari

Reputation: 41

irb --simple-prompt

saw this in Lynda.com

Upvotes: 4

Michael Kohl
Michael Kohl

Reputation: 66837

The irb man page has a section on "Customizing prompt". Here's mine for example:

IRB.conf[:PROMPT][:CUSTOM] = {
  :PROMPT_I => ">> ",
  :PROMPT_S => "%l>> ",
  :PROMPT_C => ".. ",
  :PROMPT_N => ".. ",
  :RETURN => "=> %s\n"
}
IRB.conf[:PROMPT_MODE] = :CUSTOM
IRB.conf[:AUTO_INDENT] = true

To use this, add it to your ~/.irbrc file (creating it if it doesn't exist.)

Upvotes: 24

Zabba
Zabba

Reputation: 65467

See this note about IRB prompt in RVM.

Note that you can create a .irbrc file in your home folder for various settings for IRB. For example, see "Configuring the Prompt" in this document

You can also puts IRB.conf[:PROMPT_MODE] or puts IRB.conf to see all the various settings currently in effect. For example, the :PROMPT_MODE is probably set to "RVM" in your case.

Upvotes: 0

sarnold
sarnold

Reputation: 104020

To avoid giving the prompt you wish on the command line all the time, you can configure the prompt via the ~/.irbrc config file:

$ echo "IRB.conf[:PROMPT_MODE] = :DEFAULT" > ~/.irbrc
$ irb
irb(main):001:0> quit
$ echo "IRB.conf[:PROMPT_MODE] = :SIMPLE" > ~/.irbrc
$ irb
>> quit
$ 

Upvotes: 2

Peter
Peter

Reputation: 132157

In your ~/.irbrc, simply add

IRB.conf[:PROMPT_MODE] = :SIMPLE

Upvotes: 20

Mark
Mark

Reputation: 684

When you would usually run the irb command, try running irb --simple-prompt instead. That greatly shortens the prompt and makes it easier to understand.

Upvotes: 9

Related Questions