Как сделать приложение командной строки ruby с помощью пейджера?
Я делаю инструмент командной строки с помощью Ruby. Он будет печатать много текста на экране. В настоящее время я использую Shell pipeline (may_app | more) для этого. Но я думаю, что лучше иметь пейджер по умолчанию.
это так же, как то, что вы видите, когда execute git log . Можно отключить пейджер с помощью git --nopager log. 
Я сделал довольно много работы google и найти один драгоценный камень:hirb , но это кажется немного перебор.
после многих попыток я использую shell обертка для этого:
#!/bin/bash
# xray.rb is the core script
# doing the main logic and will
# output many rows of text on 
# screen
XRAY=$HOME/fdev-xray/xray.rb
if [ "--nopager" == "" ]; then
    shift
    $XRAY $*
else
    $XRAY $* | more
fi
это работает. Но есть ли лучший способ?
2 ответов
Вы делаете все правильно. Но вместо этого с помощью more вам лучше получить пейджер от $PAGER переменная окружения, если таковая имеется.
некоторые люди предпочитают less to more например, и другие имеют свои любимые параметры парсера, установленные в этом var.
вы можете использовать трубу в Ruby через вызов system и предоставить параметры (вместе с хорошим интерфейсом справки), как так:
require 'optparse'
pager = ENV['PAGER'] || 'more'
option_parser = OptionParser.new do |opts|
  opts.on("--[no-]pager",
          "[don't] page output using #{pager} (default on)") do |use_pager|
    pager = nil unless use_pager
  end
end
option_parser.parse!
command = "cat #{ARGV[0]}"
command += " | #{pager}" unless pager.nil?
unless system(command)
  STDERR.puts "Problem running #{command}"
  exit 1
end
теперь, вы поддерживаете --pager и --no-pager в командной строке, что приятно делать.
