public void Initialize(bool alreadyActive, bool useWinApiEncoder) { // Console is always considered active on Unix ConsoleActive = true; StdoutRedirected = UnixStreamHelper.isatty(1) != 1; var duplicateStream = UnixStreamHelper.CreateDuplicateStream(1); if (UseMonoTtyDriver && !StdoutRedirected) { // Mono implementation handles xterm for us var writer = ConsoleWriter.CreateConsoleStreamWriter(duplicateStream, Console.Out.Encoding, true); StandardOut = TextWriter.Synchronized(writer); var driver = AccessTools.Field(AccessTools.TypeByName("System.ConsoleDriver"), "driver").GetValue(null); AccessTools.Field(AccessTools.TypeByName("System.TermInfoDriver"), "stdout").SetValue(driver, writer); } else { // Handle TTY ourselves var writer = new StreamWriter(duplicateStream, Console.Out.Encoding); writer.AutoFlush = true; StandardOut = TextWriter.Synchronized(writer); TtyInfo = TtyHandler.GetTtyInfo(); } ConsoleOut = StandardOut; }