Sha256: 193459af34dc8da0e8fc2b6167490f900192fc0bc09854205b84a9f844f3b5a2

Contents?: true

Size: 990 Bytes

Versions: 4

Compression:

Stored size: 990 Bytes

Contents

require 'rib/core/history'   # dependency
require 'rib/core/multiline' # dependency

module Rib::MultilineHistory
  include Rib::Plugin
  Shell.use(self)

  # --------------- Rib API ---------------

  def before_loop
    @multiline_trash = 0
    super
  end

  def loop_eval input
    return super if MultilineHistory.disabled?
    super
  ensure
    # SyntaxError might mean we're multiline editing
    handle_multiline unless multiline?($!)
  end

  def handle_interrupt
    return super if MultilineHistory.disabled?
    if multiline_buffer.size > 1
      multiline_trash
      @multiline_trash += 1
    end
    super
  end



  private
  def handle_multiline
    if multiline_buffer.size > 1
      # so multiline editing is considering done here
      # TODO: there's no history.pop(size)
      (multiline_buffer.size + multiline_trash).times{ history.pop }
      history << "\n" + multiline_buffer.join("\n")
    end
  end

  def multiline_trash
    @multiline_trash ||= 0
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
rib-1.0.5 lib/rib/more/multiline_history.rb
rib-1.0.4 lib/rib/more/multiline_history.rb
rib-1.0.3 lib/rib/more/multiline_history.rb
rib-1.0.2 lib/rib/more/multiline_history.rb