pry--pry/lib/pry/pager.rb

64 lines
1.5 KiB
Ruby
Raw Normal View History

2012-08-08 21:57:19 +00:00
class Pry::Pager
2012-08-09 21:51:50 +00:00
#
# @param [String] text
# A piece of text to run through a pager.
#
# @param [:simple] pager
# Use the pure ruby pager.
#
# @param [:system] pager
# Use the system pager (less)
#
# @param [nil] pager
# Infer what pager to use from the environment.
# What this really means is that JRuby uses the pure-ruby pager, and other
# platforms will use the system pager.
#
# @return [void]
#
2012-08-09 15:43:46 +00:00
def self.page(text, pager = nil)
case pager
when nil
is_jruby = defined?(RUBY_ENGINE) && RUBY_ENGINE == "jruby"
is_windows = Pry::Helpers::BaseHelpers.windows?
(is_jruby || is_windows) ? SimplePager.new(text).page : SystemPager.new(text).page
2012-08-09 15:43:46 +00:00
when :simple
SimplePager.new(text).page
when :system
SystemPager.new(text).page
else
raise "'#{pager}' is not a recongized pager."
end
2012-08-08 21:57:19 +00:00
end
2012-08-09 21:51:50 +00:00
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 page
IO.popen("less -R -S -F -X", "w") do |less|
less.puts @text
2012-08-08 21:57:19 +00:00
end
end
end
end