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";
}
}
}