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



244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
# File 'lib/irb/input-method.rb', line 244

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



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

def auto_indent(&block)
  @auto_indent_proc = block
end

#check_termination(&block) ⇒ Object



274
275
276
# File 'lib/irb/input-method.rb', line 274

def check_termination(&block)
  @check_termination_proc = block
end

#dynamic_prompt(&block) ⇒ Object



278
279
280
# File 'lib/irb/input-method.rb', line 278

def dynamic_prompt(&block)
  @prompt_proc = block
end

#encodingObject

The external encoding for standard input.



329
330
331
# File 'lib/irb/input-method.rb', line 329

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)


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

def eof?
  @eof
end

#getsObject

Reads the next line from this input method.

See IO#gets for more information.



289
290
291
292
293
294
295
296
297
298
299
300
301
# File 'lib/irb/input-method.rb', line 289

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



334
335
336
337
338
339
340
341
342
343
344
# File 'lib/irb/input-method.rb', line 334

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.



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

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)


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

def readable_after_eof?
  true
end