def initialize(opts={})
@@exit_hooked = false
@state = Hashie::Mash.new( {
:time_last_show => Time.at(0),
:time_last_update => Time.at(0),
:time_start => nil,
:time_now => nil,
:msg => 'PowerBar!',
:done => 0,
:total => :unknown,
:settings => {
:rate_sample_max_interval => 10,
:rate_sample_window => 6,
:force_mode => nil,
:kilo => 1024,
:tty => {
:finite => {
:output => Proc.new{ |s| $stderr.print s[0..terminal_width()-1] },
:interval => 0.1,
:show_eta => true,
:template => {
:pre => "\e[1G\e[?25l",
:main => '${<msg>}: ${[<bar>] }${<rate>/s }${<percent>% }${<elapsed>}${, ETA: <eta>}',
:post => '',
:wipe => "\e[0m\e[1G\e[K",
:close => "\e[?25h\n",
:exit => "\e[?25h",
:barchar => RUBY18 ? '#' : "\u2588",
:padchar => RUBY18 ? '.' : "\u2022"
},
},
:infinite => {
:output => Proc.new{ |s| $stderr.print s[0..terminal_width()-1] },
:interval => 0.1,
:show_eta => false,
:template => {
:pre => "\e[1G\e[?25l",
:main => "${<msg>}: ${<done> }${<rate>/s }${<elapsed>}",
:post => "\e[K",
:wipe => "\e[0m\e[1G\e[K",
:close => "\e[?25h\n",
:exit => "\e[?25h",
:barchar => RUBY18 ? '#' : "\u2588",
:padchar => RUBY18 ? '.' : "\u2022"
},
}
},
:notty => {
:finite => {
:output => Proc.new{ |s| $stderr.print s },
:interval => 1,
:show_eta => true,
:line_width => 78,
:template => {
:pre => '',
:main => "${<msg>}: ${<done>}/${<total>}, ${<percent>%}${, <rate>/s}${, elapsed: <elapsed>}${, ETA: <eta>}\n",
:post => '',
:wipe => '',
:close => nil,
:exit => nil,
:barchar => "#",
:padchar => "."
},
},
:infinite => {
:output => Proc.new{ |s| $stderr.print s },
:interval => 1,
:show_eta => false,
:line_width => 78,
:template => {
:pre => "",
:main => "${<msg>}: ${<done> }${<rate>/s }${<elapsed>}\n",
:post => "",
:wipe => "",
:close => nil,
:exit => nil,
:barchar => "#",
:padchar => "."
},
}
}
}
}.merge(opts) )
end