Skip to content
Sean Champ edited this page Dec 26, 2021 · 7 revisions

iRuby, an interactive Ruby environment for Emacs platforms

Introduction

This project is an independent fork of the original inf-ruby

Supported Platforms

The iRuby project will endeavor to retain portability onto Ruby implementations supported in inf-ruby.

In version 3.0, the main development branch of this fork after inf-ruby provides full support for IRB, with other implementations presently untested.

iRuby version 3.0 has been locally tested on Linux, FreeBSD, and Cygwin Ruby platforms.

Common Features

The iRuby project has retained most of the original, functional nature of the inf-ruby API

iRuby library versions have continued from inf-ruby at the point of fork, now at iRuby version 3

Divergences to inf-ruby

An abbreviated overview of features, in how this fork may diverge from inf-ruby:

  • Different ways to define a Ruby implementation. iRuby develops a specific data structure for values in iruby-implementations, with properties that provide information for implementation-specific forms within an iRuby process buffer.
  • Threading support (preliminary)
  • Interaction with the underlying Ruby process (preliminary)
  • Different support for interactive completion.
    • As one point of divergence, iRuby uses values from iruby-implementations for determining a Ruby completion form to use for each implementation. Up to iRuby version 3.0, this has been tested only with IRB.
    • As a further point of divergence, iRuby allows selecting a syntax table from either enh-ruby-mode or the popular ruby-mode distributed with Emacs. This may affect the Emacs side of behaviors for input completion in an iRuby process buffer.
  • Different global storage for Ruby process buffers (comint), adding a new iruby-read-process function for support of interactive commands using this internal data structure. The original buffer-local variable inf-ruby-buffer has been retained as iruby-buffer
  • Slightly different semantics for selecting the active Ruby process buffer. iRuby defines a function, iruby-get-prevailing-buffer such that provides support for optional project/console directory parsing - similar to inf-ruby - as well as implementing the original support for buffer-local and global selection of an active Ruby process buffer
  • Additional behaviors for interacting with the input history in the Ruby process buffer
  • Customizable modeline labels - options for iruby-minor-mode and in Ruby process buffers, iruby-mode, in the defcustom group iruby-ui
  • iRuby provides support for storage and restoral of Ruby process buffers, under desktop-save and desktop-read
  • iRuby distribution to ELPA is presently unmaintained

Known Issues

  • Documentation needs update
  • Needs testing on platforms other than IRB
  • Needs distribution to ELPA

TBD - Features in Development

  • Project support - API and user interface (Gem projects, other)
  • Asynchronous I/O with the Ruby process - implementation of a rudimentary transaction tagging protocol
  • Ruby initialization in Ruby process buffers - Implementing custom Ruby code (e.g extending IRB for runtime config) and referencing custom code under iruby-implementations
  • Storing the comint input ring for each defined implementation, in lieu of the full history of input to the underlying Ruby process. Presently, the underlying Ruby interaction process (e.g IRB) may store all input - including 'here-text' tags from iRuby - in its own history file. To configure the interactive process to not store all input in a history file will require more implementation-specific forms, and may entail the distribution of some custom Ruby code for iRuby.
  • Debugger support (may be gem-specific)