Description

This ripl plugin provides a core group of commands for any ripl shell. It aims to match and surpass functionality in irb’s commands.

Install

Install the gem with:

sudo gem install ripl-commands

Usage

Add to your ~/.riplrc

require 'ripl/commands'

Try it out:

$ ripl

# set any ripl config dynamically
>> config :prompt, lambda { "ripl(main):" + Ripl.shell.line.to_s + "> " }
=> #<Proc:0x0063e2f0@(ripl):1>
ripl(main):2>  config :result_prompt, '<> '
<> "<> "

# Autocomplete available config keys
>> config :[TAB]
:binding  :color_error  :multi_line_prompt  :name  :prompt :result_prompt

# Jump around in different objects as irb does with subsessions and workspaces
>> jump 'dude'
=> 'dude'
>> self
=> 'dude'
# Autocomplet for the new current object
>> cap[TAB]
capitalize   capitalize!
>> capitalize
=> 'Dude'

# To see where you've jumped
>> jumps
=> [main, 'dude']

# Jumping to a number translates to jumping to an existing jump
>> jump 0
=> main

# To list what commands ripl has
>> list
=> ["list", "config", "history", "editor", "jumps", "jump"]

This plugin also comes with commands to see history and prototype code easily in an editor:

# Display last 10 inputs
>> history 10
10 : class Porque; def no; 'porque'; end; end
9 : Porque.no
8 : Porque.no
7: %w{can you -dig -this sir?}.inject([]) do |arr, e|
6: if e[/^-/] .. e[/^[^-]/]
5: break(arr) if e[/^[^-]/]
4: arr << e
3: end
2: arr
1: end
=> ...

# Edit last 7 inputs in an editor (specified by ENV['EDITOR']) and eval the edited text
>> editor 7
....
=> ['dig', '-this']

# If a previous edit exists, opens it in an editor, otherwise opens a new file
>> editor

Extending Commands

Extending commands is done by including a module into Ripl::Commands. Say we wanted to extend jumps to look nicer:

# In ~/.riplrc
require 'ripl/commands'
module Ripl::Commands::NicerJump
  def jumps
    super.each_with_index {|e,i| puts "#{i}: #{e.inspect}" }
  end
end
Ripl::Commands.send :include, Ripl::Commands::NicerJump

The above jump session then looks like:

>> jumps
0: main
1: "dude"

Credits

  • janlelis for bug fix

Todo

  • Add exit for a jump

  • Fix stacktrace interference caused by jumps