当从git钩子执行时,C#应用程序的彩色输出



我需要在控制台应用程序中显示从git hook执行时的彩色输出,比如(预提交等(。这是我的一个开源项目中的一个问题,你可以在这里查看

假设我们有一个控制台应用程序,代码为:

Console.ForegroundColor = ConsoleColor.Blue;
Console.WriteLine("Hello World");

当我们从git钩子运行它时,输出是白色

我还尝试使用VT100转义码和启用控制台虚拟终端序列,但结果相同。

// ENABLE_VIRTUAL_TERMINAL_PROCESSING ...
// set color vt100
public static void SetForegroundColor(int r, int g, int b)
{
Console.Write($"x1b[38;2;{r};{g};{b}m");
}

例如预提交

#!/bin/sh
# run the application.
husky run 

任何能帮助我找出原因的信息都将不胜感激。问题是我还不确定该去哪里看,这是git特有的问题吗?Shell脚本问题还是C#问题?

看起来git bash不支持扩展颜色:

使用vt100转义颜色控件,无需扩展颜色即可解决问题。

Console.WriteLine("x1b[31mHello World2!x1b[0m");
/// <summary>
/// https://learn.microsoft.com/en-us/windows/console/console-virtual-terminal-sequences#text-formatting
/// Git-bash only supports 8 colors provided by the Windows Console.
/// </summary>
/// <param name="color"></param>
/// <exception cref="ArgumentOutOfRangeException"></exception>
public static void SetForegroundColor(ConsoleColor color)
{
var colorCode = color switch
{
ConsoleColor.Black => 30,
ConsoleColor.Red or ConsoleColor.DarkRed => 31,
ConsoleColor.Green or ConsoleColor.DarkGreen => 32,
ConsoleColor.Yellow or ConsoleColor.DarkYellow => 33,
ConsoleColor.Blue or ConsoleColor.DarkBlue => 34,
ConsoleColor.Magenta or ConsoleColor.DarkMagenta => 35,
ConsoleColor.Cyan or ConsoleColor.DarkCyan => 36,
ConsoleColor.White => 37,
_ => throw new ArgumentOutOfRangeException(nameof(color), color, null)
};
Console.Write($"x1b[{colorCode}m");
}

相关内容

最新更新