class KV::KV
Public Class Methods
new(argv)
click to toggle source
# File lib/kv.rb, line 737 def initialize argv @opts = { following_mode: false, first_line: 0, line_mode: false, } files = parse_option(argv) name = files.shift @pipe_in = nil if @opts[:pipe] || (name && File.pipe?(name)) @opts.delete(:pipe) @opts[:fifo_file] = name || '/tmp/kv_pipe' if name && File.pipe?(name) # ok else begin name ||= File.expand_path('~/.kv_pipe') unlink_name = name File.mkfifo(name) at_exit{ puts "$ rm #{unlink_name}"; File.unlink(unlink_name) } rescue Errno::EEXIST raise "#{name} already exists." end end puts "waiting for #{name}" input = @pipe_in = open(name) name = nil elsif !name case when @opts[:e] cmd = @opts.delete(:e) input = IO.popen(cmd, 'a+') name = nil @pipe_in = input @opts[:ext_input] = input when STDIN.isatty input = help_io name = 'HELP' else input = STDIN.dup STDIN.reopen('/dev/tty') name = nil @pipe_in = input end else begin input = open(name) rescue Errno::ENOENT case name when /(.+):(\d+)/ name = $1 @opts[:first_line] = $2.to_i - 1 retry when URI.regexp input = URI.open(name) else STDERR.puts "#{name}: No such file or directory" exit 1 end end end trap(:INT){ log "SIGINT" } @screens = [Screen.new(input, name: name, **@opts)] end
Public Instance Methods
control()
click to toggle source
# File lib/kv.rb, line 837 def control @screens.last.init_screen until @screens.empty? begin @screens.last.control rescue PopScreen @screens.pop @screens.last.redraw! unless @screens.empty? rescue PushScreen => e @screens.push e.screen @screens.last.redraw! end end ensure Curses.close_screen log "terminate" end
parse_option(argv)
click to toggle source
# File lib/kv.rb, line 811 def parse_option argv opts = OptionParser.new opts.on('-f', 'following mode like "tail -f"'){ @opts[:following_mode] = true } opts.on('-n', '--line-number LINE', 'goto LINE'){|n| @opts[:first_line] = n.to_i - 1 } opts.on('-N', 'Show lines'){ @opts[:line_mode] = true } opts.on('-T', '--time-stamp', 'Enable time stamp'){ @opts[:time_stamp] = true } opts.on('-e CMD', 'Run CMD as a child process'){|cmd| @opts[:e] = cmd } opts.on('-p', '--pipe', 'Open named pipe'){ @opts[:pipe] = true } opts.on('-s', 'Separation mode (tsv)'){ @opts[:separation_mode] = true } opts.parse!(argv) end