If I get this correctly, when stdout is redirected to a file, we'll still output escape codes?    Strictly speaking, there should be a check whether the stdout is a TTY. 
Unfortunately the Writer trait does not have an isatty() method, so you can't check.   I wonder if Terminal should work with  std::io::stdio::StdWriter instead...