Class: Pry::Output

Inherits:
Object show all
Defined in:
lib/pry/output.rb

Constant Summary collapse

DEFAULT_SIZE =

Returns default terminal screen size [rows, cols].

Returns:

  • (Array<Integer>)

    default terminal screen size [rows, cols]

[27, 80].freeze

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(pry_instance) ⇒ Output

Returns a new instance of Output.


10
11
12
13
# File 'lib/pry/output.rb', line 10

def initialize(pry_instance)
  @output = pry_instance.config.output
  @color = pry_instance.config.color
end

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(method_name, *args, &block) ⇒ Object


41
42
43
44
45
46
47
# 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

Instance Attribute Details

#pry_instanceObject (readonly)

Returns the value of attribute pry_instance


8
9
10
# File 'lib/pry/output.rb', line 8

def pry_instance
  @pry_instance
end

Instance Method Details

#actual_screen_sizeObject (private)


80
81
82
83
84
85
86
87
88
89
90
# 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_sizeObject (private)


125
126
127
128
129
130
# 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

#decolorize_maybe(str) ⇒ Object


53
54
55
56
57
# File 'lib/pry/output.rb', line 53

def decolorize_maybe(str)
  return str if @color

  Pry::Helpers::Text.strip_color(str)
end

#env_sizeObject (private)


109
110
111
112
# 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

#heightObject

Return a screen height or the default if that fails.


74
75
76
# File 'lib/pry/output.rb', line 74

def height
  size.first
end

#io_console_sizeObject (private)


92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
# 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) ⇒ Boolean (private)

Returns:

  • (Boolean)

132
133
134
# File 'lib/pry/output.rb', line 132

def nonzero_column?(size)
  size[1].to_i > 0
end

28
29
30
31
32
33
# File 'lib/pry/output.rb', line 28

def print(*objs)
  objs.each do |obj|
    @output.print decolorize_maybe(obj.to_s)
  end
  nil
end

#puts(*objs) ⇒ Object


15
16
17
18
19
20
21
22
23
24
25
26
# 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

#readline_sizeObject (private)


114
115
116
117
118
119
120
121
122
123
# 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

#respond_to_missing?(method_name, include_private = false) ⇒ Boolean

Returns:

  • (Boolean)

49
50
51
# File 'lib/pry/output.rb', line 49

def respond_to_missing?(method_name, include_private = false)
  @output.respond_to?(method_name, include_private)
end

#sizeArray<Integer>

Returns a pair of [rows, columns] which gives the size of the window. If the window size cannot be determined, the default value.

Returns:

  • (Array<Integer>)

    a pair of [rows, columns] which gives the size of the window. If the window size cannot be determined, the default value.


61
62
63
64
65
66
# 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?Boolean

Returns:

  • (Boolean)

37
38
39
# File 'lib/pry/output.rb', line 37

def tty?
  @output.respond_to?(:tty?) && @output.tty?
end

#widthObject

Return a screen width or the default if that fails.


69
70
71
# File 'lib/pry/output.rb', line 69

def width
  size.last
end