Class: Pry::Pager::PageTracker
Overview
PageTracker
tracks output to determine whether it's likely to take
up a whole page. This doesn't need to be super precise, but we can
use it for SimplePager
and to avoid invoking the system pager
unnecessarily.
One simplifying assumption is that we don't need #page?
to return
true
on the basis of an incomplete line. Long lines should be
counted as multiple lines, but we don't have to transition from
false
to true
until we see a newline.
Instance Method Summary collapse
-
#initialize(rows, cols) ⇒ PageTracker
constructor
A new instance of PageTracker.
-
#line_length(line) ⇒ Object
private
Approximation of the printable length of a given line, without the newline and without ANSI color codes.
- #page? ⇒ Boolean
- #record(str) ⇒ Object
- #reset ⇒ Object
Constructor Details
#initialize(rows, cols) ⇒ PageTracker
Returns a new instance of PageTracker.
214 215 216 217 218 |
# File 'lib/pry/pager.rb', line 214 def initialize(rows, cols) @rows = rows @cols = cols reset end |
Instance Method Details
#line_length(line) ⇒ Object (private)
Approximation of the printable length of a given line, without the newline and without ANSI color codes.
244 245 246 |
# File 'lib/pry/pager.rb', line 244 def line_length(line) line.chomp.gsub(/\e\[[\d;]*m/, '').length end |
#page? ⇒ Boolean
231 232 233 |
# File 'lib/pry/pager.rb', line 231 def page? @row >= @rows end |
#record(str) ⇒ Object
220 221 222 223 224 225 226 227 228 229 |
# File 'lib/pry/pager.rb', line 220 def record(str) str.lines.each do |line| if line.end_with? "\n" @row += ((@col + line_length(line) - 1) / @cols) + 1 @col = 0 else @col += line_length(line) end end end |
#reset ⇒ Object
235 236 237 238 |
# File 'lib/pry/pager.rb', line 235 def reset @row = 0 @col = 0 end |