Class: IRB::ReidlineInputMethod

Inherits:
InputMethod show all
Includes:
Reline
Defined in:
lib/irb/input-method.rb

Instance Attribute Summary

Attributes inherited from InputMethod

#file_name, #prompt

Instance Method Summary collapse

Methods inherited from InputMethod

#winsize

Constructor Details

#initializeReidlineInputMethod

Creates a new input method object using Readline



252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
# File 'lib/irb/input-method.rb', line 252

def initialize
  IRB.__send__(:set_encoding, Reline.encoding_system_needs.name, override: false)
  super

  @line_no = 0
  @line = []
  @eof = false

  @stdin = ::IO.open(STDIN.to_i, :external_encoding => IRB.conf[:LC_MESSAGES].encoding, :internal_encoding => "-")
  @stdout = ::IO.open(STDOUT.to_i, 'w', :external_encoding => IRB.conf[:LC_MESSAGES].encoding, :internal_encoding => "-")

  if Reline.respond_to?("basic_word_break_characters=")
    Reline.basic_word_break_characters = IRB::InputCompletor::BASIC_WORD_BREAK_CHARACTERS
  end
  Reline.completion_append_character = nil
  Reline.completion_proc = IRB::InputCompletor::CompletionProc
  Reline.output_modifier_proc =
    if IRB.conf[:USE_COLORIZE]
      proc do |output, complete: |
        next unless IRB::Color.colorable?
        IRB::Color.colorize_code(output, complete: complete)
      end
    else
      proc do |output|
        Reline::Unicode.escape_for_print(output)
      end
    end
  Reline.dig_perfect_match_proc = IRB::InputCompletor::PerfectMatchedProc
end

Instance Method Details

#auto_indent(&block) ⇒ Object



290
291
292
# File 'lib/irb/input-method.rb', line 290

def auto_indent(&block)
  @auto_indent_proc = block
end

#check_termination(&block) ⇒ Object



282
283
284
# File 'lib/irb/input-method.rb', line 282

def check_termination(&block)
  @check_termination_proc = block
end

#dynamic_prompt(&block) ⇒ Object



286
287
288
# File 'lib/irb/input-method.rb', line 286

def dynamic_prompt(&block)
  @prompt_proc = block
end

#encodingObject

The external encoding for standard input.



337
338
339
# File 'lib/irb/input-method.rb', line 337

def encoding
  @stdin.external_encoding
end

#eof?Boolean

Whether the end of this input method has been reached, returns true if there is no more data to read.

See IO#eof? for more information.

Returns:

  • (Boolean)


315
316
317
# File 'lib/irb/input-method.rb', line 315

def eof?
  @eof
end

#getsObject

Reads the next line from this input method.

See IO#gets for more information.



297
298
299
300
301
302
303
304
305
306
307
308
309
# File 'lib/irb/input-method.rb', line 297

def gets
  Reline.input = @stdin
  Reline.output = @stdout
  Reline.prompt_proc = @prompt_proc
  Reline.auto_indent_proc = @auto_indent_proc if @auto_indent_proc
  if l = readmultiline(@prompt, false, &@check_termination_proc)
    HISTORY.push(l) if !l.empty?
    @line[@line_no += 1] = l + "\n"
  else
    @eof = true
    l
  end
end

#inspectObject

For debug message



342
343
344
345
346
347
348
349
350
351
352
# File 'lib/irb/input-method.rb', line 342

def inspect
  config = Reline::Config.new
  str = "ReidlineInputMethod with Reline #{Reline::VERSION}"
  if config.respond_to?(:inputrc_path)
    inputrc_path = File.expand_path(config.inputrc_path)
  else
    inputrc_path = File.expand_path(ENV['INPUTRC'] || '~/.inputrc')
  end
  str += " and #{inputrc_path}" if File.exist?(inputrc_path)
  str
end

#line(line_no) ⇒ Object

Returns the current line number for #io.

#line counts the number of times #gets is called.

See IO#lineno for more information.



332
333
334
# File 'lib/irb/input-method.rb', line 332

def line(line_no)
  @line[line_no]
end

#readable_after_eof?Boolean

Whether this input method is still readable when there is no more data to read.

See IO#eof for more information.

Returns:

  • (Boolean)


323
324
325
# File 'lib/irb/input-method.rb', line 323

def readable_after_eof?
  true
end