Sha256: 79b65dc5b418849478e4d832b78624d42c6cab304b111b91e5b4330e153c8d00

Contents?: true

Size: 1.64 KB

Versions: 1

Compression:

Stored size: 1.64 KB

Contents

module Bond
  # This is the default readline plugin for Bond. A valid plugin must be a module that defines methods setup
  # and line_buffer as described below.
  module Readline
    DefaultBreakCharacters = " \t\n\"\\'`><=;|&{("

    # Loads the readline-like library and sets the completion_proc to the given agent.
    def setup(agent)
      require 'readline'
      load_extension unless ::Readline.respond_to?(:line_buffer)

      # Reinforcing irb defaults
      ::Readline.completion_append_character = nil
      if ::Readline.respond_to?("basic_word_break_characters=")
        ::Readline.basic_word_break_characters = DefaultBreakCharacters
      end

      ::Readline.completion_proc = agent
      if (::Readline::VERSION rescue nil).to_s[/editline/i]
        puts "Bond has detected EditLine and may not work with it. See the README's Limitations section."
      end
    end

    def load_extension
      require 'readline_line_buffer'
    rescue LoadError
      $stderr.puts "Bond Error: Failed to load readline_line_buffer extension. Falling back on RubyInline extension."
      require 'inline'
      eval %[
        module ::Readline
          inline do |builder|
            %w(<errno.h> <stdio.h> <readline/readline.h>).each{|h| builder.include h }
            builder.c_raw_singleton <<-EOC
        static VALUE line_buffer(VALUE self)
        {
          rb_secure(4);
          if (rl_line_buffer == NULL)
        return Qnil;
          return rb_tainted_str_new2(rl_line_buffer);
        }
        EOC
          end
        end
      ]
    end

    # Returns full line of what the user has typed.
    def line_buffer
      ::Readline.line_buffer
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
bond-0.2.1 lib/bond/readline.rb