local buffer=require("buffer") local tty_stream=require("tty").stream local core_stdin=buffer.new("r",tty_stream) local core_stdout=buffer.new("w",tty_stream) local core_stderr=buffer.new("w",setmetatable( { write=function(_,str) return tty_stream:write("\27[31m"..str.."\27[37m") end },{__index=tty_stream})) core_stdout:setvbuf("no") core_stderr:setvbuf("no") core_stdin.tty=true core_stdout.tty=true core_stderr.tty=true core_stdin.close=tty_stream.close core_stdout.close=tty_stream.close core_stderr.close=tty_stream.close local io_mt=getmetatable(io)or{} io_mt.__index=function(_,k) return k=='stdin'and io.input()or k=='stdout'and io.output()or k=='stderr'and io.error()or nil end setmetatable(io,io_mt) io.input(core_stdin) io.output(core_stdout) io.error(core_stderr)