class Pry::Output
def actual_screen_size
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
def ansicon_env_size
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
def decolorize_maybe(str)
def decolorize_maybe(str) return str if @color Pry::Helpers::Text.strip_color(str) end
def env_size
def env_size size = [Pry::Env['LINES'] || Pry::Env['ROWS'], Pry::Env['COLUMNS']] size if nonzero_column?(size) end
def height
def height size.first end
def initialize(pry_instance)
def initialize(pry_instance) @output = pry_instance.config.output @color = pry_instance.config.color end
def io_console_size
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
def method_missing(method_name, *args, &block)
def method_missing(method_name, *args, &block) if @output.respond_to?(method_name) @output.__send__(method_name, *args, &block) else super end end
def nonzero_column?(size)
def nonzero_column?(size) size[1].to_i > 0 end
def print(*objs)
def print(*objs) objs.each do |obj| @output.print decolorize_maybe(obj.to_s) end nil end
def puts(*objs)
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
def readline_size
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
def respond_to_missing?(method_name, include_private = false)
def respond_to_missing?(method_name, include_private = false) @output.respond_to?(method_name, include_private) end
def size
-
(Array
- a pair of [rows, columns] which gives the size of)
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
def tty?
def tty? @output.respond_to?(:tty?) && @output.tty? end
def width
def width size.last end