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



268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
# File 'lib/irb/input-method.rb', line 268

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.completer_quote_characters = ''
  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



307
308
309
# File 'lib/irb/input-method.rb', line 307

def auto_indent(&block)
  @auto_indent_proc = block
end

#check_termination(&block) ⇒ Object



299
300
301
# File 'lib/irb/input-method.rb', line 299

def check_termination(&block)
  @check_termination_proc = block
end

#dynamic_prompt(&block) ⇒ Object



303
304
305
# File 'lib/irb/input-method.rb', line 303

def dynamic_prompt(&block)
  @prompt_proc = block
end

#encodingObject

The external encoding for standard input.



354
355
356
# File 'lib/irb/input-method.rb', line 354

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)


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

def eof?
  @eof
end

#getsObject

Reads the next line from this input method.

See IO#gets for more information.



314
315
316
317
318
319
320
321
322
323
324
325
326
# File 'lib/irb/input-method.rb', line 314

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



359
360
361
362
363
364
365
366
367
368
369
# File 'lib/irb/input-method.rb', line 359

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.



349
350
351
# File 'lib/irb/input-method.rb', line 349

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)


340
341
342
# File 'lib/irb/input-method.rb', line 340

def readable_after_eof?
  true
end