Class: KV::KV
- Inherits:
-
Object
- Object
- KV::KV
- Defined in:
- lib/kv.rb
Instance Method Summary collapse
- #control ⇒ Object
-
#initialize(argv) ⇒ KV
constructor
A new instance of KV.
- #parse_option(argv) ⇒ Object
Constructor Details
#initialize(argv) ⇒ KV
Returns a new instance of KV.
773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 |
# File 'lib/kv.rb', line 773 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.('~/.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 |
Instance Method Details
#control ⇒ Object
879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 |
# File 'lib/kv.rb', line 879 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) ⇒ Object
847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 |
# File 'lib/kv.rb', line 847 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.on('-w', 'Watch mode: Reload on file changed'){ @opts[:watch] = true } opts.on('--filter-command=FILTER_COMMAND', 'Apply filter command'){|cmd| @opts[:filter_command] = cmd } opts.parse!(argv) end |