Sha256: 9af7023d89b267d980c30865de8eaddc1a8a20d95a246825855f580630ac1888

Contents?: true

Size: 1.84 KB

Versions: 16

Compression:

Stored size: 1.84 KB

Contents

class Pry::Pager
  # @param [String] text
  #   A piece of text to run through a pager.
  # @param [Symbol?] pager
  #   `:simple` -- Use the pure ruby pager.
  #   `:system` -- Use the system pager (less) or the environment variable
  #                $PAGER if set.
  #   `nil`     -- Infer what pager to use from the environment.  What this
  #                really means is that JRuby and systems that do not have
  #                access to 'less' will run through the pure ruby pager.
  def self.page(text, pager = nil)
    case pager
    when nil
      no_pager = !SystemPager.available?
      is_jruby = defined?(RUBY_ENGINE) && RUBY_ENGINE == "jruby"
      (is_jruby || no_pager) ? SimplePager.new(text).page : SystemPager.new(text).page
    when :simple
      SimplePager.new(text).page
    when :system
      SystemPager.new(text).page
    else
      raise "'#{pager}' is not a recognized pager."
    end
  end

  def self.page_size
    27
  end

  def initialize(text)
    @text = text
  end

  class SimplePager < Pry::Pager
    def page
      text_array = @text.lines.to_a
      text_array.each_slice(Pry::Pager.page_size) do |chunk|
        puts chunk.join
        break if chunk.size < Pry::Pager.page_size
        if text_array.size > Pry::Pager.page_size
          puts "\n<page break> --- Press enter to continue ( q<enter> to break ) --- <page break>"
          break if $stdin.gets.chomp == "q"
        end
      end
    end
  end

  class SystemPager < Pry::Pager
    def self.default_pager
      ENV["PAGER"] || "less -R -S -F -X"
    end

    def self.available?
      pager_executable = default_pager.split(' ').first
      `which #{ pager_executable }`
    rescue
    end

    def initialize(*)
      super
      @pager = SystemPager.default_pager
    end

    def page
      IO.popen(@pager, 'w') do |io|
        io.write @text
      end
    end
  end
end

Version data entries

16 entries across 16 versions & 1 rubygems

Version Path
pry-0.9.11.3 lib/pry/pager.rb
pry-0.9.11.3-i386-mswin32 lib/pry/pager.rb
pry-0.9.11.3-i386-mingw32 lib/pry/pager.rb
pry-0.9.11.3-java lib/pry/pager.rb
pry-0.9.11.2 lib/pry/pager.rb
pry-0.9.11.2-i386-mswin32 lib/pry/pager.rb
pry-0.9.11.2-i386-mingw32 lib/pry/pager.rb
pry-0.9.11.2-java lib/pry/pager.rb
pry-0.9.11.1 lib/pry/pager.rb
pry-0.9.11.1-i386-mswin32 lib/pry/pager.rb
pry-0.9.11.1-i386-mingw32 lib/pry/pager.rb
pry-0.9.11.1-java lib/pry/pager.rb
pry-0.9.11 lib/pry/pager.rb
pry-0.9.11-i386-mswin32 lib/pry/pager.rb
pry-0.9.11-i386-mingw32 lib/pry/pager.rb
pry-0.9.11-java lib/pry/pager.rb