Take the task of paginating some piece of text given a HighLine context
@return [HighLine] HighLine context
Returns a HighLine::Paginator instance where you can call {#page_print} on it. @param highline [HighLine] context @example
HighLine::Paginator.new(highline).page_print(statement)
# File lib/highline/paginator.rb, line 13 def initialize(highline) @highline = highline end
Ask user if they wish to continue paging output. Allows them to type “q” to cancel the paging process.
# File lib/highline/paginator.rb, line 44 def continue_paging? command = highline.new_scope.ask( "-- press enter/return to continue or q to stop -- " ) { |q| q.character = true } command !~ /\A[qQ]\Z/ # Only continue paging if Q was not hit. end
Page print a series of at most page_at lines for output. After each page is printed, HighLine will pause until the user presses enter/return then display the next page of data.
Note that the final page of output is not printed, but returned instead. This is to support any special handling for the final sequence.
@param text [String] text to be paginated @return [String] last line if paging is aborted
# File lib/highline/paginator.rb, line 27 def page_print(text) return text unless highline.page_at lines = text.lines.to_a while lines.size > highline.page_at highline.puts lines.slice!(0...highline.page_at).join highline.puts # Return last line if user wants to abort paging return "...\n#{lines.last}" unless continue_paging? end lines.join end