从 git 钩子执行时的 C# 应用彩色输出
C# app colored output when executed from git hooks
当从 git 钩子 执行时,我需要在控制台应用程序中显示彩色输出(预提交等)。这是我的一个开源项目的问题,您可以查看 here
假设我们有一个控制台应用程序,代码如下:
Console.ForegroundColor = ConsoleColor.Blue;
Console.WriteLine("Hello World");
当我们从 git 钩子中 运行 时,输出是 white。
我也尝试使用 VT100 转义码和 enabling console virtual terminal 序列,但结果相同。
// 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 不支持 extended colors:
使用 vt100 转义颜色控件,无需扩展颜色即可解决问题。
Console.WriteLine("\x1b[31mHello World2!\x1b[0m");
/// <summary>
/// https://docs.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");
}
当从 git 钩子 执行时,我需要在控制台应用程序中显示彩色输出(预提交等)。这是我的一个开源项目的问题,您可以查看 here
假设我们有一个控制台应用程序,代码如下:
Console.ForegroundColor = ConsoleColor.Blue;
Console.WriteLine("Hello World");
当我们从 git 钩子中 运行 时,输出是 white。
我也尝试使用 VT100 转义码和 enabling console virtual terminal 序列,但结果相同。
// 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 不支持 extended colors:
使用 vt100 转义颜色控件,无需扩展颜色即可解决问题。
Console.WriteLine("\x1b[31mHello World2!\x1b[0m");
/// <summary>
/// https://docs.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");
}