Top Level Namespace
Defined Under Namespace
Modules: Colored, Enumerable, UPM Classes: DateTime, File, FreshportsSearch
Instance Method Summary collapse
-
#lesspipe(*args) ⇒ Object
Create scrollable output via less!.
Instance Method Details
#lesspipe(*args) ⇒ Object
Create scrollable output via less!
This command runs ‘less` in a subprocess, and gives you the IO to its STDIN pipe so that you can communicate with it.
Example:
lesspipe do |less|
50.times { less.puts "Hi mom!" }
end
The default less parameters are:
-
Allow colour
-
Don’t wrap lines longer than the screen
-
Quit immediately (without paging) if there’s less than one screen of text.
You can change these options by passing a hash to ‘lesspipe`, like so:
lesspipe(:wrap=>false) { |less| less.puts essay.to_s }
It accepts the following boolean options:
:color => Allow ANSI colour codes?
:wrap => Wrap long lines?
:always => Always page, even if there's less than one page of text?
:tail => Seek to the end of the stream
:search => <regexp> searches the output using the "/" operator
29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 |
# File 'lib/upm/lesspipe.rb', line 29 def lesspipe(*args) if args.any? and args.last.is_a?(Hash) = args.pop else = {} end output = args.first if args.any? # Don't page, just output to STDOUT if [:disabled] if output puts output else yield STDOUT end return end params = [] params << "-R" unless [:color] == false params << "-S" unless [:wrap] == true params << "-F" unless [:always] == true params << "-X" if regexp = [:search] params << "+/#{regexp}" elsif [:tail] == true params << "+\\>" $stderr.puts "Seeking to end of stream..." end IO.popen("less #{params * ' '}", "w") do |less| if output less.puts output else yield less end end rescue Errno::EPIPE, Interrupt # less just quit -- eat the exception. end |