소스 검색

Properly fix console colors in chainloader

Bepis 4 년 전
부모
커밋
fbf983f323
2개의 변경된 파일12개의 추가작업 그리고 6개의 파일을 삭제
  1. 8 3
      BepInEx/Console/ConsoleManager.cs
  2. 4 3
      BepInEx/Console/Unix/ConsoleWriter.cs

+ 8 - 3
BepInEx/Console/ConsoleManager.cs

@@ -4,6 +4,7 @@ using System.Text;
 using BepInEx.Configuration;
 using BepInEx.Unix;
 using BepInEx.ConsoleUtil;
+using HarmonyLib;
 using UnityInjector.ConsoleUtil;
 
 namespace BepInEx
@@ -38,12 +39,16 @@ namespace BepInEx
 				case PlatformID.Unix:
 				{
 					ConsoleActive = true;
-					
+
 					var duplicateStream = UnixStreamHelper.CreateDuplicateStream(1);
-					
+
 					var writer = ConsoleWriter.CreateConsoleStreamWriter(duplicateStream, Console.Out.Encoding, true);
 					
-					StandardOutStream = writer;
+					StandardOutStream = TextWriter.Synchronized(writer);
+					
+					var driver = AccessTools.Field(AccessTools.TypeByName("System.ConsoleDriver"), "driver").GetValue(null);
+					AccessTools.Field(AccessTools.TypeByName("System.TermInfoDriver"), "stdout").SetValue(driver, writer);
+
 					Console.SetOut(StandardOutStream);
 					break;
 				}

+ 4 - 3
BepInEx/Console/Unix/ConsoleWriter.cs

@@ -7,13 +7,14 @@ namespace BepInEx.Unix
 {
 	public static class ConsoleWriter
 	{
-		private static ConstructorInfo cStreamWriterConstructor = AccessTools.Constructor(AccessTools.TypeByName("System.IO.CStreamWriter"));
+		private static ConstructorInfo cStreamWriterConstructor = AccessTools.Constructor(AccessTools.TypeByName("System.IO.CStreamWriter"), new []{ typeof(Stream), typeof(Encoding), typeof(bool) });
 		public static TextWriter CreateConsoleStreamWriter(Stream stream, Encoding encoding, bool leaveOpen)
 		{
-			var writer = (StreamWriter)cStreamWriterConstructor.Invoke(null, new object[] { stream, encoding, leaveOpen, });
+			var writer = (StreamWriter)cStreamWriterConstructor.Invoke(new object[] { stream, encoding, leaveOpen, });
+			
 			writer.AutoFlush = true;
 
-			return TextWriter.Synchronized(writer);
+			return writer;
 		}
 	}
 }