Module: GitStyleBinary::Helpers::Pager

Defined in:
lib/git-style-binary/helpers/pager.rb

Class Method Summary collapse

Class Method Details

.run_pagerObject



6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# File 'lib/git-style-binary/helpers/pager.rb', line 6

def run_pager
  return if RUBY_PLATFORM =~ /win32/
  return unless STDOUT.tty?
  STDOUT.use_color = true

  read, write = IO.pipe

  unless Kernel.fork # Child process
    STDOUT.reopen(write)
    STDERR.reopen(write) if STDERR.tty?
    read.close
    write.close
    return
  end

  # Parent process, become pager
  STDIN.reopen(read)
  read.close
  write.close

  ENV['LESS'] = 'FSRX' # Don't page if the input is short enough

  Kernel.select [STDIN] # Wait until we have input before we start the pager
  pager = ENV['PAGER'] || 'less -erXF'
  exec pager rescue exec "/bin/sh", "-c", pager
end