class Pry::Pager::SystemPager
buffered content.
to it. If ‘#close` is called before then, it just prints out the
page long, then invokes an external pager and starts streaming output
`SystemPager` buffers output until we’re pretty sure it’s at least a
def self.available?
def self.available? if @system_pager.nil? @system_pager = begin pager_executable = default_pager.split(' ').first if Helpers::Platform.windows? || Helpers::Platform.windows_ansi? `where /Q #{pager_executable}` else `which #{pager_executable}` end $CHILD_STATUS.success? rescue StandardError false end else @system_pager end end
def self.default_pager
def self.default_pager pager = Pry::Env['PAGER'] || '' # Default to less, and make sure less is being passed the correct # options pager = "less -R -F -X" if pager.strip.empty? || pager =~ /^less\b/ pager end
def close
def close if invoked_pager? pager.close else @out.puts @buffer end end
def initialize(*)
def initialize(*) super @tracker = PageTracker.new(height, width) @buffer = "" @pager = nil end
def invoked_pager?
def invoked_pager? @pager end
def pager
def pager @pager ||= IO.popen(self.class.default_pager, 'w') end
def write(str)
def write(str) if invoked_pager? write_to_pager str else @tracker.record str @buffer += str write_to_pager @buffer if @tracker.page? end rescue Errno::EPIPE raise StopPaging end
def write_to_pager(text)
def write_to_pager(text) pager.write @out.decolorize_maybe(text) end