# File lib/lolcat/lol.rb, line 42 def self.cat(fd, opts={}) print "\e[?25l" if opts[:animate] while true do buf = '' begin begin buf += fd.sysread(4096) invalid_encoding = !buf.dup.force_encoding(fd.external_encoding).valid_encoding? end while invalid_encoding or buf.match(INCOMPLETE_ESCAPE) rescue EOFError break end buf.force_encoding(fd.external_encoding) buf.lines.each do |line| opts[:os] += 1 println(line, opts) end end ensure if STDOUT.tty? then print "\e[m\e[?25h\e[?1;5;2004l" # system("stty sane -istrip <&1"); end end