Class: Pry::Terminal

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

Class Method Summary collapse

Class Method Details

.actual_screen_sizeObject



31
32
33
34
35
36
37
38
39
40
41
# File 'lib/pry/terminal.rb', line 31

def actual_screen_size
  # The best way, if possible (requires non-jruby ≥1.9 or io-console gem)
  screen_size_according_to_io_console or
    # Fall back to the old standby, though it might be stale:
    screen_size_according_to_env or
    # Fall further back, though this one is also out of date without something
    # calling Readline.set_screen_size
    screen_size_according_to_readline or
    # Windows users can otherwise run ansicon and get a decent answer:
    screen_size_according_to_ansicon_env
end

.height!Object

Return a screen height or the default if that fails.



27
28
29
# File 'lib/pry/terminal.rb', line 27

def height!
  size![0]
end

.nonzero_column?(size) ⇒ Boolean (private)

Returns:

  • (Boolean)


86
87
88
# File 'lib/pry/terminal.rb', line 86

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

.screen_sizeObject

Return a pair of [rows, columns] which gives the size of the window.

If the window size cannot be determined, return nil.



7
8
9
10
11
12
13
14
# File 'lib/pry/terminal.rb', line 7

def screen_size
  rows, cols = actual_screen_size
  if rows.to_i != 0 && cols.to_i != 0
    [rows.to_i, cols.to_i]
  else
    nil
  end
end

.screen_size_according_to_ansicon_envObject



78
79
80
81
82
# File 'lib/pry/terminal.rb', line 78

def screen_size_according_to_ansicon_env
  return unless ENV['ANSICON'] =~ /\((.*)x(.*)\)/
  size = [$2, $1]
  size if nonzero_column?(size)
end

.screen_size_according_to_envObject



62
63
64
65
# File 'lib/pry/terminal.rb', line 62

def screen_size_according_to_env
  size = [ENV['LINES'] || ENV['ROWS'], ENV['COLUMNS']]
  size if nonzero_column?(size)
end

.screen_size_according_to_io_consoleObject



43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
# File 'lib/pry/terminal.rb', line 43

def screen_size_according_to_io_console
  return if Pry::Helpers::BaseHelpers.jruby?

  begin
    require 'io/console'

    begin
      if $stdout.respond_to?(:tty?) && $stdout.tty? && $stdout.respond_to?(:winsize)
        $stdout.winsize
      end
    rescue Errno::EOPNOTSUPP
      # $stdout is probably a socket, which doesn't support #winsize.
    end
  rescue LoadError
    # They probably don't have the io/console stdlib or the io-console gem.
    # We'll keep trying.
  end
end

.screen_size_according_to_readlineObject



67
68
69
70
71
72
73
74
75
76
# File 'lib/pry/terminal.rb', line 67

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

.size!(default = [27, 80]) ⇒ Object

Return a screen size or a default if that fails.



17
18
19
# File 'lib/pry/terminal.rb', line 17

def size! default = [27, 80]
  screen_size || default
end

.width!Object

Return a screen width or the default if that fails.



22
23
24
# File 'lib/pry/terminal.rb', line 22

def width!
  size![1]
end