Description
Run EventMachine code in a ripl shell asynchronously with readline editing and completion. Uses FFI to access the alternate Readline callback interface.
Install
Install the gem with:
gem install ripl-readline-em
Usage
require 'eventmachine'
require 'ripl/readline/em'
EventMachine.run do
EventMachine.add_periodic_timer(2) do
# Example of writing output while line is being edited.
#
# See also http://stackoverflow.com/questions/1512028/gnu-readline-how-do-clear-the-input-line
print "\b \b" * Readline.line_buffer.size
print "\r"
begin
puts "#{Time.now}"
ensure
Readline.forced_update_display
end
end
# Start up Ripl, but it will not receive any user input
Ripl.start
# Watch stdin for input, sending it to Ripl as entered (including editing,
# history and completion).
#
# Default behavior is to call EventMachine.stop_event_loop when the shell is
# exited. Modify this behavior by passing a hash with an `:on_exit` entry,
# either nil or a Proc that will be run on exit instead of the default.
EventMachine.watch_stdin Ripl::Readline::EmInput
# -or-
# EventMachine.watch_stdin Ripl::Readline::EmInput, :on_exit => nil
# Yet another option is to create your own handler module, include
# Ripl::Readline::EmInput, and override the `on_exit` method.
end