Sha256: df2fce49666df87c53132fbf2b8b74a1e0ec05fee7169789f094cc3636f4ee16

Contents?: true

Size: 1.53 KB

Versions: 1

Compression:

Stored size: 1.53 KB

Contents

module PryEditline

  def self.editor
    if defined?(Pry)
      Pry.editor
    else
      ENV.values_at('VISUAL', 'EDITOR').compact.first || 'vi'
    end
  end

  def self.hijack_inputrc
    inputrc = [
      ENV['INPUTRC'],
      (File.expand_path('~/.inputrc') rescue nil),
      '/etc/inputrc'
    ].compact.detect { |x| File.exist?(x) }

    require 'tempfile'
    file = Tempfile.new('inputrc')
    file.puts '"\C-x\C-l": redraw-current-line'
    file.puts '"\C-x\C-e": "  \C-a\t\C-k\C-x\C-l"'
    file.puts '"\C-o":     "  \C-a\t\C-k\C-x\C-l"'
    file.puts "$include #{inputrc}" if inputrc
    file.close
    ENV['INPUTRC'] = file.path
  end

  def self.completion_proc
    lambda do |s|
      if Readline.point == 0 && Readline.line_buffer =~ /  $/
        require 'tempfile'
        Tempfile.open(['readline-','.rb']) do |f|
          f.puts(Readline.line_buffer[0..-3])
          f.close
          system("#{editor} #{f.path}")
          File.read(f.path).chomp
        end
      else
        yield s
      end
    end
  end

end

if defined?(Pry::InputCompleter)
  PryEditline.hijack_inputrc
  class <<Pry::InputCompleter
    unless method_defined?(:build_completion_proc_without_edit)
      alias build_completion_proc_without_edit build_completion_proc

      def build_completion_proc(*args)
        PryEditline.completion_proc(&build_completion_proc_without_edit(*args))
      end
    end
  end
elsif defined?(IRB) && defined?(Readline)
  PryEditline.hijack_inputrc
  Readline.completion_proc = PryEditline.completion_proc(&Readline.completion_proc)
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
pry-editline-1.0.0 lib/pry-editline.rb