class Pry::Output

Constants

DEFAULT_SIZE

@return [Array<Integer>] default terminal screen size [rows, cols]

Attributes

pry_instance[R]

Public Class Methods

new(pry_instance) click to toggle source
# File lib/pry/output.rb, line 10
def initialize(pry_instance)
  @output = pry_instance.config.output
  @color = pry_instance.config.color
end

Public Instance Methods

<<(*objs)
Alias for: print
decolorize_maybe(str) click to toggle source
# File lib/pry/output.rb, line 53
def decolorize_maybe(str)
  return str if @color

  Pry::Helpers::Text.strip_color(str)
end
height() click to toggle source

Return a screen height or the default if that fails.

# File lib/pry/output.rb, line 74
def height
  size.first
end
method_missing(method_name, *args, &block) click to toggle source
Calls superclass method
# File lib/pry/output.rb, line 41
def method_missing(method_name, *args, &block)
  if @output.respond_to?(method_name)
    @output.__send__(method_name, *args, &block)
  else
    super
  end
end
print(*objs) click to toggle source
Also aliased as: <<, write
puts(*objs) click to toggle source
# File lib/pry/output.rb, line 15
def puts(*objs)
  return print "\n" if objs.empty?

  objs.each do |obj|
    if (ary = Array.try_convert(obj))
      puts(*ary)
    else
      print "#{obj.to_s.chomp}\n"
    end
  end
  nil
end
respond_to_missing?(method_name, include_private = false) click to toggle source
# File lib/pry/output.rb, line 49
def respond_to_missing?(method_name, include_private = false)
  @output.respond_to?(method_name, include_private)
end
size() click to toggle source

@return [Array<Integer>] a pair of [rows, columns] which gives the size of

the window. If the window size cannot be determined, the default value.
# File lib/pry/output.rb, line 61
def size
  rows, cols = actual_screen_size
  return [rows.to_i, cols.to_i] if rows.to_i != 0 && cols.to_i != 0

  DEFAULT_SIZE
end
tty?() click to toggle source
# File lib/pry/output.rb, line 37
def tty?
  @output.respond_to?(:tty?) && @output.tty?
end
width() click to toggle source

Return a screen width or the default if that fails.

# File lib/pry/output.rb, line 69
def width
  size.last
end
write(*objs)
Alias for: print

Private Instance Methods

actual_screen_size() click to toggle source
# File lib/pry/output.rb, line 80
def actual_screen_size
  # The best way, if possible (requires non-jruby >=1.9 or io-console gem).
  io_console_size ||
    # Fall back to the old standby, though it might be stale.
    env_size ||
    # Fall further back, though this one is also out of date without
    # something calling Readline.set_screen_size.
    readline_size ||
    # Windows users can otherwise run ansicon and get a decent answer.
    ansicon_env_size
end
ansicon_env_size() click to toggle source
# File lib/pry/output.rb, line 125
def ansicon_env_size
  return unless Pry::Env['ANSICON'] =~ /\((.*)x(.*)\)/

  size = [Regexp.last_match(2), Regexp.last_match(1)]
  size if nonzero_column?(size)
end
env_size() click to toggle source
# File lib/pry/output.rb, line 109
def env_size
  size = [Pry::Env['LINES'] || Pry::Env['ROWS'], Pry::Env['COLUMNS']]
  size if nonzero_column?(size)
end
io_console_size() click to toggle source
# File lib/pry/output.rb, line 92
def io_console_size
  return if Pry::Helpers::Platform.jruby?

  begin
    require 'io/console'

    begin
      @output.winsize if tty? && @output.respond_to?(:winsize)
    rescue Errno::EOPNOTSUPP # rubocop:disable Lint/HandleExceptions
      # Output is probably a socket, which doesn't support #winsize.
    end
  rescue LoadError # rubocop:disable Lint/HandleExceptions
    # They probably don't have the io/console stdlib or the io-console gem.
    # We'll keep trying.
  end
end
nonzero_column?(size) click to toggle source
# File lib/pry/output.rb, line 132
def nonzero_column?(size)
  size[1].to_i > 0
end
readline_size() click to toggle source
# File lib/pry/output.rb, line 114
def readline_size
  return unless defined?(Readline) && Readline.respond_to?(:get_screen_size)

  size = Readline.get_screen_size
  size if nonzero_column?(size)
rescue Java::JavaLang::NullPointerException
  # This rescue won't happen on jrubies later than:
  #     https://github.com/jruby/jruby/pull/436
  nil
end