diff --git a/src/Spectre.Console/Internal/Backends/Ansi/AnsiBuilder.cs b/src/Spectre.Console/Internal/Backends/Ansi/AnsiBuilder.cs index bf5b0cf..2f73547 100644 --- a/src/Spectre.Console/Internal/Backends/Ansi/AnsiBuilder.cs +++ b/src/Spectre.Console/Internal/Backends/Ansi/AnsiBuilder.cs @@ -65,7 +65,7 @@ namespace Spectre.Console } var linkId = _linkHasher.GenerateId(link, text); - ansi = $"{CSI}]8;id={linkId};{link}{CSI}\\{ansi}{CSI}]8;;{CSI}\\"; + ansi = $"{ESC}]8;id={linkId};{link}{ESC}\\{ansi}{ESC}]8;;{ESC}\\"; } return ansi; diff --git a/src/Spectre.Console/Internal/Backends/Ansi/AnsiSequences.cs b/src/Spectre.Console/Internal/Backends/Ansi/AnsiSequences.cs index 9e99516..a51357e 100644 --- a/src/Spectre.Console/Internal/Backends/Ansi/AnsiSequences.cs +++ b/src/Spectre.Console/Internal/Backends/Ansi/AnsiSequences.cs @@ -4,10 +4,15 @@ namespace Spectre.Console { internal static class AnsiSequences { + /// + /// The ASCII escape character (decimal 27). + /// + public const string ESC = "\u001b"; + /// /// Introduces a control sequence that uses 8-bit characters. /// - public const string CSI = "\u001b"; + public const string CSI = ESC + "["; /// /// Text cursor enable. @@ -17,18 +22,6 @@ namespace Spectre.Console /// public const int DECTCEM = 25; - /// - /// This control function selects one or more character attributes at the same time. - /// - /// - /// See . - /// - /// The ANSI escape code. - public static string SGR(params int[] codes) - { - return CSI + "[" + string.Join(";", codes.Select(c => c.ToString())) + "m"; - } - /// /// This control function selects one or more character attributes at the same time. /// @@ -38,7 +31,8 @@ namespace Spectre.Console /// The ANSI escape code. public static string SGR(params byte[] codes) { - return CSI + "[" + string.Join(";", codes.Select(c => c.ToString())) + "m"; + var joinedCodes = string.Join(";", codes.Select(c => c.ToString())); + return $"{CSI}{joinedCodes}m"; } /// @@ -53,7 +47,7 @@ namespace Spectre.Console /// The ANSI escape code. public static string ED(int code) { - return CSI + $"[{code}J"; + return $"{CSI}{code}J"; } /// @@ -68,7 +62,7 @@ namespace Spectre.Console /// The ANSI escape code. public static string CUU(int steps) { - return CSI + $"[{steps}A"; + return $"{CSI}{steps}A"; } /// @@ -83,7 +77,7 @@ namespace Spectre.Console /// The ANSI escape code. public static string CUD(int steps) { - return CSI + $"[{steps}B"; + return $"{CSI}{steps}B"; } /// @@ -97,7 +91,7 @@ namespace Spectre.Console /// The ANSI escape code. public static string CUF(int steps) { - return CSI + $"[{steps}C"; + return $"{CSI}{steps}C"; } /// @@ -111,7 +105,7 @@ namespace Spectre.Console /// The ANSI escape code. public static string CUB(int steps) { - return CSI + $"[{steps}D"; + return $"{CSI}{steps}D"; } /// @@ -125,7 +119,7 @@ namespace Spectre.Console /// The ANSI escape code. public static string CUP(int line, int column) { - return CSI + $"[{line};{column}H"; + return $"{CSI}{line};{column}H"; } /// @@ -137,7 +131,7 @@ namespace Spectre.Console /// The ANSI escape code. public static string RM(int code) { - return CSI + $"[?{code}l"; + return $"{CSI}?{code}l"; } /// @@ -149,7 +143,7 @@ namespace Spectre.Console /// The ANSI escape code. public static string SM(int code) { - return CSI + $"[?{code}h"; + return $"{CSI}?{code}h"; } /// @@ -163,7 +157,7 @@ namespace Spectre.Console /// The ANSI escape code. public static string EL(int code) { - return CSI + $"[{code}K"; + return $"{CSI}{code}K"; } } }