浏览代码

Fixes #3839, #3922 - CM Glyphs not working (#3923)

* fixed

* Moved Glyphs to ThemeScope

* Removed test code
Tig 5 月之前
父节点
当前提交
f3697a99f4
共有 36 个文件被更改,包括 922 次插入840 次删除
  1. 1 8
      Terminal.Gui/Configuration/ConfigurationManager.cs
  2. 1 0
      Terminal.Gui/Configuration/Scope.cs
  3. 1 1
      Terminal.Gui/Configuration/SourceGenerationContext.cs
  4. 185 147
      Terminal.Gui/Drawing/Glyphs.cs
  5. 3 3
      Terminal.Gui/Drawing/LineCanvas/LineStyle.cs
  6. 142 145
      Terminal.Gui/Resources/config.json
  7. 3 3
      Terminal.Gui/Views/CheckBox.cs
  8. 1 1
      UICatalog/Scenarios/CharacterMap/CharacterMap.cs
  9. 1 1
      UICatalog/Scenarios/Clipping.cs
  10. 6 6
      UICatalog/Scenarios/DynamicMenuBar.cs
  11. 2 2
      UICatalog/Scenarios/DynamicStatusBar.cs
  12. 2 2
      UICatalog/Scenarios/GraphViewExample.cs
  13. 2 2
      UICatalog/Scenarios/LineViewExample.cs
  14. 1 1
      UICatalog/Scenarios/ShadowStyles.cs
  15. 1 1
      UICatalog/Scenarios/SimpleDialog.cs
  16. 8 8
      UICatalog/Scenarios/Sliders.cs
  17. 2 2
      UICatalog/Scenarios/Snake.cs
  18. 4 4
      UICatalog/Scenarios/TableEditor.cs
  19. 5 5
      UICatalog/Scenarios/Unicode.cs
  20. 12 1
      UnitTests/Application/ApplicationTests.cs
  21. 56 35
      UnitTests/Configuration/ConfigurationMangerTests.cs
  22. 50 0
      UnitTests/Configuration/GlyphTests.cs
  23. 1 1
      UnitTests/Configuration/RuneJsonConverterTests.cs
  24. 76 76
      UnitTests/Dialogs/DialogTests.cs
  25. 2 2
      UnitTests/Dialogs/MessageBoxTests.cs
  26. 43 43
      UnitTests/Dialogs/WizardTests.cs
  27. 0 29
      UnitTests/Drawing/GlyphTests.cs
  28. 1 1
      UnitTests/Text/TextFormatterTests.cs
  29. 1 1
      UnitTests/View/Layout/Pos.AnchorEndTests.cs
  30. 10 10
      UnitTests/Views/ButtonTests.cs
  31. 16 16
      UnitTests/Views/CheckBoxTests.cs
  32. 5 5
      UnitTests/Views/GraphViewTests.cs
  33. 4 4
      UnitTests/Views/MenuBarTests.cs
  34. 264 264
      UnitTests/Views/ProgressBarTests.cs
  35. 4 4
      UnitTests/Views/RadioGroupTests.cs
  36. 6 6
      UnitTests/Views/TreeTableSourceTests.cs

+ 1 - 8
Terminal.Gui/Configuration/ConfigurationManager.cs

@@ -110,14 +110,6 @@ public static class ConfigurationManager
     [JsonPropertyName ("AppSettings")]
     [JsonPropertyName ("AppSettings")]
     public static AppScope? AppSettings { get; set; }
     public static AppScope? AppSettings { get; set; }
 
 
-    /// <summary>
-    ///     The set of glyphs used to draw checkboxes, lines, borders, etc...See also
-    ///     <seealso cref="Terminal.Gui.GlyphDefinitions"/>.
-    /// </summary>
-    [SerializableConfigurationProperty (Scope = typeof (SettingsScope), OmitClassName = true)]
-    [JsonPropertyName ("Glyphs")]
-    public static GlyphDefinitions Glyphs { get; set; } = new ();
-
     /// <summary>
     /// <summary>
     ///     Gets and sets the locations where <see cref="ConfigurationManager"/> will look for config files. The value is
     ///     Gets and sets the locations where <see cref="ConfigurationManager"/> will look for config files. The value is
     ///     <see cref="ConfigLocations.All"/>.
     ///     <see cref="ConfigLocations.All"/>.
@@ -301,6 +293,7 @@ public static class ConfigurationManager
     public static void OnApplied ()
     public static void OnApplied ()
     {
     {
         Debug.WriteLine ("ConfigurationManager.OnApplied()");
         Debug.WriteLine ("ConfigurationManager.OnApplied()");
+
         Applied?.Invoke (null, new ());
         Applied?.Invoke (null, new ());
 
 
         // TODO: Refactor ConfigurationManager to not use an event handler for this.
         // TODO: Refactor ConfigurationManager to not use an event handler for this.

+ 1 - 0
Terminal.Gui/Configuration/Scope.cs

@@ -1,4 +1,5 @@
 #nullable enable
 #nullable enable
+using System.Diagnostics;
 using System.Reflection;
 using System.Reflection;
 
 
 namespace Terminal.Gui;
 namespace Terminal.Gui;

+ 1 - 1
Terminal.Gui/Configuration/SourceGenerationContext.cs

@@ -10,7 +10,7 @@ namespace Terminal.Gui;
 [JsonSerializable (typeof (AppScope))]
 [JsonSerializable (typeof (AppScope))]
 [JsonSerializable (typeof (SettingsScope))]
 [JsonSerializable (typeof (SettingsScope))]
 [JsonSerializable (typeof (Key))]
 [JsonSerializable (typeof (Key))]
-[JsonSerializable (typeof (GlyphDefinitions))]
+[JsonSerializable (typeof (Glyphs))]
 [JsonSerializable (typeof (Alignment))]
 [JsonSerializable (typeof (Alignment))]
 [JsonSerializable (typeof (AlignmentModes))]
 [JsonSerializable (typeof (AlignmentModes))]
 [JsonSerializable (typeof (LineStyle))]
 [JsonSerializable (typeof (LineStyle))]

+ 185 - 147
Terminal.Gui/Drawing/Glyphs.cs

@@ -18,7 +18,7 @@
 ///         - A decimal number (e.g. 97 for "a")
 ///         - A decimal number (e.g. 97 for "a")
 ///     </para>
 ///     </para>
 /// </remarks>
 /// </remarks>
-public class GlyphDefinitions
+public class Glyphs
 {
 {
     // IMPORTANT: If you change these, make sure to update the ./Resources/config.json file as
     // IMPORTANT: If you change these, make sure to update the ./Resources/config.json file as
     // IMPORTANT: it is the source of truth for the default glyphs at runtime.
     // IMPORTANT: it is the source of truth for the default glyphs at runtime.
@@ -26,466 +26,504 @@ public class GlyphDefinitions
     // IMPORTANT: in ./UnitTests/bin/Debug/netX.0/config.json
     // IMPORTANT: in ./UnitTests/bin/Debug/netX.0/config.json
 
 
     /// <summary>File icon.  Defaults to ☰ (Trigram For Heaven)</summary>
     /// <summary>File icon.  Defaults to ☰ (Trigram For Heaven)</summary>
-    public Rune File { get; set; } = (Rune)'☰';
+    [SerializableConfigurationProperty (Scope = typeof (ThemeScope))]
+    public static Rune File { get; set; } = (Rune)'☰';
 
 
     /// <summary>Folder icon.  Defaults to ꤉ (Kayah Li Digit Nine)</summary>
     /// <summary>Folder icon.  Defaults to ꤉ (Kayah Li Digit Nine)</summary>
-    public Rune Folder { get; set; } = (Rune)'꤉';
+    [SerializableConfigurationProperty (Scope = typeof (ThemeScope))]
+    public static Rune Folder { get; set; } = (Rune)'꤉';
 
 
     /// <summary>Horizontal Ellipsis - … U+2026</summary>
     /// <summary>Horizontal Ellipsis - … U+2026</summary>
-    public Rune HorizontalEllipsis { get; set; } = (Rune)'…';
+    [SerializableConfigurationProperty (Scope = typeof (ThemeScope))]
+    public static Rune HorizontalEllipsis { get; set; } = (Rune)'…';
 
 
     /// <summary>Vertical Four Dots - ⁞ U+205e</summary>
     /// <summary>Vertical Four Dots - ⁞ U+205e</summary>
-    public Rune VerticalFourDots { get; set; } = (Rune)'⁞';
+    [SerializableConfigurationProperty (Scope = typeof (ThemeScope))]
+    public static Rune VerticalFourDots { get; set; } = (Rune)'⁞';
 
 
     #region ----------------- Single Glyphs -----------------
     #region ----------------- Single Glyphs -----------------
 
 
     /// <summary>Checked indicator (e.g. for <see cref="ListView"/> and <see cref="CheckBox"/>).</summary>
     /// <summary>Checked indicator (e.g. for <see cref="ListView"/> and <see cref="CheckBox"/>).</summary>
-    public Rune CheckStateChecked { get; set; } = (Rune)'☑';
+    [SerializableConfigurationProperty (Scope = typeof (ThemeScope))]
+    public static Rune CheckStateChecked { get; set; } = (Rune)'☑';
 
 
     /// <summary>Not Checked indicator (e.g. for <see cref="ListView"/> and <see cref="CheckBox"/>).</summary>
     /// <summary>Not Checked indicator (e.g. for <see cref="ListView"/> and <see cref="CheckBox"/>).</summary>
-    public Rune CheckStateUnChecked { get; set; } = (Rune)'☐';
+    [SerializableConfigurationProperty (Scope = typeof (ThemeScope))]
+    public static Rune CheckStateUnChecked { get; set; } = (Rune)'☐';
 
 
     /// <summary>Null Checked indicator (e.g. for <see cref="ListView"/> and <see cref="CheckBox"/>).</summary>
     /// <summary>Null Checked indicator (e.g. for <see cref="ListView"/> and <see cref="CheckBox"/>).</summary>
-    public Rune CheckStateNone { get; set; } = (Rune)'☒';
+    [SerializableConfigurationProperty (Scope = typeof (ThemeScope))]
+    public static Rune CheckStateNone { get; set; } = (Rune)'☒';
 
 
     /// <summary>Selected indicator  (e.g. for <see cref="ListView"/> and <see cref="RadioGroup"/>).</summary>
     /// <summary>Selected indicator  (e.g. for <see cref="ListView"/> and <see cref="RadioGroup"/>).</summary>
-    public Rune Selected { get; set; } = (Rune)'◉';
+    [SerializableConfigurationProperty (Scope = typeof (ThemeScope))]
+    public static Rune Selected { get; set; } = (Rune)'◉';
 
 
     /// <summary>Not Selected indicator (e.g. for <see cref="ListView"/> and <see cref="RadioGroup"/>).</summary>
     /// <summary>Not Selected indicator (e.g. for <see cref="ListView"/> and <see cref="RadioGroup"/>).</summary>
-    public Rune UnSelected { get; set; } = (Rune)'○';
+    [SerializableConfigurationProperty (Scope = typeof (ThemeScope))]
+    public static Rune UnSelected { get; set; } = (Rune)'○';
 
 
     /// <summary>Horizontal arrow.</summary>
     /// <summary>Horizontal arrow.</summary>
-    public Rune RightArrow { get; set; } = (Rune)'►';
+    [SerializableConfigurationProperty (Scope = typeof (ThemeScope))]
+    public static Rune RightArrow { get; set; } = (Rune)'►';
 
 
     /// <summary>Left arrow.</summary>
     /// <summary>Left arrow.</summary>
-    public Rune LeftArrow { get; set; } = (Rune)'◄';
+    [SerializableConfigurationProperty (Scope = typeof (ThemeScope))]
+    public static Rune LeftArrow { get; set; } = (Rune)'◄';
 
 
     /// <summary>Down arrow.</summary>
     /// <summary>Down arrow.</summary>
-    public Rune DownArrow { get; set; } = (Rune)'▼';
+    [SerializableConfigurationProperty (Scope = typeof (ThemeScope))]
+    public static Rune DownArrow { get; set; } = (Rune)'▼';
 
 
     /// <summary>Vertical arrow.</summary>
     /// <summary>Vertical arrow.</summary>
-    public Rune UpArrow { get; set; } = (Rune)'▲';
+    [SerializableConfigurationProperty (Scope = typeof (ThemeScope))]
+    public static Rune UpArrow { get; set; } = (Rune)'▲';
 
 
     /// <summary>Left default indicator (e.g. for <see cref="Button"/>.</summary>
     /// <summary>Left default indicator (e.g. for <see cref="Button"/>.</summary>
-    public Rune LeftDefaultIndicator { get; set; } = (Rune)'►';
+    [SerializableConfigurationProperty (Scope = typeof (ThemeScope))]
+    public static Rune LeftDefaultIndicator { get; set; } = (Rune)'►';
 
 
     /// <summary>Horizontal default indicator (e.g. for <see cref="Button"/>.</summary>
     /// <summary>Horizontal default indicator (e.g. for <see cref="Button"/>.</summary>
-    public Rune RightDefaultIndicator { get; set; } = (Rune)'◄';
+    [SerializableConfigurationProperty (Scope = typeof (ThemeScope))]
+    public static Rune RightDefaultIndicator { get; set; } = (Rune)'◄';
 
 
     /// <summary>Left Bracket (e.g. for <see cref="Button"/>. Default is (U+005B) - [.</summary>
     /// <summary>Left Bracket (e.g. for <see cref="Button"/>. Default is (U+005B) - [.</summary>
-    public Rune LeftBracket { get; set; } = (Rune)'⟦';
+    [SerializableConfigurationProperty (Scope = typeof (ThemeScope))]
+    public static Rune LeftBracket { get; set; } = (Rune)'⟦';
 
 
     /// <summary>Horizontal Bracket (e.g. for <see cref="Button"/>. Default is (U+005D) - ].</summary>
     /// <summary>Horizontal Bracket (e.g. for <see cref="Button"/>. Default is (U+005D) - ].</summary>
-    public Rune RightBracket { get; set; } = (Rune)'⟧';
+    [SerializableConfigurationProperty (Scope = typeof (ThemeScope))]
+    public static Rune RightBracket { get; set; } = (Rune)'⟧';
 
 
     /// <summary>Half block meter segment (e.g. for <see cref="ProgressBar"/>).</summary>
     /// <summary>Half block meter segment (e.g. for <see cref="ProgressBar"/>).</summary>
-    public Rune BlocksMeterSegment { get; set; } = (Rune)'▌';
+    [SerializableConfigurationProperty (Scope = typeof (ThemeScope))]
+    public static Rune BlocksMeterSegment { get; set; } = (Rune)'▌';
 
 
     /// <summary>Continuous block meter segment (e.g. for <see cref="ProgressBar"/>).</summary>
     /// <summary>Continuous block meter segment (e.g. for <see cref="ProgressBar"/>).</summary>
-    public Rune ContinuousMeterSegment { get; set; } = (Rune)'█';
+    [SerializableConfigurationProperty (Scope = typeof (ThemeScope))]
+    public static Rune ContinuousMeterSegment { get; set; } = (Rune)'█';
 
 
     /// <summary>Stipple pattern (e.g. for <see cref="ScrollBar"/>). Default is Light Shade (U+2591) - ░.</summary>
     /// <summary>Stipple pattern (e.g. for <see cref="ScrollBar"/>). Default is Light Shade (U+2591) - ░.</summary>
-    public Rune Stipple { get; set; } = (Rune)'░';
+    [SerializableConfigurationProperty (Scope = typeof (ThemeScope))]
+    public static Rune Stipple { get; set; } = (Rune)'░';
 
 
     /// <summary>Diamond. Default is Lozenge (U+25CA) - ◊.</summary>
     /// <summary>Diamond. Default is Lozenge (U+25CA) - ◊.</summary>
-    public Rune Diamond { get; set; } = (Rune)'◊';
+    [SerializableConfigurationProperty (Scope = typeof (ThemeScope))]
+    public static Rune Diamond { get; set; } = (Rune)'◊';
 
 
     /// <summary>Close. Default is Heavy Ballot X (U+2718) - ✘.</summary>
     /// <summary>Close. Default is Heavy Ballot X (U+2718) - ✘.</summary>
-    public Rune Close { get; set; } = (Rune)'✘';
+    [SerializableConfigurationProperty (Scope = typeof (ThemeScope))]
+    public static Rune Close { get; set; } = (Rune)'✘';
 
 
     /// <summary>Minimize. Default is Lower Horizontal Shadowed White Circle (U+274F) - ❏.</summary>
     /// <summary>Minimize. Default is Lower Horizontal Shadowed White Circle (U+274F) - ❏.</summary>
-    public Rune Minimize { get; set; } = (Rune)'❏';
+    [SerializableConfigurationProperty (Scope = typeof (ThemeScope))]
+    public static Rune Minimize { get; set; } = (Rune)'❏';
 
 
     /// <summary>Maximize. Default is Upper Horizontal Shadowed White Circle (U+273D) - ✽.</summary>
     /// <summary>Maximize. Default is Upper Horizontal Shadowed White Circle (U+273D) - ✽.</summary>
-    public Rune Maximize { get; set; } = (Rune)'✽';
+    [SerializableConfigurationProperty (Scope = typeof (ThemeScope))]
+    public static Rune Maximize { get; set; } = (Rune)'✽';
 
 
     /// <summary>Dot. Default is (U+2219) - ∙.</summary>
     /// <summary>Dot. Default is (U+2219) - ∙.</summary>
-    public Rune Dot { get; set; } = (Rune)'∙';
+    [SerializableConfigurationProperty (Scope = typeof (ThemeScope))]
+    public static Rune Dot { get; set; } = (Rune)'∙';
 
 
     /// <summary>Dotted Square - ⬚ U+02b1a┝</summary>
     /// <summary>Dotted Square - ⬚ U+02b1a┝</summary>
-    public Rune DottedSquare { get; set; } = (Rune)'⬚';
+    [SerializableConfigurationProperty (Scope = typeof (ThemeScope))]
+    public static Rune DottedSquare { get; set; } = (Rune)'⬚';
 
 
     /// <summary>Black Circle . Default is (U+025cf) - ●.</summary>
     /// <summary>Black Circle . Default is (U+025cf) - ●.</summary>
-    public Rune BlackCircle { get; set; } = (Rune)'●'; // Black Circle - ● U+025cf
+    [SerializableConfigurationProperty (Scope = typeof (ThemeScope))]
+    public static Rune BlackCircle { get; set; } = (Rune)'●'; // Black Circle - ● U+025cf
 
 
     /// <summary>Expand (e.g. for <see cref="TreeView"/>.</summary>
     /// <summary>Expand (e.g. for <see cref="TreeView"/>.</summary>
-    public Rune Expand { get; set; } = (Rune)'+';
+    [SerializableConfigurationProperty (Scope = typeof (ThemeScope))]
+    public static Rune Expand { get; set; } = (Rune)'+';
 
 
     /// <summary>Expand (e.g. for <see cref="TreeView"/>.</summary>
     /// <summary>Expand (e.g. for <see cref="TreeView"/>.</summary>
-    public Rune Collapse { get; set; } = (Rune)'-';
+    [SerializableConfigurationProperty (Scope = typeof (ThemeScope))]
+    public static Rune Collapse { get; set; } = (Rune)'-';
 
 
     /// <summary>Identical To (U+226)</summary>
     /// <summary>Identical To (U+226)</summary>
-    public Rune IdenticalTo { get; set; } = (Rune)'≡';
+    [SerializableConfigurationProperty (Scope = typeof (ThemeScope))]
+    public static Rune IdenticalTo { get; set; } = (Rune)'≡';
 
 
     /// <summary>Move indicator. Default is Lozenge (U+25CA) - ◊.</summary>
     /// <summary>Move indicator. Default is Lozenge (U+25CA) - ◊.</summary>
-    public Rune Move { get; set; } = (Rune)'◊';
+    [SerializableConfigurationProperty (Scope = typeof (ThemeScope))]
+    public static Rune Move { get; set; } = (Rune)'◊';
 
 
     /// <summary>Size Horizontally indicator. Default is ┥Left Right Arrow - ↔ U+02194</summary>
     /// <summary>Size Horizontally indicator. Default is ┥Left Right Arrow - ↔ U+02194</summary>
-    public Rune SizeHorizontal { get; set; } = (Rune)'↔';
+    [SerializableConfigurationProperty (Scope = typeof (ThemeScope))]
+    public static Rune SizeHorizontal { get; set; } = (Rune)'↔';
 
 
     /// <summary>Size Vertical indicator. Default Up Down Arrow - ↕ U+02195</summary>
     /// <summary>Size Vertical indicator. Default Up Down Arrow - ↕ U+02195</summary>
-    public Rune SizeVertical { get; set; } = (Rune)'↕';
+    [SerializableConfigurationProperty (Scope = typeof (ThemeScope))]
+    public static Rune SizeVertical { get; set; } = (Rune)'↕';
 
 
     /// <summary>Size Top Left indicator. North West Arrow - ↖ U+02196</summary>
     /// <summary>Size Top Left indicator. North West Arrow - ↖ U+02196</summary>
-    public Rune SizeTopLeft { get; set; } = (Rune)'↖';
+    [SerializableConfigurationProperty (Scope = typeof (ThemeScope))]
+    public static Rune SizeTopLeft { get; set; } = (Rune)'↖';
 
 
     /// <summary>Size Top Right indicator. North East Arrow - ↗ U+02197</summary>
     /// <summary>Size Top Right indicator. North East Arrow - ↗ U+02197</summary>
-    public Rune SizeTopRight { get; set; } = (Rune)'↗';
+    [SerializableConfigurationProperty (Scope = typeof (ThemeScope))]
+    public static Rune SizeTopRight { get; set; } = (Rune)'↗';
 
 
     /// <summary>Size Bottom Right indicator. South East Arrow - ↘ U+02198</summary>
     /// <summary>Size Bottom Right indicator. South East Arrow - ↘ U+02198</summary>
-    public Rune SizeBottomRight { get; set; } = (Rune)'↘';
+    [SerializableConfigurationProperty (Scope = typeof (ThemeScope))]
+    public static Rune SizeBottomRight { get; set; } = (Rune)'↘';
 
 
     /// <summary>Size Bottom Left indicator. South West Arrow - ↙ U+02199</summary>
     /// <summary>Size Bottom Left indicator. South West Arrow - ↙ U+02199</summary>
-    public Rune SizeBottomLeft { get; set; } = (Rune)'↙';
+    [SerializableConfigurationProperty (Scope = typeof (ThemeScope))]
+    public static Rune SizeBottomLeft { get; set; } = (Rune)'↙';
 
 
     /// <summary>Apple (non-BMP). Because snek. And because it's an example of a non-BMP surrogate pair. See Issue #2610.</summary>
     /// <summary>Apple (non-BMP). Because snek. And because it's an example of a non-BMP surrogate pair. See Issue #2610.</summary>
-    public Rune Apple { get; set; } = "🍎".ToRunes () [0]; // nonBMP
+    [SerializableConfigurationProperty (Scope = typeof (ThemeScope))]
+    public static Rune Apple { get; set; } = "🍎".ToRunes () [0]; // nonBMP
 
 
     /// <summary>Apple (BMP). Because snek. See Issue #2610.</summary>
     /// <summary>Apple (BMP). Because snek. See Issue #2610.</summary>
-    public Rune AppleBMP { get; set; } = (Rune)'❦';
-
-    ///// <summary>
-    ///// A nonprintable (low surrogate) that should fail to ctor.
-    ///// </summary>
-    //public Rune InvalidGlyph { get; set; } = (Rune)'\ud83d';
+    [SerializableConfigurationProperty (Scope = typeof (ThemeScope))]
+    public static Rune AppleBMP { get; set; } = (Rune)'❦';
 
 
     #endregion
     #endregion
 
 
     #region ----------------- Lines -----------------
     #region ----------------- Lines -----------------
 
 
     /// <summary>Box Drawings Horizontal Line - Light (U+2500) - ─</summary>
     /// <summary>Box Drawings Horizontal Line - Light (U+2500) - ─</summary>
-    public Rune HLine { get; set; } = (Rune)'─';
+    [SerializableConfigurationProperty (Scope = typeof (ThemeScope))]
+    public static Rune HLine { get; set; } = (Rune)'─';
 
 
     /// <summary>Box Drawings Vertical Line - Light (U+2502) - │</summary>
     /// <summary>Box Drawings Vertical Line - Light (U+2502) - │</summary>
-    public Rune VLine { get; set; } = (Rune)'│';
+    [SerializableConfigurationProperty (Scope = typeof (ThemeScope))]
+    public static Rune VLine { get; set; } = (Rune)'│';
 
 
     /// <summary>Box Drawings Double Horizontal (U+2550) - ═</summary>
     /// <summary>Box Drawings Double Horizontal (U+2550) - ═</summary>
-    public Rune HLineDbl { get; set; } = (Rune)'═';
+    [SerializableConfigurationProperty (Scope = typeof (ThemeScope))]
+    public static Rune HLineDbl { get; set; } = (Rune)'═';
 
 
     /// <summary>Box Drawings Double Vertical (U+2551) - ║</summary>
     /// <summary>Box Drawings Double Vertical (U+2551) - ║</summary>
-    public Rune VLineDbl { get; set; } = (Rune)'║';
+    [SerializableConfigurationProperty(Scope = typeof(ThemeScope))] public static Rune VLineDbl { get; set; } = (Rune)'║';
 
 
     /// <summary>Box Drawings Heavy Double Dash Horizontal (U+254D) - ╍</summary>
     /// <summary>Box Drawings Heavy Double Dash Horizontal (U+254D) - ╍</summary>
-    public Rune HLineHvDa2 { get; set; } = (Rune)'╍';
+    [SerializableConfigurationProperty(Scope = typeof(ThemeScope))] public static Rune HLineHvDa2 { get; set; } = (Rune)'╍';
 
 
     /// <summary>Box Drawings Heavy Triple Dash Vertical (U+2507) - ┇</summary>
     /// <summary>Box Drawings Heavy Triple Dash Vertical (U+2507) - ┇</summary>
-    public Rune VLineHvDa3 { get; set; } = (Rune)'┇';
+    [SerializableConfigurationProperty (Scope = typeof (ThemeScope))]
+    public static Rune VLineHvDa3 { get; set; } = (Rune)'┇';
 
 
     /// <summary>Box Drawings Heavy Triple Dash Horizontal (U+2505) - ┅</summary>
     /// <summary>Box Drawings Heavy Triple Dash Horizontal (U+2505) - ┅</summary>
-    public Rune HLineHvDa3 { get; set; } = (Rune)'┅';
+    [SerializableConfigurationProperty(Scope = typeof(ThemeScope))] public static Rune HLineHvDa3 { get; set; } = (Rune)'┅';
 
 
     /// <summary>Box Drawings Heavy Quadruple Dash Horizontal (U+2509) - ┉</summary>
     /// <summary>Box Drawings Heavy Quadruple Dash Horizontal (U+2509) - ┉</summary>
-    public Rune HLineHvDa4 { get; set; } = (Rune)'┉';
+    [SerializableConfigurationProperty(Scope = typeof(ThemeScope))] public static Rune HLineHvDa4 { get; set; } = (Rune)'┉';
 
 
     /// <summary>Box Drawings Heavy Double Dash Vertical (U+254F) - ╏</summary>
     /// <summary>Box Drawings Heavy Double Dash Vertical (U+254F) - ╏</summary>
-    public Rune VLineHvDa2 { get; set; } = (Rune)'╏';
+    [SerializableConfigurationProperty(Scope = typeof(ThemeScope))] public static Rune VLineHvDa2 { get; set; } = (Rune)'╏';
 
 
     /// <summary>Box Drawings Heavy Quadruple Dash Vertical (U+250B) - ┋</summary>
     /// <summary>Box Drawings Heavy Quadruple Dash Vertical (U+250B) - ┋</summary>
-    public Rune VLineHvDa4 { get; set; } = (Rune)'┋';
+    [SerializableConfigurationProperty(Scope = typeof(ThemeScope))] public static Rune VLineHvDa4 { get; set; } = (Rune)'┋';
 
 
     /// <summary>Box Drawings Light Double Dash Horizontal (U+254C) - ╌</summary>
     /// <summary>Box Drawings Light Double Dash Horizontal (U+254C) - ╌</summary>
-    public Rune HLineDa2 { get; set; } = (Rune)'╌';
+    [SerializableConfigurationProperty(Scope = typeof(ThemeScope))] public static Rune HLineDa2 { get; set; } = (Rune)'╌';
 
 
     /// <summary>Box Drawings Light Triple Dash Vertical (U+2506) - ┆</summary>
     /// <summary>Box Drawings Light Triple Dash Vertical (U+2506) - ┆</summary>
-    public Rune VLineDa3 { get; set; } = (Rune)'┆';
+    [SerializableConfigurationProperty(Scope = typeof(ThemeScope))] public static Rune VLineDa3 { get; set; } = (Rune)'┆';
 
 
     /// <summary>Box Drawings Light Triple Dash Horizontal (U+2504) - ┄</summary>
     /// <summary>Box Drawings Light Triple Dash Horizontal (U+2504) - ┄</summary>
-    public Rune HLineDa3 { get; set; } = (Rune)'┄';
+    [SerializableConfigurationProperty(Scope = typeof(ThemeScope))] public static Rune HLineDa3 { get; set; } = (Rune)'┄';
 
 
     /// <summary>Box Drawings Light Quadruple Dash Horizontal (U+2508) - ┈</summary>
     /// <summary>Box Drawings Light Quadruple Dash Horizontal (U+2508) - ┈</summary>
-    public Rune HLineDa4 { get; set; } = (Rune)'┈';
+    [SerializableConfigurationProperty(Scope = typeof(ThemeScope))] public static Rune HLineDa4 { get; set; } = (Rune)'┈';
 
 
     /// <summary>Box Drawings Light Double Dash Vertical (U+254E) - ╎</summary>
     /// <summary>Box Drawings Light Double Dash Vertical (U+254E) - ╎</summary>
-    public Rune VLineDa2 { get; set; } = (Rune)'╎';
+    [SerializableConfigurationProperty(Scope = typeof(ThemeScope))] public static Rune VLineDa2 { get; set; } = (Rune)'╎';
 
 
     /// <summary>Box Drawings Light Quadruple Dash Vertical (U+250A) - ┊</summary>
     /// <summary>Box Drawings Light Quadruple Dash Vertical (U+250A) - ┊</summary>
-    public Rune VLineDa4 { get; set; } = (Rune)'┊';
+    [SerializableConfigurationProperty(Scope = typeof(ThemeScope))] public static Rune VLineDa4 { get; set; } = (Rune)'┊';
 
 
     /// <summary>Box Drawings Heavy Horizontal (U+2501) - ━</summary>
     /// <summary>Box Drawings Heavy Horizontal (U+2501) - ━</summary>
-    public Rune HLineHv { get; set; } = (Rune)'━';
+    [SerializableConfigurationProperty(Scope = typeof(ThemeScope))] public static Rune HLineHv { get; set; } = (Rune)'━';
 
 
     /// <summary>Box Drawings Heavy Vertical (U+2503) - ┃</summary>
     /// <summary>Box Drawings Heavy Vertical (U+2503) - ┃</summary>
-    public Rune VLineHv { get; set; } = (Rune)'┃';
+    [SerializableConfigurationProperty(Scope = typeof(ThemeScope))] public static Rune VLineHv { get; set; } = (Rune)'┃';
 
 
     /// <summary>Box Drawings Light Left (U+2574) - ╴</summary>
     /// <summary>Box Drawings Light Left (U+2574) - ╴</summary>
-    public Rune HalfLeftLine { get; set; } = (Rune)'╴';
+    [SerializableConfigurationProperty(Scope = typeof(ThemeScope))] public static Rune HalfLeftLine { get; set; } = (Rune)'╴';
 
 
     /// <summary>Box Drawings Light Vertical (U+2575) - ╵</summary>
     /// <summary>Box Drawings Light Vertical (U+2575) - ╵</summary>
-    public Rune HalfTopLine { get; set; } = (Rune)'╵';
+    [SerializableConfigurationProperty(Scope = typeof(ThemeScope))] public static Rune HalfTopLine { get; set; } = (Rune)'╵';
 
 
     /// <summary>Box Drawings Light Horizontal (U+2576) - ╶</summary>
     /// <summary>Box Drawings Light Horizontal (U+2576) - ╶</summary>
-    public Rune HalfRightLine { get; set; } = (Rune)'╶';
+    [SerializableConfigurationProperty(Scope = typeof(ThemeScope))] public static Rune HalfRightLine { get; set; } = (Rune)'╶';
 
 
     /// <summary>Box Drawings Light Down (U+2577) - ╷</summary>
     /// <summary>Box Drawings Light Down (U+2577) - ╷</summary>
-    public Rune HalfBottomLine { get; set; } = (Rune)'╷';
+    [SerializableConfigurationProperty(Scope = typeof(ThemeScope))] public static Rune HalfBottomLine { get; set; } = (Rune)'╷';
 
 
     /// <summary>Box Drawings Heavy Left (U+2578) - ╸</summary>
     /// <summary>Box Drawings Heavy Left (U+2578) - ╸</summary>
-    public Rune HalfLeftLineHv { get; set; } = (Rune)'╸';
+    [SerializableConfigurationProperty(Scope = typeof(ThemeScope))] public static Rune HalfLeftLineHv { get; set; } = (Rune)'╸';
 
 
     /// <summary>Box Drawings Heavy Vertical (U+2579) - ╹</summary>
     /// <summary>Box Drawings Heavy Vertical (U+2579) - ╹</summary>
-    public Rune HalfTopLineHv { get; set; } = (Rune)'╹';
+    [SerializableConfigurationProperty(Scope = typeof(ThemeScope))] public static Rune HalfTopLineHv { get; set; } = (Rune)'╹';
 
 
     /// <summary>Box Drawings Heavy Horizontal (U+257A) - ╺</summary>
     /// <summary>Box Drawings Heavy Horizontal (U+257A) - ╺</summary>
-    public Rune HalfRightLineHv { get; set; } = (Rune)'╺';
+    [SerializableConfigurationProperty(Scope = typeof(ThemeScope))] public static Rune HalfRightLineHv { get; set; } = (Rune)'╺';
 
 
     /// <summary>Box Drawings Light Vertical and Horizontal (U+257B) - ╻</summary>
     /// <summary>Box Drawings Light Vertical and Horizontal (U+257B) - ╻</summary>
-    public Rune HalfBottomLineLt { get; set; } = (Rune)'╻';
+    [SerializableConfigurationProperty(Scope = typeof(ThemeScope))] public static Rune HalfBottomLineLt { get; set; } = (Rune)'╻';
 
 
     /// <summary>Box Drawings Light Horizontal and Heavy Horizontal (U+257C) - ╼</summary>
     /// <summary>Box Drawings Light Horizontal and Heavy Horizontal (U+257C) - ╼</summary>
-    public Rune RightSideLineLtHv { get; set; } = (Rune)'╼';
+    [SerializableConfigurationProperty(Scope = typeof(ThemeScope))] public static Rune RightSideLineLtHv { get; set; } = (Rune)'╼';
 
 
     /// <summary>Box Drawings Light Vertical and Heavy Horizontal (U+257D) - ╽</summary>
     /// <summary>Box Drawings Light Vertical and Heavy Horizontal (U+257D) - ╽</summary>
-    public Rune BottomSideLineLtHv { get; set; } = (Rune)'╽';
+    [SerializableConfigurationProperty(Scope = typeof(ThemeScope))] public static Rune BottomSideLineLtHv { get; set; } = (Rune)'╽';
 
 
     /// <summary>Box Drawings Heavy Left and Light Horizontal (U+257E) - ╾</summary>
     /// <summary>Box Drawings Heavy Left and Light Horizontal (U+257E) - ╾</summary>
-    public Rune LeftSideLineHvLt { get; set; } = (Rune)'╾';
+    [SerializableConfigurationProperty(Scope = typeof(ThemeScope))] public static Rune LeftSideLineHvLt { get; set; } = (Rune)'╾';
 
 
     /// <summary>Box Drawings Heavy Vertical and Light Horizontal (U+257F) - ╿</summary>
     /// <summary>Box Drawings Heavy Vertical and Light Horizontal (U+257F) - ╿</summary>
-    public Rune TopSideLineHvLt { get; set; } = (Rune)'╿';
+    [SerializableConfigurationProperty(Scope = typeof(ThemeScope))] public static Rune TopSideLineHvLt { get; set; } = (Rune)'╿';
 
 
     #endregion
     #endregion
 
 
     #region ----------------- Upper Left Corners -----------------
     #region ----------------- Upper Left Corners -----------------
 
 
     /// <summary>Box Drawings Upper Left Corner - Light Vertical and Light Horizontal (U+250C) - ┌</summary>
     /// <summary>Box Drawings Upper Left Corner - Light Vertical and Light Horizontal (U+250C) - ┌</summary>
-    public Rune ULCorner { get; set; } = (Rune)'┌';
+    [SerializableConfigurationProperty(Scope = typeof(ThemeScope))] public static Rune ULCorner { get; set; } = (Rune)'┌';
 
 
     /// <summary>Box Drawings Upper Left Corner -  Double (U+2554) - ╔</summary>
     /// <summary>Box Drawings Upper Left Corner -  Double (U+2554) - ╔</summary>
-    public Rune ULCornerDbl { get; set; } = (Rune)'╔';
+    [SerializableConfigurationProperty(Scope = typeof(ThemeScope))] public static Rune ULCornerDbl { get; set; } = (Rune)'╔';
 
 
     /// <summary>Box Drawings Upper Left Corner - Light Arc Down and Horizontal (U+256D) - ╭</summary>
     /// <summary>Box Drawings Upper Left Corner - Light Arc Down and Horizontal (U+256D) - ╭</summary>
-    public Rune ULCornerR { get; set; } = (Rune)'╭';
+    [SerializableConfigurationProperty(Scope = typeof(ThemeScope))] public static Rune ULCornerR { get; set; } = (Rune)'╭';
 
 
     /// <summary>Box Drawings Heavy Down and Horizontal (U+250F) - ┏</summary>
     /// <summary>Box Drawings Heavy Down and Horizontal (U+250F) - ┏</summary>
-    public Rune ULCornerHv { get; set; } = (Rune)'┏';
+    [SerializableConfigurationProperty(Scope = typeof(ThemeScope))] public static Rune ULCornerHv { get; set; } = (Rune)'┏';
 
 
     /// <summary>Box Drawings Down Heavy and Horizontal Light (U+251E) - ┎</summary>
     /// <summary>Box Drawings Down Heavy and Horizontal Light (U+251E) - ┎</summary>
-    public Rune ULCornerHvLt { get; set; } = (Rune)'┎';
+    [SerializableConfigurationProperty(Scope = typeof(ThemeScope))] public static Rune ULCornerHvLt { get; set; } = (Rune)'┎';
 
 
     /// <summary>Box Drawings Down Light and Horizontal Heavy (U+250D) - ┎</summary>
     /// <summary>Box Drawings Down Light and Horizontal Heavy (U+250D) - ┎</summary>
-    public Rune ULCornerLtHv { get; set; } = (Rune)'┍';
+    [SerializableConfigurationProperty(Scope = typeof(ThemeScope))] public static Rune ULCornerLtHv { get; set; } = (Rune)'┍';
 
 
     /// <summary>Box Drawings Double Down and Single Horizontal (U+2553) - ╓</summary>
     /// <summary>Box Drawings Double Down and Single Horizontal (U+2553) - ╓</summary>
-    public Rune ULCornerDblSingle { get; set; } = (Rune)'╓';
+    [SerializableConfigurationProperty(Scope = typeof(ThemeScope))] public static Rune ULCornerDblSingle { get; set; } = (Rune)'╓';
 
 
     /// <summary>Box Drawings Single Down and Double Horizontal (U+2552) - ╒</summary>
     /// <summary>Box Drawings Single Down and Double Horizontal (U+2552) - ╒</summary>
-    public Rune ULCornerSingleDbl { get; set; } = (Rune)'╒';
+    [SerializableConfigurationProperty(Scope = typeof(ThemeScope))] public static Rune ULCornerSingleDbl { get; set; } = (Rune)'╒';
 
 
     #endregion
     #endregion
 
 
     #region ----------------- Lower Left Corners -----------------
     #region ----------------- Lower Left Corners -----------------
 
 
     /// <summary>Box Drawings Lower Left Corner - Light Vertical and Light Horizontal (U+2514) - └</summary>
     /// <summary>Box Drawings Lower Left Corner - Light Vertical and Light Horizontal (U+2514) - └</summary>
-    public Rune LLCorner { get; set; } = (Rune)'└';
+    [SerializableConfigurationProperty(Scope = typeof(ThemeScope))] public static Rune LLCorner { get; set; } = (Rune)'└';
 
 
     /// <summary>Box Drawings Heavy Vertical and Horizontal (U+2517) - ┗</summary>
     /// <summary>Box Drawings Heavy Vertical and Horizontal (U+2517) - ┗</summary>
-    public Rune LLCornerHv { get; set; } = (Rune)'┗';
+    [SerializableConfigurationProperty(Scope = typeof(ThemeScope))] public static Rune LLCornerHv { get; set; } = (Rune)'┗';
 
 
     /// <summary>Box Drawings Heavy Vertical and Horizontal Light (U+2516) - ┖</summary>
     /// <summary>Box Drawings Heavy Vertical and Horizontal Light (U+2516) - ┖</summary>
-    public Rune LLCornerHvLt { get; set; } = (Rune)'┖';
+    [SerializableConfigurationProperty(Scope = typeof(ThemeScope))] public static Rune LLCornerHvLt { get; set; } = (Rune)'┖';
 
 
     /// <summary>Box Drawings Vertical Light and Horizontal Heavy (U+2511) - ┕</summary>
     /// <summary>Box Drawings Vertical Light and Horizontal Heavy (U+2511) - ┕</summary>
-    public Rune LLCornerLtHv { get; set; } = (Rune)'┕';
+    [SerializableConfigurationProperty(Scope = typeof(ThemeScope))] public static Rune LLCornerLtHv { get; set; } = (Rune)'┕';
 
 
     /// <summary>Box Drawings Double Vertical and Double Left (U+255A) - ╚</summary>
     /// <summary>Box Drawings Double Vertical and Double Left (U+255A) - ╚</summary>
-    public Rune LLCornerDbl { get; set; } = (Rune)'╚';
+    [SerializableConfigurationProperty(Scope = typeof(ThemeScope))] public static Rune LLCornerDbl { get; set; } = (Rune)'╚';
 
 
     /// <summary>Box Drawings Single Vertical and Double Left (U+2558) - ╘</summary>
     /// <summary>Box Drawings Single Vertical and Double Left (U+2558) - ╘</summary>
-    public Rune LLCornerSingleDbl { get; set; } = (Rune)'╘';
+    [SerializableConfigurationProperty(Scope = typeof(ThemeScope))] public static Rune LLCornerSingleDbl { get; set; } = (Rune)'╘';
 
 
     /// <summary>Box Drawings Double Down and Single Left (U+2559) - ╙</summary>
     /// <summary>Box Drawings Double Down and Single Left (U+2559) - ╙</summary>
-    public Rune LLCornerDblSingle { get; set; } = (Rune)'╙';
+    [SerializableConfigurationProperty(Scope = typeof(ThemeScope))] public static Rune LLCornerDblSingle { get; set; } = (Rune)'╙';
 
 
     /// <summary>Box Drawings Upper Left Corner - Light Arc Down and Left (U+2570) - ╰</summary>
     /// <summary>Box Drawings Upper Left Corner - Light Arc Down and Left (U+2570) - ╰</summary>
-    public Rune LLCornerR { get; set; } = (Rune)'╰';
+    [SerializableConfigurationProperty(Scope = typeof(ThemeScope))] public static Rune LLCornerR { get; set; } = (Rune)'╰';
 
 
     #endregion
     #endregion
 
 
     #region ----------------- Upper Right Corners -----------------
     #region ----------------- Upper Right Corners -----------------
 
 
     /// <summary>Box Drawings Upper Horizontal Corner - Light Vertical and Light Horizontal (U+2510) - ┐</summary>
     /// <summary>Box Drawings Upper Horizontal Corner - Light Vertical and Light Horizontal (U+2510) - ┐</summary>
-    public Rune URCorner { get; set; } = (Rune)'┐';
+    [SerializableConfigurationProperty(Scope = typeof(ThemeScope))] public static Rune URCorner { get; set; } = (Rune)'┐';
 
 
     /// <summary>Box Drawings Upper Horizontal Corner - Double Vertical and Double Horizontal (U+2557) - ╗</summary>
     /// <summary>Box Drawings Upper Horizontal Corner - Double Vertical and Double Horizontal (U+2557) - ╗</summary>
-    public Rune URCornerDbl { get; set; } = (Rune)'╗';
+    [SerializableConfigurationProperty(Scope = typeof(ThemeScope))] public static Rune URCornerDbl { get; set; } = (Rune)'╗';
 
 
     /// <summary>Box Drawings Upper Horizontal Corner - Light Arc Vertical and Horizontal (U+256E) - ╮</summary>
     /// <summary>Box Drawings Upper Horizontal Corner - Light Arc Vertical and Horizontal (U+256E) - ╮</summary>
-    public Rune URCornerR { get; set; } = (Rune)'╮';
+    [SerializableConfigurationProperty(Scope = typeof(ThemeScope))] public static Rune URCornerR { get; set; } = (Rune)'╮';
 
 
     /// <summary>Box Drawings Heavy Down and Left (U+2513) - ┓</summary>
     /// <summary>Box Drawings Heavy Down and Left (U+2513) - ┓</summary>
-    public Rune URCornerHv { get; set; } = (Rune)'┓';
+    [SerializableConfigurationProperty(Scope = typeof(ThemeScope))] public static Rune URCornerHv { get; set; } = (Rune)'┓';
 
 
     /// <summary>Box Drawings Heavy Vertical and Left Down Light (U+2511) - ┑</summary>
     /// <summary>Box Drawings Heavy Vertical and Left Down Light (U+2511) - ┑</summary>
-    public Rune URCornerHvLt { get; set; } = (Rune)'┑';
+    [SerializableConfigurationProperty(Scope = typeof(ThemeScope))] public static Rune URCornerHvLt { get; set; } = (Rune)'┑';
 
 
     /// <summary>Box Drawings Down Light and Horizontal Heavy (U+2514) - ┒</summary>
     /// <summary>Box Drawings Down Light and Horizontal Heavy (U+2514) - ┒</summary>
-    public Rune URCornerLtHv { get; set; } = (Rune)'┒';
+    [SerializableConfigurationProperty(Scope = typeof(ThemeScope))] public static Rune URCornerLtHv { get; set; } = (Rune)'┒';
 
 
     /// <summary>Box Drawings Double Vertical and Single Left (U+2556) - ╖</summary>
     /// <summary>Box Drawings Double Vertical and Single Left (U+2556) - ╖</summary>
-    public Rune URCornerDblSingle { get; set; } = (Rune)'╖';
+    [SerializableConfigurationProperty(Scope = typeof(ThemeScope))] public static Rune URCornerDblSingle { get; set; } = (Rune)'╖';
 
 
     /// <summary>Box Drawings Single Vertical and Double Left (U+2555) - ╕</summary>
     /// <summary>Box Drawings Single Vertical and Double Left (U+2555) - ╕</summary>
-    public Rune URCornerSingleDbl { get; set; } = (Rune)'╕';
+    [SerializableConfigurationProperty(Scope = typeof(ThemeScope))] public static Rune URCornerSingleDbl { get; set; } = (Rune)'╕';
 
 
     #endregion
     #endregion
 
 
     #region ----------------- Lower Right Corners -----------------
     #region ----------------- Lower Right Corners -----------------
 
 
     /// <summary>Box Drawings Lower Right Corner - Light (U+2518) - ┘</summary>
     /// <summary>Box Drawings Lower Right Corner - Light (U+2518) - ┘</summary>
-    public Rune LRCorner { get; set; } = (Rune)'┘';
+    [SerializableConfigurationProperty(Scope = typeof(ThemeScope))] public static Rune LRCorner { get; set; } = (Rune)'┘';
 
 
     /// <summary>Box Drawings Lower Right Corner - Double (U+255D) - ╝</summary>
     /// <summary>Box Drawings Lower Right Corner - Double (U+255D) - ╝</summary>
-    public Rune LRCornerDbl { get; set; } = (Rune)'╝';
+    [SerializableConfigurationProperty(Scope = typeof(ThemeScope))] public static Rune LRCornerDbl { get; set; } = (Rune)'╝';
 
 
     /// <summary>Box Drawings Lower Right Corner - Rounded (U+256F) - ╯</summary>
     /// <summary>Box Drawings Lower Right Corner - Rounded (U+256F) - ╯</summary>
-    public Rune LRCornerR { get; set; } = (Rune)'╯';
+    [SerializableConfigurationProperty(Scope = typeof(ThemeScope))] public static Rune LRCornerR { get; set; } = (Rune)'╯';
 
 
     /// <summary>Box Drawings Lower Right Corner - Heavy (U+251B) - ┛</summary>
     /// <summary>Box Drawings Lower Right Corner - Heavy (U+251B) - ┛</summary>
-    public Rune LRCornerHv { get; set; } = (Rune)'┛';
+    [SerializableConfigurationProperty(Scope = typeof(ThemeScope))] public static Rune LRCornerHv { get; set; } = (Rune)'┛';
 
 
     /// <summary>Box Drawings Lower Right Corner - Double Vertical and Single Horizontal (U+255C) - ╜</summary>
     /// <summary>Box Drawings Lower Right Corner - Double Vertical and Single Horizontal (U+255C) - ╜</summary>
-    public Rune LRCornerDblSingle { get; set; } = (Rune)'╜';
+    [SerializableConfigurationProperty(Scope = typeof(ThemeScope))] public static Rune LRCornerDblSingle { get; set; } = (Rune)'╜';
 
 
     /// <summary>Box Drawings Lower Right Corner - Single Vertical and Double Horizontal (U+255B) - ╛</summary>
     /// <summary>Box Drawings Lower Right Corner - Single Vertical and Double Horizontal (U+255B) - ╛</summary>
-    public Rune LRCornerSingleDbl { get; set; } = (Rune)'╛';
+    [SerializableConfigurationProperty(Scope = typeof(ThemeScope))] public static Rune LRCornerSingleDbl { get; set; } = (Rune)'╛';
 
 
     /// <summary>Box Drawings Lower Right Corner - Light Vertical and Heavy Horizontal (U+2519) - ┙</summary>
     /// <summary>Box Drawings Lower Right Corner - Light Vertical and Heavy Horizontal (U+2519) - ┙</summary>
-    public Rune LRCornerLtHv { get; set; } = (Rune)'┙';
+    [SerializableConfigurationProperty(Scope = typeof(ThemeScope))] public static Rune LRCornerLtHv { get; set; } = (Rune)'┙';
 
 
     /// <summary>Box Drawings Lower Right Corner - Heavy Vertical and Light Horizontal (U+251A) - ┚</summary>
     /// <summary>Box Drawings Lower Right Corner - Heavy Vertical and Light Horizontal (U+251A) - ┚</summary>
-    public Rune LRCornerHvLt { get; set; } = (Rune)'┚';
+    [SerializableConfigurationProperty(Scope = typeof(ThemeScope))] public static Rune LRCornerHvLt { get; set; } = (Rune)'┚';
 
 
     #endregion
     #endregion
 
 
     #region ----------------- Tees -----------------
     #region ----------------- Tees -----------------
 
 
     /// <summary>Box Drawings Left Tee - Single Vertical and Single Horizontal (U+251C) - ├</summary>
     /// <summary>Box Drawings Left Tee - Single Vertical and Single Horizontal (U+251C) - ├</summary>
-    public Rune LeftTee { get; set; } = (Rune)'├';
+    [SerializableConfigurationProperty(Scope = typeof(ThemeScope))] public static Rune LeftTee { get; set; } = (Rune)'├';
 
 
     /// <summary>Box Drawings Left Tee - Single Vertical and Double Horizontal (U+255E) - ╞</summary>
     /// <summary>Box Drawings Left Tee - Single Vertical and Double Horizontal (U+255E) - ╞</summary>
-    public Rune LeftTeeDblH { get; set; } = (Rune)'╞';
+    [SerializableConfigurationProperty(Scope = typeof(ThemeScope))] public static Rune LeftTeeDblH { get; set; } = (Rune)'╞';
 
 
     /// <summary>Box Drawings Left Tee - Double Vertical and Single Horizontal (U+255F) - ╟</summary>
     /// <summary>Box Drawings Left Tee - Double Vertical and Single Horizontal (U+255F) - ╟</summary>
-    public Rune LeftTeeDblV { get; set; } = (Rune)'╟';
+    [SerializableConfigurationProperty(Scope = typeof(ThemeScope))] public static Rune LeftTeeDblV { get; set; } = (Rune)'╟';
 
 
     /// <summary>Box Drawings Left Tee - Double Vertical and Double Horizontal (U+2560) - ╠</summary>
     /// <summary>Box Drawings Left Tee - Double Vertical and Double Horizontal (U+2560) - ╠</summary>
-    public Rune LeftTeeDbl { get; set; } = (Rune)'╠';
+    [SerializableConfigurationProperty(Scope = typeof(ThemeScope))] public static Rune LeftTeeDbl { get; set; } = (Rune)'╠';
 
 
     /// <summary>Box Drawings Left Tee - Heavy Horizontal and Light Vertical (U+2523) - ┝</summary>
     /// <summary>Box Drawings Left Tee - Heavy Horizontal and Light Vertical (U+2523) - ┝</summary>
-    public Rune LeftTeeHvH { get; set; } = (Rune)'┝';
+    [SerializableConfigurationProperty(Scope = typeof(ThemeScope))] public static Rune LeftTeeHvH { get; set; } = (Rune)'┝';
 
 
     /// <summary>Box Drawings Left Tee - Light Horizontal and Heavy Vertical (U+252B) - ┠</summary>
     /// <summary>Box Drawings Left Tee - Light Horizontal and Heavy Vertical (U+252B) - ┠</summary>
-    public Rune LeftTeeHvV { get; set; } = (Rune)'┠';
+    [SerializableConfigurationProperty(Scope = typeof(ThemeScope))] public static Rune LeftTeeHvV { get; set; } = (Rune)'┠';
 
 
     /// <summary>Box Drawings Left Tee - Heavy Vertical and Heavy Horizontal (U+2527) - ┣</summary>
     /// <summary>Box Drawings Left Tee - Heavy Vertical and Heavy Horizontal (U+2527) - ┣</summary>
-    public Rune LeftTeeHvDblH { get; set; } = (Rune)'┣';
+    [SerializableConfigurationProperty(Scope = typeof(ThemeScope))] public static Rune LeftTeeHvDblH { get; set; } = (Rune)'┣';
 
 
     /// <summary>Box Drawings Right Tee - Single Vertical and Single Horizontal (U+2524) - ┤</summary>
     /// <summary>Box Drawings Right Tee - Single Vertical and Single Horizontal (U+2524) - ┤</summary>
-    public Rune RightTee { get; set; } = (Rune)'┤';
+    [SerializableConfigurationProperty(Scope = typeof(ThemeScope))] public static Rune RightTee { get; set; } = (Rune)'┤';
 
 
     /// <summary>Box Drawings Right Tee - Single Vertical and Double Horizontal (U+2561) - ╡</summary>
     /// <summary>Box Drawings Right Tee - Single Vertical and Double Horizontal (U+2561) - ╡</summary>
-    public Rune RightTeeDblH { get; set; } = (Rune)'╡';
+    [SerializableConfigurationProperty(Scope = typeof(ThemeScope))] public static Rune RightTeeDblH { get; set; } = (Rune)'╡';
 
 
     /// <summary>Box Drawings Right Tee - Double Vertical and Single Horizontal (U+2562) - ╢</summary>
     /// <summary>Box Drawings Right Tee - Double Vertical and Single Horizontal (U+2562) - ╢</summary>
-    public Rune RightTeeDblV { get; set; } = (Rune)'╢';
+    [SerializableConfigurationProperty(Scope = typeof(ThemeScope))] public static Rune RightTeeDblV { get; set; } = (Rune)'╢';
 
 
     /// <summary>Box Drawings Right Tee - Double Vertical and Double Horizontal (U+2563) - ╣</summary>
     /// <summary>Box Drawings Right Tee - Double Vertical and Double Horizontal (U+2563) - ╣</summary>
-    public Rune RightTeeDbl { get; set; } = (Rune)'╣';
+    [SerializableConfigurationProperty(Scope = typeof(ThemeScope))] public static Rune RightTeeDbl { get; set; } = (Rune)'╣';
 
 
     /// <summary>Box Drawings Right Tee - Heavy Horizontal and Light Vertical (U+2528) - ┥</summary>
     /// <summary>Box Drawings Right Tee - Heavy Horizontal and Light Vertical (U+2528) - ┥</summary>
-    public Rune RightTeeHvH { get; set; } = (Rune)'┥';
+    [SerializableConfigurationProperty(Scope = typeof(ThemeScope))] public static Rune RightTeeHvH { get; set; } = (Rune)'┥';
 
 
     /// <summary>Box Drawings Right Tee - Light Horizontal and Heavy Vertical (U+2530) - ┨</summary>
     /// <summary>Box Drawings Right Tee - Light Horizontal and Heavy Vertical (U+2530) - ┨</summary>
-    public Rune RightTeeHvV { get; set; } = (Rune)'┨';
+    [SerializableConfigurationProperty(Scope = typeof(ThemeScope))] public static Rune RightTeeHvV { get; set; } = (Rune)'┨';
 
 
     /// <summary>Box Drawings Right Tee - Heavy Vertical and Heavy Horizontal (U+252C) - ┫</summary>
     /// <summary>Box Drawings Right Tee - Heavy Vertical and Heavy Horizontal (U+252C) - ┫</summary>
-    public Rune RightTeeHvDblH { get; set; } = (Rune)'┫';
+    [SerializableConfigurationProperty(Scope = typeof(ThemeScope))] public static Rune RightTeeHvDblH { get; set; } = (Rune)'┫';
 
 
     /// <summary>Box Drawings Top Tee - Single Vertical and Single Horizontal (U+252C) - ┬</summary>
     /// <summary>Box Drawings Top Tee - Single Vertical and Single Horizontal (U+252C) - ┬</summary>
-    public Rune TopTee { get; set; } = (Rune)'┬';
+    [SerializableConfigurationProperty(Scope = typeof(ThemeScope))] public static Rune TopTee { get; set; } = (Rune)'┬';
 
 
     /// <summary>Box Drawings Top Tee - Single Vertical and Double Horizontal (U+2564) - ╤</summary>
     /// <summary>Box Drawings Top Tee - Single Vertical and Double Horizontal (U+2564) - ╤</summary>
-    public Rune TopTeeDblH { get; set; } = (Rune)'╤';
+    [SerializableConfigurationProperty(Scope = typeof(ThemeScope))] public static Rune TopTeeDblH { get; set; } = (Rune)'╤';
 
 
     /// <summary>Box Drawings Top Tee - Double Vertical and Single Horizontal  (U+2565) - ╥</summary>
     /// <summary>Box Drawings Top Tee - Double Vertical and Single Horizontal  (U+2565) - ╥</summary>
-    public Rune TopTeeDblV { get; set; } = (Rune)'╥';
+    [SerializableConfigurationProperty(Scope = typeof(ThemeScope))] public static Rune TopTeeDblV { get; set; } = (Rune)'╥';
 
 
     /// <summary>Box Drawings Top Tee - Double Vertical and Double Horizontal (U+2566) - ╦</summary>
     /// <summary>Box Drawings Top Tee - Double Vertical and Double Horizontal (U+2566) - ╦</summary>
-    public Rune TopTeeDbl { get; set; } = (Rune)'╦';
+    [SerializableConfigurationProperty(Scope = typeof(ThemeScope))] public static Rune TopTeeDbl { get; set; } = (Rune)'╦';
 
 
     /// <summary>Box Drawings Top Tee - Heavy Horizontal and Light Vertical (U+252F) - ┯</summary>
     /// <summary>Box Drawings Top Tee - Heavy Horizontal and Light Vertical (U+252F) - ┯</summary>
-    public Rune TopTeeHvH { get; set; } = (Rune)'┯';
+    [SerializableConfigurationProperty(Scope = typeof(ThemeScope))] public static Rune TopTeeHvH { get; set; } = (Rune)'┯';
 
 
     /// <summary>Box Drawings Top Tee - Light Horizontal and Heavy Vertical (U+2537) - ┰</summary>
     /// <summary>Box Drawings Top Tee - Light Horizontal and Heavy Vertical (U+2537) - ┰</summary>
-    public Rune TopTeeHvV { get; set; } = (Rune)'┰';
+    [SerializableConfigurationProperty(Scope = typeof(ThemeScope))] public static Rune TopTeeHvV { get; set; } = (Rune)'┰';
 
 
     /// <summary>Box Drawings Top Tee - Heavy Vertical and Heavy Horizontal (U+2533) - ┳</summary>
     /// <summary>Box Drawings Top Tee - Heavy Vertical and Heavy Horizontal (U+2533) - ┳</summary>
-    public Rune TopTeeHvDblH { get; set; } = (Rune)'┳';
+    [SerializableConfigurationProperty(Scope = typeof(ThemeScope))] public static Rune TopTeeHvDblH { get; set; } = (Rune)'┳';
 
 
     /// <summary>Box Drawings Bottom Tee - Single Vertical and Single Horizontal (U+2534) - ┴</summary>
     /// <summary>Box Drawings Bottom Tee - Single Vertical and Single Horizontal (U+2534) - ┴</summary>
-    public Rune BottomTee { get; set; } = (Rune)'┴';
+    [SerializableConfigurationProperty(Scope = typeof(ThemeScope))] public static Rune BottomTee { get; set; } = (Rune)'┴';
 
 
     /// <summary>Box Drawings Bottom Tee - Single Vertical and Double Horizontal (U+2567) - ╧</summary>
     /// <summary>Box Drawings Bottom Tee - Single Vertical and Double Horizontal (U+2567) - ╧</summary>
-    public Rune BottomTeeDblH { get; set; } = (Rune)'╧';
+    [SerializableConfigurationProperty(Scope = typeof(ThemeScope))] public static Rune BottomTeeDblH { get; set; } = (Rune)'╧';
 
 
     /// <summary>Box Drawings Bottom Tee - Double Vertical and Single Horizontal (U+2568) - ╨</summary>
     /// <summary>Box Drawings Bottom Tee - Double Vertical and Single Horizontal (U+2568) - ╨</summary>
-    public Rune BottomTeeDblV { get; set; } = (Rune)'╨';
+    [SerializableConfigurationProperty(Scope = typeof(ThemeScope))] public static Rune BottomTeeDblV { get; set; } = (Rune)'╨';
 
 
     /// <summary>Box Drawings Bottom Tee - Double Vertical and Double Horizontal (U+2569) - ╩</summary>
     /// <summary>Box Drawings Bottom Tee - Double Vertical and Double Horizontal (U+2569) - ╩</summary>
-    public Rune BottomTeeDbl { get; set; } = (Rune)'╩';
+    [SerializableConfigurationProperty(Scope = typeof(ThemeScope))] public static Rune BottomTeeDbl { get; set; } = (Rune)'╩';
 
 
     /// <summary>Box Drawings Bottom Tee - Heavy Horizontal and Light Vertical (U+2535) - ┷</summary>
     /// <summary>Box Drawings Bottom Tee - Heavy Horizontal and Light Vertical (U+2535) - ┷</summary>
-    public Rune BottomTeeHvH { get; set; } = (Rune)'┷';
+    [SerializableConfigurationProperty(Scope = typeof(ThemeScope))] public static Rune BottomTeeHvH { get; set; } = (Rune)'┷';
 
 
     /// <summary>Box Drawings Bottom Tee - Light Horizontal and Heavy Vertical (U+253D) - ┸</summary>
     /// <summary>Box Drawings Bottom Tee - Light Horizontal and Heavy Vertical (U+253D) - ┸</summary>
-    public Rune BottomTeeHvV { get; set; } = (Rune)'┸';
+    [SerializableConfigurationProperty(Scope = typeof(ThemeScope))] public static Rune BottomTeeHvV { get; set; } = (Rune)'┸';
 
 
     /// <summary>Box Drawings Bottom Tee - Heavy Vertical and Heavy Horizontal (U+2539) - ┻</summary>
     /// <summary>Box Drawings Bottom Tee - Heavy Vertical and Heavy Horizontal (U+2539) - ┻</summary>
-    public Rune BottomTeeHvDblH { get; set; } = (Rune)'┻';
+    [SerializableConfigurationProperty(Scope = typeof(ThemeScope))] public static Rune BottomTeeHvDblH { get; set; } = (Rune)'┻';
 
 
     #endregion
     #endregion
 
 
     #region ----------------- Crosses -----------------
     #region ----------------- Crosses -----------------
 
 
     /// <summary>Box Drawings Cross - Single Vertical and Single Horizontal (U+253C) - ┼</summary>
     /// <summary>Box Drawings Cross - Single Vertical and Single Horizontal (U+253C) - ┼</summary>
-    public Rune Cross { get; set; } = (Rune)'┼';
+    [SerializableConfigurationProperty(Scope = typeof(ThemeScope))] public static Rune Cross { get; set; } = (Rune)'┼';
 
 
     /// <summary>Box Drawings Cross - Single Vertical and Double Horizontal (U+256A) - ╪</summary>
     /// <summary>Box Drawings Cross - Single Vertical and Double Horizontal (U+256A) - ╪</summary>
-    public Rune CrossDblH { get; set; } = (Rune)'╪';
+    [SerializableConfigurationProperty(Scope = typeof(ThemeScope))] public static Rune CrossDblH { get; set; } = (Rune)'╪';
 
 
     /// <summary>Box Drawings Cross - Double Vertical and Single Horizontal (U+256B) - ╫</summary>
     /// <summary>Box Drawings Cross - Double Vertical and Single Horizontal (U+256B) - ╫</summary>
-    public Rune CrossDblV { get; set; } = (Rune)'╫';
+    [SerializableConfigurationProperty(Scope = typeof(ThemeScope))] public static Rune CrossDblV { get; set; } = (Rune)'╫';
 
 
     /// <summary>Box Drawings Cross - Double Vertical and Double Horizontal (U+256C) - ╬</summary>
     /// <summary>Box Drawings Cross - Double Vertical and Double Horizontal (U+256C) - ╬</summary>
-    public Rune CrossDbl { get; set; } = (Rune)'╬';
+    [SerializableConfigurationProperty(Scope = typeof(ThemeScope))] public static Rune CrossDbl { get; set; } = (Rune)'╬';
 
 
     /// <summary>Box Drawings Cross - Heavy Horizontal and Light Vertical (U+253F) - ┿</summary>
     /// <summary>Box Drawings Cross - Heavy Horizontal and Light Vertical (U+253F) - ┿</summary>
-    public Rune CrossHvH { get; set; } = (Rune)'┿';
+    [SerializableConfigurationProperty(Scope = typeof(ThemeScope))] public static Rune CrossHvH { get; set; } = (Rune)'┿';
 
 
     /// <summary>Box Drawings Cross - Light Horizontal and Heavy Vertical (U+2541) - ╂</summary>
     /// <summary>Box Drawings Cross - Light Horizontal and Heavy Vertical (U+2541) - ╂</summary>
-    public Rune CrossHvV { get; set; } = (Rune)'╂';
+    [SerializableConfigurationProperty(Scope = typeof(ThemeScope))] public static Rune CrossHvV { get; set; } = (Rune)'╂';
 
 
     /// <summary>Box Drawings Cross - Heavy Vertical and Heavy Horizontal (U+254B) - ╋</summary>
     /// <summary>Box Drawings Cross - Heavy Vertical and Heavy Horizontal (U+254B) - ╋</summary>
-    public Rune CrossHv { get; set; } = (Rune)'╋';
+    [SerializableConfigurationProperty(Scope = typeof(ThemeScope))] public static Rune CrossHv { get; set; } = (Rune)'╋';
 
 
     #endregion
     #endregion
 
 
     #region ----------------- ShadowStyle -----------------
     #region ----------------- ShadowStyle -----------------
 
 
     /// <summary>Shadow - Vertical Start - Left Half Block - ▌ U+0258c</summary>
     /// <summary>Shadow - Vertical Start - Left Half Block - ▌ U+0258c</summary>
-    public Rune ShadowVerticalStart { get; set; } = (Rune)'▖'; // Half: '\u2596'  ▖;
+    [SerializableConfigurationProperty(Scope = typeof(ThemeScope))] public static Rune ShadowVerticalStart { get; set; } = (Rune)'▖'; // Half: '\u2596'  ▖;
 
 
     /// <summary>Shadow - Vertical - Left Half Block - ▌ U+0258c</summary>
     /// <summary>Shadow - Vertical - Left Half Block - ▌ U+0258c</summary>
-    public Rune ShadowVertical { get; set; } = (Rune)'▌';
+    [SerializableConfigurationProperty(Scope = typeof(ThemeScope))] public static Rune ShadowVertical { get; set; } = (Rune)'▌';
 
 
     /// <summary>Shadow - Horizontal Start - Upper Half Block - ▀ U+02580</summary>
     /// <summary>Shadow - Horizontal Start - Upper Half Block - ▀ U+02580</summary>
-    public Rune ShadowHorizontalStart { get; set; } = (Rune)'▝'; // Half: ▝ U+0259d;
+    [SerializableConfigurationProperty(Scope = typeof(ThemeScope))] public static Rune ShadowHorizontalStart { get; set; } = (Rune)'▝'; // Half: ▝ U+0259d;
 
 
     /// <summary>Shadow - Horizontal - Upper Half Block - ▀ U+02580</summary>
     /// <summary>Shadow - Horizontal - Upper Half Block - ▀ U+02580</summary>
-    public Rune ShadowHorizontal { get; set; } = (Rune)'▀';
+    [SerializableConfigurationProperty(Scope = typeof(ThemeScope))] public static Rune ShadowHorizontal { get; set; } = (Rune)'▀';
 
 
     /// <summary>Shadow - Horizontal End - Quadrant Upper Left - ▘ U+02598</summary>
     /// <summary>Shadow - Horizontal End - Quadrant Upper Left - ▘ U+02598</summary>
-    public Rune ShadowHorizontalEnd { get; set; } = (Rune)'▘';
+    [SerializableConfigurationProperty(Scope = typeof(ThemeScope))] public static Rune ShadowHorizontalEnd { get; set; } = (Rune)'▘';
 
 
     #endregion
     #endregion
 }
 }

+ 3 - 3
Terminal.Gui/Drawing/LineCanvas/LineStyle.cs

@@ -10,7 +10,7 @@ public enum LineStyle
     /// <summary>No border is drawn.</summary>
     /// <summary>No border is drawn.</summary>
     None,
     None,
 
 
-    /// <summary>The border is drawn using thin line CM.Glyphs.</summary>
+    /// <summary>The border is drawn using thin line Glyphs.</summary>
     Single,
     Single,
 
 
     /// <summary>The border is drawn using thin line glyphs with dashed (double and triple) straight lines.</summary>
     /// <summary>The border is drawn using thin line glyphs with dashed (double and triple) straight lines.</summary>
@@ -19,10 +19,10 @@ public enum LineStyle
     /// <summary>The border is drawn using thin line glyphs with short dashed (triple and quadruple) straight lines.</summary>
     /// <summary>The border is drawn using thin line glyphs with short dashed (triple and quadruple) straight lines.</summary>
     Dotted,
     Dotted,
 
 
-    /// <summary>The border is drawn using thin double line CM.Glyphs.</summary>
+    /// <summary>The border is drawn using thin double line Glyphs.</summary>
     Double,
     Double,
 
 
-    /// <summary>The border is drawn using heavy line CM.Glyphs.</summary>
+    /// <summary>The border is drawn using heavy line Glyphs.</summary>
     Heavy,
     Heavy,
 
 
     /// <summary>The border is drawn using heavy line glyphs with dashed (double and triple) straight lines.</summary>
     /// <summary>The border is drawn using heavy line glyphs with dashed (double and triple) straight lines.</summary>

+ 142 - 145
Terminal.Gui/Resources/config.json

@@ -38,150 +38,6 @@
   "FileDialogStyle.DefaultUseColors": false,
   "FileDialogStyle.DefaultUseColors": false,
   "FileDialogStyle.DefaultUseUnicodeCharacters": false,
   "FileDialogStyle.DefaultUseUnicodeCharacters": false,
 
 
-  // --------------- Glyphs ---------------
-  "Glyphs": {
-    "File": "☰",
-    "Folder": "꤉",
-    "HorizontalEllipsis": "…",
-    "VerticalFourDots": "⁞",
-    "CheckStateChecked": "☑",
-    "CheckStateUnChecked": "☐",
-    "CheckStateNone": "☒",
-    "Selected": "◉",
-    "UnSelected": "○",
-    "RightArrow": "►",
-    "LeftArrow": "◄",
-    "DownArrow": "▼",
-    "UpArrow": "▲",
-    "LeftDefaultIndicator": "►",
-    "RightDefaultIndicator": "◄",
-    "LeftBracket": "⟦",
-    "RightBracket": "⟧",
-    "BlocksMeterSegment": "▌",
-    "ContinuousMeterSegment": "█",
-    "Stipple": "░",
-    "Diamond": "◊",
-    "Close": "✘",
-    "Minimize": "❏",
-    "Maximize": "✽",
-    "Dot": "∙",
-    "BlackCircle": "●",
-    "Expand": "+",
-    "Collapse": "-",
-    "IdenticalTo": "≡",
-    "Move": "◊",
-    "SizeHorizontal": "↔",
-    "SizeVertical": "↕",
-    "SizeTopLeft": "↖",
-    "SizeTopRight": "↗",
-    "SizeBottomRight": "↘",
-    "SizeBottomLeft": "↙",
-    "Apple": "\uD83C\uDF4E",
-    "AppleBMP": "❦",
-    "HLine": "─",
-    "VLine": "│",
-    "HLineDbl": "═",
-    "VLineDbl": "║",
-    "HLineHvDa2": "╍",
-    "VLineHvDa3": "┇",
-    "HLineHvDa3": "┅",
-    "HLineHvDa4": "┉",
-    "VLineHvDa2": "╏",
-    "VLineHvDa4": "┋",
-    "HLineDa2": "╌",
-    "VLineDa3": "┆",
-    "HLineDa3": "┄",
-    "HLineDa4": "┈",
-    "VLineDa2": "╎",
-    "VLineDa4": "┊",
-    "HLineHv": "━",
-    "VLineHv": "┃",
-    "HalfLeftLine": "╴",
-    "HalfTopLine": "╵",
-    "HalfRightLine": "╶",
-    "HalfBottomLine": "╷",
-    "HalfLeftLineHv": "╸",
-    "HalfTopLineHv": "╹",
-    "HalfRightLineHv": "╺",
-    "HalfBottomLineLt": "╻",
-    "RightSideLineLtHv": "╼",
-    "BottomSideLineLtHv": "╽",
-    "LeftSideLineHvLt": "╾",
-    "TopSideLineHvLt": "╿",
-    "ULCorner": "┌",
-    "ULCornerDbl": "╔",
-    "ULCornerR": "╭",
-    "ULCornerHv": "┏",
-    "ULCornerHvLt": "┎",
-    "ULCornerLtHv": "┍",
-    "ULCornerDblSingle": "╓",
-    "ULCornerSingleDbl": "╒",
-    "LLCorner": "└",
-    "LLCornerHv": "┗",
-    "LLCornerHvLt": "┖",
-    "LLCornerLtHv": "┕",
-    "LLCornerDbl": "╚",
-    "LLCornerSingleDbl": "╘",
-    "LLCornerDblSingle": "╙",
-    "LLCornerR": "╰",
-    "URCorner": "┐",
-    "URCornerDbl": "╗",
-    "URCornerR": "╮",
-    "URCornerHv": "┓",
-    "URCornerHvLt": "┑",
-    "URCornerLtHv": "┒",
-    "URCornerDblSingle": "╖",
-    "URCornerSingleDbl": "╕",
-    "LRCorner": "┘",
-    "LRCornerDbl": "╝",
-    "LRCornerR": "╯",
-    "LRCornerHv": "┛",
-    "LRCornerDblSingle": "╜",
-    "LRCornerSingleDbl": "╛",
-    "LRCornerLtHv": "┙",
-    "LRCornerHvLt": "┚",
-    "LeftTee": "├",
-    "LeftTeeDblH": "╞",
-    "LeftTeeDblV": "╟",
-    "LeftTeeDbl": "╠",
-    "LeftTeeHvH": "┝",
-    "LeftTeeHvV": "┠",
-    "LeftTeeHvDblH": "┣",
-    "RightTee": "┤",
-    "RightTeeDblH": "╡",
-    "RightTeeDblV": "╢",
-    "RightTeeDbl": "╣",
-    "RightTeeHvH": "┥",
-    "RightTeeHvV": "┨",
-    "RightTeeHvDblH": "┫",
-    "TopTee": "┬",
-    "TopTeeDblH": "╤",
-    "TopTeeDblV": "╥",
-    "TopTeeDbl": "╦",
-    "TopTeeHvH": "┯",
-    "TopTeeHvV": "┰",
-    "TopTeeHvDblH": "┳",
-    "BottomTee": "┴",
-    "BottomTeeDblH": "╧",
-    "BottomTeeDblV": "╨",
-    "BottomTeeDbl": "╩",
-    "BottomTeeHvH": "┷",
-    "BottomTeeHvV": "┸",
-    "BottomTeeHvDblH": "┻",
-    "Cross": "┼",
-    "CrossDblH": "╪",
-    "CrossDblV": "╫",
-    "CrossDbl": "╬",
-    "CrossHvH": "┿",
-    "CrossHvV": "╂",
-    "CrossHv": "╋",
-    "ShadowVerticalStart": "▖",
-    "ShadowVertical": "▌",
-    "ShadowHorizontalStart": "▝",
-    "ShadowHorizontal": "▀",
-    "ShadowHorizontalEnd": "▘"
-  },
-
   // --------------- Themes -----------------
   // --------------- Themes -----------------
   "Theme": "Default",
   "Theme": "Default",
   "Themes": [
   "Themes": [
@@ -317,7 +173,148 @@
               }
               }
             }
             }
           }
           }
-        ]
+        ],
+        "Glyphs.Apple": "\uD83C\uDF4E",
+        "Glyphs.AppleBMP": "❦",
+        "Glyphs.BlackCircle": "●",
+        "Glyphs.BlocksMeterSegment": "▌",
+        "Glyphs.BottomSideLineLtHv": "╽",
+        "Glyphs.BottomTee": "┴",
+        "Glyphs.BottomTeeDbl": "╩",
+        "Glyphs.BottomTeeDblH": "╧",
+        "Glyphs.BottomTeeDblV": "╨",
+        "Glyphs.BottomTeeHvDblH": "┻",
+        "Glyphs.BottomTeeHvH": "┷",
+        "Glyphs.BottomTeeHvV": "┸",
+        "Glyphs.CheckStateChecked": "☑",
+        "Glyphs.CheckStateNone": "☒",
+        "Glyphs.CheckStateUnChecked": "☐",
+        "Glyphs.Close": "✘",
+        "Glyphs.Collapse": "-",
+        "Glyphs.ContinuousMeterSegment": "█",
+        "Glyphs.Cross": "┼",
+        "Glyphs.CrossDbl": "╬",
+        "Glyphs.CrossDblH": "╪",
+        "Glyphs.CrossDblV": "╫",
+        "Glyphs.CrossHv": "╋",
+        "Glyphs.CrossHvH": "┿",
+        "Glyphs.CrossHvV": "╂",
+        "Glyphs.Diamond": "◊",
+        "Glyphs.Dot": "∙",
+        "Glyphs.DottedSquare": "⬚",
+        "Glyphs.DownArrow": "▼",
+        "Glyphs.Expand": "+",
+        "Glyphs.File": "☰",
+        "Glyphs.Folder": "꤉",
+        "Glyphs.HalfBottomLine": "╷",
+        "Glyphs.HalfBottomLineLt": "╻",
+        "Glyphs.HalfLeftLine": "╴",
+        "Glyphs.HalfLeftLineHv": "╸",
+        "Glyphs.HalfRightLine": "╶",
+        "Glyphs.HalfRightLineHv": "╺",
+        "Glyphs.HalfTopLine": "╵",
+        "Glyphs.HalfTopLineHv": "╹",
+        "Glyphs.HLine": "─",
+        "Glyphs.HLineDa2": "╌",
+        "Glyphs.HLineDa3": "┄",
+        "Glyphs.HLineDa4": "┈",
+        "Glyphs.HLineDbl": "═",
+        "Glyphs.HLineHv": "━",
+        "Glyphs.HLineHvDa2": "╍",
+        "Glyphs.HLineHvDa3": "┅",
+        "Glyphs.HLineHvDa4": "┉",
+        "Glyphs.HorizontalEllipsis": "…",
+        "Glyphs.IdenticalTo": "≡",
+        "Glyphs.LeftArrow": "◄",
+        "Glyphs.LeftBracket": "⟦",
+        "Glyphs.LeftDefaultIndicator": "►",
+        "Glyphs.LeftSideLineHvLt": "╾",
+        "Glyphs.LeftTee": "├",
+        "Glyphs.LeftTeeDbl": "╠",
+        "Glyphs.LeftTeeDblH": "╞",
+        "Glyphs.LeftTeeDblV": "╟",
+        "Glyphs.LeftTeeHvDblH": "┣",
+        "Glyphs.LeftTeeHvH": "┝",
+        "Glyphs.LeftTeeHvV": "┠",
+        "Glyphs.LLCorner": "└",
+        "Glyphs.LLCornerDbl": "╚",
+        "Glyphs.LLCornerDblSingle": "╙",
+        "Glyphs.LLCornerHv": "┗",
+        "Glyphs.LLCornerHvLt": "┖",
+        "Glyphs.LLCornerLtHv": "┕",
+        "Glyphs.LLCornerR": "╰",
+        "Glyphs.LLCornerSingleDbl": "╘",
+        "Glyphs.LRCorner": "┘",
+        "Glyphs.LRCornerDbl": "╝",
+        "Glyphs.LRCornerDblSingle": "╜",
+        "Glyphs.LRCornerHv": "┛",
+        "Glyphs.LRCornerHvLt": "┚",
+        "Glyphs.LRCornerLtHv": "┙",
+        "Glyphs.LRCornerR": "╯",
+        "Glyphs.LRCornerSingleDbl": "╛",
+        "Glyphs.Maximize": "✽",
+        "Glyphs.Minimize": "❏",
+        "Glyphs.Move": "◊",
+        "Glyphs.RightArrow": "►",
+        "Glyphs.RightBracket": "⟧",
+        "Glyphs.RightDefaultIndicator": "◄",
+        "Glyphs.RightSideLineLtHv": "╼",
+        "Glyphs.RightTee": "┤",
+        "Glyphs.RightTeeDbl": "╣",
+        "Glyphs.RightTeeDblH": "╡",
+        "Glyphs.RightTeeDblV": "╢",
+        "Glyphs.RightTeeHvDblH": "┫",
+        "Glyphs.RightTeeHvH": "┥",
+        "Glyphs.RightTeeHvV": "┨",
+        "Glyphs.Selected": "◉",
+        "Glyphs.ShadowHorizontal": "▀",
+        "Glyphs.ShadowHorizontalEnd": "▘",
+        "Glyphs.ShadowHorizontalStart": "▝",
+        "Glyphs.ShadowVertical": "▌",
+        "Glyphs.ShadowVerticalStart": "▖",
+        "Glyphs.SizeBottomLeft": "↙",
+        "Glyphs.SizeBottomRight": "↘",
+        "Glyphs.SizeHorizontal": "↔",
+        "Glyphs.SizeTopLeft": "↖",
+        "Glyphs.SizeTopRight": "↗",
+        "Glyphs.SizeVertical": "↕",
+        "Glyphs.Stipple": "░",
+        "Glyphs.TopSideLineHvLt": "╿",
+        "Glyphs.TopTee": "┬",
+        "Glyphs.TopTeeDbl": "╦",
+        "Glyphs.TopTeeDblH": "╤",
+        "Glyphs.TopTeeDblV": "╥",
+        "Glyphs.TopTeeHvDblH": "┳",
+        "Glyphs.TopTeeHvH": "┯",
+        "Glyphs.TopTeeHvV": "┰",
+        "Glyphs.ULCorner": "┌",
+        "Glyphs.ULCornerDbl": "╔",
+        "Glyphs.ULCornerDblSingle": "╓",
+        "Glyphs.ULCornerHv": "┏",
+        "Glyphs.ULCornerHvLt": "┎",
+        "Glyphs.ULCornerLtHv": "┍",
+        "Glyphs.ULCornerR": "╭",
+        "Glyphs.ULCornerSingleDbl": "╒",
+        "Glyphs.UnSelected": "○",
+        "Glyphs.UpArrow": "▲",
+        "Glyphs.URCorner": "┐",
+        "Glyphs.URCornerDbl": "╗",
+        "Glyphs.URCornerDblSingle": "╖",
+        "Glyphs.URCornerHv": "┓",
+        "Glyphs.URCornerHvLt": "┑",
+        "Glyphs.URCornerLtHv": "┒",
+        "Glyphs.URCornerR": "╮",
+        "Glyphs.URCornerSingleDbl": "╕",
+        "Glyphs.VerticalFourDots": "⁞",
+        "Glyphs.VLine": "│",
+        "Glyphs.VLineDa2": "╎",
+        "Glyphs.VLineDa3": "┆",
+        "Glyphs.VLineDa4": "┊",
+        "Glyphs.VLineDbl": "║",
+        "Glyphs.VLineHv": "┃",
+        "Glyphs.VLineHvDa2": "╏",
+        "Glyphs.VLineHvDa3": "┇",
+        "Glyphs.VLineHvDa4": "┋"
       }
       }
     },
     },
     {
     {

+ 3 - 3
Terminal.Gui/Views/CheckBox.cs

@@ -114,15 +114,15 @@ public class CheckBox : View
     ///     <para>
     ///     <para>
     ///         If <see cref="AllowCheckStateNone"/> is <see langword="true"/> and <see cref="CheckState.None"/>, the
     ///         If <see cref="AllowCheckStateNone"/> is <see langword="true"/> and <see cref="CheckState.None"/>, the
     ///         <see cref="CheckBox"/>
     ///         <see cref="CheckBox"/>
-    ///         will display the <c>ConfigurationManager.Glyphs.CheckStateNone</c> character (☒).
+    ///         will display the <c>Glyphs.CheckStateNone</c> character (☒).
     ///     </para>
     ///     </para>
     ///     <para>
     ///     <para>
     ///         If <see cref="CheckState.UnChecked"/>, the <see cref="CheckBox"/>
     ///         If <see cref="CheckState.UnChecked"/>, the <see cref="CheckBox"/>
-    ///         will display the <c>ConfigurationManager.Glyphs.CheckStateUnChecked</c> character (☐).
+    ///         will display the <c>Glyphs.CheckStateUnChecked</c> character (☐).
     ///     </para>
     ///     </para>
     ///     <para>
     ///     <para>
     ///         If <see cref="CheckState.Checked"/>, the <see cref="CheckBox"/>
     ///         If <see cref="CheckState.Checked"/>, the <see cref="CheckBox"/>
-    ///         will display the <c>ConfigurationManager.Glyphs.CheckStateChecked</c> character (☑).
+    ///         will display the <c>Glyphs.CheckStateChecked</c> character (☑).
     ///     </para>
     ///     </para>
     /// </remarks>
     /// </remarks>
     public CheckState CheckedState
     public CheckState CheckedState

+ 1 - 1
UICatalog/Scenarios/CharacterMap/CharacterMap.cs

@@ -270,7 +270,7 @@ public class CharacterMap : Scenario
         var startSort = string.Empty;
         var startSort = string.Empty;
         var endSort = string.Empty;
         var endSort = string.Empty;
 
 
-        string sortIndicator = descending ? CM.Glyphs.DownArrow.ToString () : CM.Glyphs.UpArrow.ToString ();
+        string sortIndicator = descending ? Glyphs.DownArrow.ToString () : Glyphs.UpArrow.ToString ();
 
 
         switch (sortByColumn)
         switch (sortByColumn)
         {
         {

+ 1 - 1
UICatalog/Scenarios/Clipping.cs

@@ -25,7 +25,7 @@ public class Clipping : Scenario
 
 
         app.DrawingContent += (s, e) =>
         app.DrawingContent += (s, e) =>
                            {
                            {
-                               app!.FillRect (app!.Viewport, CM.Glyphs.Dot);
+                               app!.FillRect (app!.Viewport, Glyphs.Dot);
                                e.Cancel = true;
                                e.Cancel = true;
                            };
                            };
 
 

+ 6 - 6
UICatalog/Scenarios/DynamicMenuBar.cs

@@ -567,10 +567,10 @@ public class DynamicMenuBar : Scenario
             var btnAddMenuBar = new Button { Y = 1, Text = "Add a MenuBar" };
             var btnAddMenuBar = new Button { Y = 1, Text = "Add a MenuBar" };
             frmMenu.Add (btnAddMenuBar);
             frmMenu.Add (btnAddMenuBar);
 
 
-            var btnMenuBarUp = new Button { X = Pos.Center (), Text = CM.Glyphs.UpArrow.ToString () };
+            var btnMenuBarUp = new Button { X = Pos.Center (), Text = Glyphs.UpArrow.ToString () };
             frmMenu.Add (btnMenuBarUp);
             frmMenu.Add (btnMenuBarUp);
 
 
-            var btnMenuBarDown = new Button { X = Pos.Center (), Y = Pos.Bottom (btnMenuBarUp), Text = CM.Glyphs.DownArrow.ToString () };
+            var btnMenuBarDown = new Button { X = Pos.Center (), Y = Pos.Bottom (btnMenuBarUp), Text = Glyphs.DownArrow.ToString () };
             frmMenu.Add (btnMenuBarDown);
             frmMenu.Add (btnMenuBarDown);
 
 
             var btnRemoveMenuBar = new Button { Y = 1, Text = "Remove a MenuBar" };
             var btnRemoveMenuBar = new Button { Y = 1, Text = "Remove a MenuBar" };
@@ -580,7 +580,7 @@ public class DynamicMenuBar : Scenario
 
 
             var btnPrevious = new Button
             var btnPrevious = new Button
             {
             {
-                X = Pos.Left (btnAddMenuBar), Y = Pos.Top (btnAddMenuBar) + 2, Text = CM.Glyphs.LeftArrow.ToString ()
+                X = Pos.Left (btnAddMenuBar), Y = Pos.Top (btnAddMenuBar) + 2, Text = Glyphs.LeftArrow.ToString ()
             };
             };
             frmMenu.Add (btnPrevious);
             frmMenu.Add (btnPrevious);
 
 
@@ -588,7 +588,7 @@ public class DynamicMenuBar : Scenario
             btnAdd.X = Pos.AnchorEnd ();
             btnAdd.X = Pos.AnchorEnd ();
             frmMenu.Add (btnAdd);
             frmMenu.Add (btnAdd);
 
 
-            var btnNext = new Button { X = Pos.X (btnAdd), Y = Pos.Top (btnPrevious), Text = CM.Glyphs.RightArrow.ToString () };
+            var btnNext = new Button { X = Pos.X (btnAdd), Y = Pos.Top (btnPrevious), Text = Glyphs.RightArrow.ToString () };
             frmMenu.Add (btnNext);
             frmMenu.Add (btnNext);
 
 
             var lblMenuBar = new Label
             var lblMenuBar = new Label
@@ -648,10 +648,10 @@ public class DynamicMenuBar : Scenario
             var btnRemove = new Button { X = Pos.Left (btnAdd), Y = Pos.Top (btnAdd) + 1, Text = "Remove" };
             var btnRemove = new Button { X = Pos.Left (btnAdd), Y = Pos.Top (btnAdd) + 1, Text = "Remove" };
             frmMenu.Add (btnRemove);
             frmMenu.Add (btnRemove);
 
 
-            var btnUp = new Button { X = Pos.Right (_lstMenus) + 2, Y = Pos.Top (btnRemove) + 2, Text = CM.Glyphs.UpArrow.ToString () };
+            var btnUp = new Button { X = Pos.Right (_lstMenus) + 2, Y = Pos.Top (btnRemove) + 2, Text = Glyphs.UpArrow.ToString () };
             frmMenu.Add (btnUp);
             frmMenu.Add (btnUp);
 
 
-            var btnDown = new Button { X = Pos.Right (_lstMenus) + 2, Y = Pos.Top (btnUp) + 1, Text = CM.Glyphs.DownArrow.ToString () };
+            var btnDown = new Button { X = Pos.Right (_lstMenus) + 2, Y = Pos.Top (btnUp) + 1, Text = Glyphs.DownArrow.ToString () };
             frmMenu.Add (btnDown);
             frmMenu.Add (btnDown);
 
 
             Add (frmMenu);
             Add (frmMenu);

+ 2 - 2
UICatalog/Scenarios/DynamicStatusBar.cs

@@ -293,10 +293,10 @@ public class DynamicStatusBar : Scenario
             var _btnRemove = new Button { X = Pos.Left (_btnAdd), Y = Pos.Top (_btnAdd) + 1, Text = "Remove" };
             var _btnRemove = new Button { X = Pos.Left (_btnAdd), Y = Pos.Top (_btnAdd) + 1, Text = "Remove" };
             _frmStatusBar.Add (_btnRemove);
             _frmStatusBar.Add (_btnRemove);
 
 
-            var _btnUp = new Button { X = Pos.Right (_lstItems) + 2, Y = Pos.Top (_btnRemove) + 2, Text = CM.Glyphs.UpArrow.ToString () };
+            var _btnUp = new Button { X = Pos.Right (_lstItems) + 2, Y = Pos.Top (_btnRemove) + 2, Text = Glyphs.UpArrow.ToString () };
             _frmStatusBar.Add (_btnUp);
             _frmStatusBar.Add (_btnUp);
 
 
-            var _btnDown = new Button { X = Pos.Right (_lstItems) + 2, Y = Pos.Top (_btnUp) + 1, Text = CM.Glyphs.DownArrow.ToString () };
+            var _btnDown = new Button { X = Pos.Right (_lstItems) + 2, Y = Pos.Top (_btnUp) + 1, Text = Glyphs.DownArrow.ToString () };
             _frmStatusBar.Add (_btnDown);
             _frmStatusBar.Add (_btnDown);
 
 
             Add (_frmStatusBar);
             Add (_frmStatusBar);

+ 2 - 2
UICatalog/Scenarios/GraphViewExample.cs

@@ -251,7 +251,7 @@ public class GraphViewExample : Scenario
 
 
         var series = new MultiBarSeries (3, 1, 0.25f, new [] { magenta, cyan, red });
         var series = new MultiBarSeries (3, 1, 0.25f, new [] { magenta, cyan, red });
 
 
-        Rune stiple = CM.Glyphs.Stipple;
+        Rune stiple = Glyphs.Stipple;
 
 
         series.AddBars ("'96", stiple, 5900, 9000, 14000);
         series.AddBars ("'96", stiple, 5900, 9000, 14000);
         series.AddBars ("'97", stiple, 6100, 9200, 14800);
         series.AddBars ("'97", stiple, 6100, 9200, 14800);
@@ -817,7 +817,7 @@ public class GraphViewExample : Scenario
         _graphView.AxisY.ShowLabelsEvery = 0;
         _graphView.AxisY.ShowLabelsEvery = 0;
         _graphView.AxisY.Minimum = 0;
         _graphView.AxisY.Minimum = 0;
 
 
-        var stiple = new GraphCellToRender (CM.Glyphs.Stipple);
+        var stiple = new GraphCellToRender (Glyphs.Stipple);
 
 
         // Bars in 2 directions
         // Bars in 2 directions
 
 

+ 2 - 2
UICatalog/Scenarios/LineViewExample.cs

@@ -45,7 +45,7 @@ public class LineViewExample : Scenario
         // creates a horizontal line
         // creates a horizontal line
         var arrowLine = new LineView
         var arrowLine = new LineView
         {
         {
-            Y = 8, Width = 10, StartingAnchor = CM.Glyphs.LeftTee, EndingAnchor = (Rune)'>'
+            Y = 8, Width = 10, StartingAnchor = Glyphs.LeftTee, EndingAnchor = (Rune)'>'
         };
         };
 
 
         appWindow.Add (arrowLine);
         appWindow.Add (arrowLine);
@@ -62,7 +62,7 @@ public class LineViewExample : Scenario
         // creates a horizontal line
         // creates a horizontal line
         var verticalArrow = new LineView (Orientation.Vertical)
         var verticalArrow = new LineView (Orientation.Vertical)
         {
         {
-            X = 27, StartingAnchor = CM.Glyphs.TopTee, EndingAnchor = (Rune)'V'
+            X = 27, StartingAnchor = Glyphs.TopTee, EndingAnchor = (Rune)'V'
         };
         };
 
 
         appWindow.Add (verticalArrow);
         appWindow.Add (verticalArrow);

+ 1 - 1
UICatalog/Scenarios/ShadowStyles.cs

@@ -45,7 +45,7 @@ public class ShadowStyles : Scenario
 
 
         app.DrawingContent += (s, e) =>
         app.DrawingContent += (s, e) =>
                            {
                            {
-                               app!.FillRect (app!.Viewport, CM.Glyphs.Dot);
+                               app!.FillRect (app!.Viewport, Glyphs.Dot);
                                e.Cancel = true;
                                e.Cancel = true;
                            };
                            };
 
 

+ 1 - 1
UICatalog/Scenarios/SimpleDialog.cs

@@ -21,7 +21,7 @@ public sealed class SimpleDialog : Scenario
 
 
         appWindow.DrawingText += (s, e) =>
         appWindow.DrawingText += (s, e) =>
                                  {
                                  {
-                                     appWindow!.FillRect (appWindow!.Viewport, CM.Glyphs.Dot);
+                                     appWindow!.FillRect (appWindow!.Viewport, Glyphs.Dot);
                                      e.Cancel = true;
                                      e.Cancel = true;
                                  };
                                  };
 
 

+ 8 - 8
UICatalog/Scenarios/Sliders.cs

@@ -90,17 +90,17 @@ public class Sliders : Scenario
                                 {
                                 {
                                     if (single.Orientation == Orientation.Horizontal)
                                     if (single.Orientation == Orientation.Horizontal)
                                     {
                                     {
-                                        single.Style.SpaceChar = new Cell { Rune = CM.Glyphs.HLine };
-                                        single.Style.OptionChar = new Cell { Rune = CM.Glyphs.HLine };
+                                        single.Style.SpaceChar = new Cell { Rune = Glyphs.HLine };
+                                        single.Style.OptionChar = new Cell { Rune = Glyphs.HLine };
                                     }
                                     }
                                     else
                                     else
                                     {
                                     {
-                                        single.Style.SpaceChar = new Cell { Rune = CM.Glyphs.VLine };
-                                        single.Style.OptionChar = new Cell { Rune = CM.Glyphs.VLine };
+                                        single.Style.SpaceChar = new Cell { Rune = Glyphs.VLine };
+                                        single.Style.OptionChar = new Cell { Rune = Glyphs.VLine };
                                     }
                                     }
                                 };
                                 };
-        single.Style.SetChar = new Cell { Rune = CM.Glyphs.ContinuousMeterSegment };
-        single.Style.DragChar = new Cell { Rune = CM.Glyphs.ContinuousMeterSegment };
+        single.Style.SetChar = new Cell { Rune = Glyphs.ContinuousMeterSegment };
+        single.Style.DragChar = new Cell { Rune = Glyphs.ContinuousMeterSegment };
 
 
         v.Add (single);
         v.Add (single);
 
 
@@ -264,7 +264,7 @@ public class Sliders : Scenario
                                                             {
                                                             {
                                                                 s.Orientation = Orientation.Horizontal;
                                                                 s.Orientation = Orientation.Horizontal;
 
 
-                                                                s.Style.SpaceChar = new Cell { Rune = CM.Glyphs.HLine };
+                                                                s.Style.SpaceChar = new Cell { Rune = Glyphs.HLine };
 
 
                                                                 if (prev == null)
                                                                 if (prev == null)
                                                                 {
                                                                 {
@@ -282,7 +282,7 @@ public class Sliders : Scenario
                                                             {
                                                             {
                                                                 s.Orientation = Orientation.Vertical;
                                                                 s.Orientation = Orientation.Vertical;
 
 
-                                                                s.Style.SpaceChar = new Cell { Rune = CM.Glyphs.VLine };
+                                                                s.Style.SpaceChar = new Cell { Rune = Glyphs.VLine };
 
 
                                                                 if (prev == null)
                                                                 if (prev == null)
                                                                 {
                                                                 {

+ 2 - 2
UICatalog/Scenarios/Snake.cs

@@ -292,11 +292,11 @@ public class Snake : Scenario
 
 
         public SnakeView (SnakeState state)
         public SnakeView (SnakeState state)
         {
         {
-            _appleRune = CM.Glyphs.Apple;
+            _appleRune = Glyphs.Apple;
 
 
             if (!Driver.IsRuneSupported (_appleRune))
             if (!Driver.IsRuneSupported (_appleRune))
             {
             {
-                _appleRune = CM.Glyphs.AppleBMP;
+                _appleRune = Glyphs.AppleBMP;
             }
             }
 
 
             State = state;
             State = state;

+ 4 - 4
UICatalog/Scenarios/TableEditor.cs

@@ -1278,14 +1278,14 @@ public class TableEditor : Scenario
             // add a new one if this the one that is being sorted
             // add a new one if this the one that is being sorted
             if (col.Ordinal == clickedCol)
             if (col.Ordinal == clickedCol)
             {
             {
-                col.ColumnName += isAsc ? CM.Glyphs.UpArrow : CM.Glyphs.DownArrow;
+                col.ColumnName += isAsc ? Glyphs.UpArrow : Glyphs.DownArrow;
             }
             }
         }
         }
 
 
         _tableView.Update ();
         _tableView.Update ();
     }
     }
 
 
-    private string StripArrows (string columnName) { return columnName.Replace ($"{CM.Glyphs.DownArrow}", "").Replace ($"{CM.Glyphs.UpArrow}", ""); }
+    private string StripArrows (string columnName) { return columnName.Replace ($"{Glyphs.DownArrow}", "").Replace ($"{Glyphs.UpArrow}", ""); }
 
 
     private void TableViewKeyPress (object sender, Key e)
     private void TableViewKeyPress (object sender, Key e)
     {
     {
@@ -1528,8 +1528,8 @@ public class TableEditor : Scenario
     private string TrimArrows (string columnName)
     private string TrimArrows (string columnName)
     {
     {
         return columnName.TrimEnd (
         return columnName.TrimEnd (
-                                   (char)CM.Glyphs.UpArrow.Value,
-                                   (char)CM.Glyphs.DownArrow.Value
+                                   (char)Glyphs.UpArrow.Value,
+                                   (char)Glyphs.DownArrow.Value
                                   );
                                   );
     }
     }
 
 

+ 5 - 5
UICatalog/Scenarios/Unicode.cs

@@ -17,15 +17,15 @@ public class UnicodeInMenu : Scenario
 
 
         var gitString =
         var gitString =
             $"gui.cs 糊 (hú) {
             $"gui.cs 糊 (hú) {
-                CM.Glyphs.IdenticalTo
+                Glyphs.IdenticalTo
             } {
             } {
-                CM.Glyphs.DownArrow
+                Glyphs.DownArrow
             }18 {
             }18 {
-                CM.Glyphs.UpArrow
+                Glyphs.UpArrow
             }10 {
             }10 {
-                CM.Glyphs.VerticalFourDots
+                Glyphs.VerticalFourDots
             }1 {
             }1 {
-                CM.Glyphs.HorizontalEllipsis
+                Glyphs.HorizontalEllipsis
             }";
             }";
 
 
         // Init
         // Init

+ 12 - 1
UnitTests/Application/ApplicationTests.cs

@@ -1,4 +1,5 @@
-using Xunit.Abstractions;
+using System.Diagnostics;
+using Xunit.Abstractions;
 using static Terminal.Gui.ConfigurationManager;
 using static Terminal.Gui.ConfigurationManager;
 
 
 // Alias Console to MockConsole so we don't accidentally use Console
 // Alias Console to MockConsole so we don't accidentally use Console
@@ -201,6 +202,10 @@ public class ApplicationTests
     [Fact]
     [Fact]
     public void Init_Begin_End_Cleans_Up ()
     public void Init_Begin_End_Cleans_Up ()
     {
     {
+        // Start stopwatch
+        Stopwatch stopwatch = new Stopwatch ();
+        stopwatch.Start ();
+
         Init ();
         Init ();
 
 
         // Begin will cause Run() to be called, which will call Begin(). Thus will block the tests
         // Begin will cause Run() to be called, which will call Begin(). Thus will block the tests
@@ -237,6 +242,12 @@ public class ApplicationTests
         Assert.Null (Application.Top);
         Assert.Null (Application.Top);
         Assert.Null (Application.MainLoop);
         Assert.Null (Application.MainLoop);
         Assert.Null (Application.Driver);
         Assert.Null (Application.Driver);
+
+        // Stop stopwatch
+        stopwatch.Stop ();
+
+        _output.WriteLine ($"Load took {stopwatch.ElapsedMilliseconds} ms");
+
     }
     }
 
 
     [Theory]
     [Theory]

+ 56 - 35
UnitTests/Configuration/ConfigurationMangerTests.cs

@@ -208,6 +208,27 @@ public class ConfigurationManagerTests
         Reset ();
         Reset ();
     }
     }
 
 
+    [Fact]
+    public void Load_Performance_Check ()
+    {
+        Locations = ConfigLocations.All;
+        Reset ();
+
+        // Start stopwatch
+        Stopwatch stopwatch = new Stopwatch ();
+        stopwatch.Start ();
+
+        // Act
+        Load (true);
+        Apply();
+
+        // Stop stopwatch
+        stopwatch.Stop ();
+
+        // Assert
+        _output.WriteLine ($"Load took {stopwatch.ElapsedMilliseconds} ms");
+    }
+
 
 
     [Fact]
     [Fact]
     public void Load_Loads_Custom_Json ()
     public void Load_Loads_Custom_Json ()
@@ -236,41 +257,41 @@ public class ConfigurationManagerTests
         Reset ();
         Reset ();
     }
     }
 
 
-    [Fact]
-    [AutoInitShutdown]
-    public void LoadConfigurationFromAllSources_ShouldLoadSettingsFromAllSources ()
-    {
-        //var _configFilename = "config.json";
-        //// Arrange
-        //// Create a mock of the configuration files in all sources
-        //// Home directory
-        //string homeDir = Path.Combine (Environment.GetFolderPath (Environment.SpecialFolder.UserProfile), ".tui");
-        //if (!Directory.Exists (homeDir)) {
-        //	Directory.CreateDirectory (homeDir);
-        //}
-        //string globalConfigFile = Path.Combine (homeDir, _configFilename);
-        //string appSpecificConfigFile = Path.Combine (homeDir, "appname.config.json");
-        //File.WriteAllText (globalConfigFile, "{\"Settings\": {\"TestSetting\":\"Global\"}}");
-        //File.WriteAllText (appSpecificConfigFile, "{\"Settings\": {\"TestSetting\":\"AppSpecific\"}}");
-
-        //// App directory
-        //string appDir = Directory.GetCurrentDirectory ();
-        //string appDirGlobalConfigFile = Path.Combine (appDir, _configFilename);
-        //string appDirAppSpecificConfigFile = Path.Combine (appDir, "appname.config.json");
-        //File.WriteAllText (appDirGlobalConfigFile, "{\"Settings\": {\"TestSetting\":\"GlobalAppDir\"}}");
-        //File.WriteAllText (appDirAppSpecificConfigFile, "{\"Settings\": {\"TestSetting\":\"AppSpecificAppDir\"}}");
-
-        //// App resources
-        //// ...
-
-        //// Act
-        //ConfigurationManager.Locations = ConfigurationManager.ConfigLocation.All;
-        //ConfigurationManager.Load ();
-
-        //// Assert
-        //// Check that the settings from the highest precedence source are loaded
-        //Assert.Equal ("AppSpecific", ConfigurationManager.Config.Settings.TestSetting);
-    }
+    //[Fact]
+    //[AutoInitShutdown]
+    //public void LoadConfigurationFromAllSources_ShouldLoadSettingsFromAllSources ()
+    //{
+    //    //var _configFilename = "config.json";
+    //    //// Arrange
+    //    //// Create a mock of the configuration files in all sources
+    //    //// Home directory
+    //    //string homeDir = Path.Combine (Environment.GetFolderPath (Environment.SpecialFolder.UserProfile), ".tui");
+    //    //if (!Directory.Exists (homeDir)) {
+    //    //	Directory.CreateDirectory (homeDir);
+    //    //}
+    //    //string globalConfigFile = Path.Combine (homeDir, _configFilename);
+    //    //string appSpecificConfigFile = Path.Combine (homeDir, "appname.config.json");
+    //    //File.WriteAllText (globalConfigFile, "{\"Settings\": {\"TestSetting\":\"Global\"}}");
+    //    //File.WriteAllText (appSpecificConfigFile, "{\"Settings\": {\"TestSetting\":\"AppSpecific\"}}");
+
+    //    //// App directory
+    //    //string appDir = Directory.GetCurrentDirectory ();
+    //    //string appDirGlobalConfigFile = Path.Combine (appDir, _configFilename);
+    //    //string appDirAppSpecificConfigFile = Path.Combine (appDir, "appname.config.json");
+    //    //File.WriteAllText (appDirGlobalConfigFile, "{\"Settings\": {\"TestSetting\":\"GlobalAppDir\"}}");
+    //    //File.WriteAllText (appDirAppSpecificConfigFile, "{\"Settings\": {\"TestSetting\":\"AppSpecificAppDir\"}}");
+
+    //    //// App resources
+    //    //// ...
+
+    //    //// Act
+    //    //ConfigurationManager.Locations = ConfigurationManager.ConfigLocation.All;
+    //    //ConfigurationManager.Load ();
+
+    //    //// Assert
+    //    //// Check that the settings from the highest precedence source are loaded
+    //    //Assert.Equal ("AppSpecific", ConfigurationManager.Config.Settings.TestSetting);
+    //}
 
 
 
 
     [Fact]
     [Fact]

+ 50 - 0
UnitTests/Configuration/GlyphTests.cs

@@ -0,0 +1,50 @@
+using System.Reflection;
+using System.Text;
+using System.Text.Json;
+using static Terminal.Gui.ConfigurationManager;
+
+namespace Terminal.Gui.ConfigurationTests;
+
+public class GlyphTests
+{
+    [Fact]
+    public void Overrides_Defaults ()
+    {
+        // arrange
+        Locations = ConfigLocations.Default;
+        Load (true);
+
+        Assert.Equal ((Rune)'⟦', Glyphs.LeftBracket);
+
+        var glyph = (Rune)Themes ["Default"] ["Glyphs.LeftBracket"].PropertyValue;
+        Assert.Equal ((Rune)'⟦', glyph);
+
+        ThrowOnJsonErrors = true;
+
+        // act
+        var json = """
+                   {
+                       "Themes": [
+                           {
+                             "Default": 
+                                {
+                                    "Glyphs.LeftBracket": "["
+                                }
+                           }
+                       ]
+                   }
+                   """;
+
+        Settings!.Update (json, "Overrides_Defaults", ConfigLocations.Runtime);
+        Apply();
+
+        // assert
+        glyph = glyph = (Rune)Themes ["Default"] ["Glyphs.LeftBracket"].PropertyValue;
+        Assert.Equal ((Rune)'[', glyph);
+        Assert.Equal((Rune)'[', Glyphs.LeftBracket);
+
+        // clean up
+        Locations = ConfigLocations.All;
+    }
+
+}

+ 1 - 1
UnitTests/Configuration/RuneJsonConverterTests.cs

@@ -3,7 +3,7 @@ using System.Text.Json;
 
 
 namespace Terminal.Gui.ConfigurationTests;
 namespace Terminal.Gui.ConfigurationTests;
 
 
-public class RunJsonConverterTests
+public class RuneJsonConverterTests
 {
 {
     [Theory]
     [Theory]
     [InlineData ("aa")]
     [InlineData ("aa")]

+ 76 - 76
UnitTests/Dialogs/DialogTests.cs

@@ -18,12 +18,12 @@ public class DialogTests
 
 
         var title = "1234";
         var title = "1234";
         var btn1Text = "yes";
         var btn1Text = "yes";
-        var btn1 = $"{CM.Glyphs.LeftBracket} {btn1Text} {CM.Glyphs.RightBracket}";
+        var btn1 = $"{Glyphs.LeftBracket} {btn1Text} {Glyphs.RightBracket}";
         var btn2Text = "no";
         var btn2Text = "no";
-        var btn2 = $"{CM.Glyphs.LeftBracket} {btn2Text} {CM.Glyphs.RightBracket}";
+        var btn2 = $"{Glyphs.LeftBracket} {btn2Text} {Glyphs.RightBracket}";
 
 
         // We test with one button first, but do this to get the width right for 2
         // We test with one button first, but do this to get the width right for 2
-        int width = $@"{CM.Glyphs.VLine} {btn1} {btn2} {CM.Glyphs.VLine}".Length;
+        int width = $@"{Glyphs.VLine} {btn1} {btn2} {Glyphs.VLine}".Length;
         d.SetBufferSize (width, 1);
         d.SetBufferSize (width, 1);
 
 
         // Override CM
         // Override CM
@@ -45,14 +45,14 @@ public class DialogTests
         // Create with no top or bottom border to simplify testing button layout (no need to account for title etc..)
         // Create with no top or bottom border to simplify testing button layout (no need to account for title etc..)
         dlg.Border.Thickness = new (1, 0, 1, 0);
         dlg.Border.Thickness = new (1, 0, 1, 0);
         runstate = Begin (dlg);
         runstate = Begin (dlg);
-        var buttonRow = $"{CM.Glyphs.VLine}    {btn1}     {CM.Glyphs.VLine}";
+        var buttonRow = $"{Glyphs.VLine}    {btn1}     {Glyphs.VLine}";
 
 
         RunIteration (ref runstate);
         RunIteration (ref runstate);
 
 
         TestHelpers.AssertDriverContentsWithFrameAre ($"{buttonRow}", _output);
         TestHelpers.AssertDriverContentsWithFrameAre ($"{buttonRow}", _output);
 
 
         // Now add a second button
         // Now add a second button
-        buttonRow = $"{CM.Glyphs.VLine} {btn1} {btn2} {CM.Glyphs.VLine}";
+        buttonRow = $"{Glyphs.VLine} {btn1} {btn2} {Glyphs.VLine}";
         dlg.AddButton (new () { Text = btn2Text });
         dlg.AddButton (new () { Text = btn2Text });
 
 
         RunIteration (ref runstate);
         RunIteration (ref runstate);
@@ -76,11 +76,11 @@ public class DialogTests
 
 
         RunIteration (ref runstate);
         RunIteration (ref runstate);
 
 
-        buttonRow = $"{CM.Glyphs.VLine}{btn1}         {CM.Glyphs.VLine}";
+        buttonRow = $"{Glyphs.VLine}{btn1}         {Glyphs.VLine}";
         TestHelpers.AssertDriverContentsWithFrameAre ($"{buttonRow}", _output);
         TestHelpers.AssertDriverContentsWithFrameAre ($"{buttonRow}", _output);
 
 
         // Now add a second button
         // Now add a second button
-        buttonRow = $"{CM.Glyphs.VLine}{btn1}   {btn2}{CM.Glyphs.VLine}";
+        buttonRow = $"{Glyphs.VLine}{btn1}   {btn2}{Glyphs.VLine}";
         dlg.AddButton (new () { Text = btn2Text });
         dlg.AddButton (new () { Text = btn2Text });
         RunIteration (ref runstate);
         RunIteration (ref runstate);
         TestHelpers.AssertDriverContentsWithFrameAre ($"{buttonRow}", _output);
         TestHelpers.AssertDriverContentsWithFrameAre ($"{buttonRow}", _output);
@@ -103,11 +103,11 @@ public class DialogTests
 
 
         RunIteration (ref runstate);
         RunIteration (ref runstate);
 
 
-        buttonRow = $"{CM.Glyphs.VLine}{new (' ', width - btn1.Length - 2)}{btn1}{CM.Glyphs.VLine}";
+        buttonRow = $"{Glyphs.VLine}{new (' ', width - btn1.Length - 2)}{btn1}{Glyphs.VLine}";
         TestHelpers.AssertDriverContentsWithFrameAre ($"{buttonRow}", _output);
         TestHelpers.AssertDriverContentsWithFrameAre ($"{buttonRow}", _output);
 
 
         // Now add a second button
         // Now add a second button
-        buttonRow = $"{CM.Glyphs.VLine}  {btn1} {btn2}{CM.Glyphs.VLine}";
+        buttonRow = $"{Glyphs.VLine}  {btn1} {btn2}{Glyphs.VLine}";
         dlg.AddButton (new () { Text = btn2Text });
         dlg.AddButton (new () { Text = btn2Text });
 
 
         RunIteration (ref runstate);
         RunIteration (ref runstate);
@@ -130,11 +130,11 @@ public class DialogTests
         runstate = Begin (dlg);
         runstate = Begin (dlg);
         RunIteration (ref runstate);
         RunIteration (ref runstate);
 
 
-        buttonRow = $"{CM.Glyphs.VLine}{btn1}{new (' ', width - btn1.Length - 2)}{CM.Glyphs.VLine}";
+        buttonRow = $"{Glyphs.VLine}{btn1}{new (' ', width - btn1.Length - 2)}{Glyphs.VLine}";
         TestHelpers.AssertDriverContentsWithFrameAre ($"{buttonRow}", _output);
         TestHelpers.AssertDriverContentsWithFrameAre ($"{buttonRow}", _output);
 
 
         // Now add a second button
         // Now add a second button
-        buttonRow = $"{CM.Glyphs.VLine}{btn1} {btn2}  {CM.Glyphs.VLine}";
+        buttonRow = $"{Glyphs.VLine}{btn1} {btn2}  {Glyphs.VLine}";
         dlg.AddButton (new () { Text = btn2Text });
         dlg.AddButton (new () { Text = btn2Text });
 
 
         RunIteration (ref runstate);
         RunIteration (ref runstate);
@@ -157,15 +157,15 @@ public class DialogTests
 
 
         // E.g "|[ yes ][ no ][ maybe ]|"
         // E.g "|[ yes ][ no ][ maybe ]|"
         var btn1Text = "yes";
         var btn1Text = "yes";
-        var btn1 = $"{CM.Glyphs.LeftBracket} {btn1Text} {CM.Glyphs.RightBracket}";
+        var btn1 = $"{Glyphs.LeftBracket} {btn1Text} {Glyphs.RightBracket}";
         var btn2Text = "no";
         var btn2Text = "no";
-        var btn2 = $"{CM.Glyphs.LeftBracket} {btn2Text} {CM.Glyphs.RightBracket}";
+        var btn2 = $"{Glyphs.LeftBracket} {btn2Text} {Glyphs.RightBracket}";
         var btn3Text = "maybe";
         var btn3Text = "maybe";
-        var btn3 = $"{CM.Glyphs.LeftBracket} {btn3Text} {CM.Glyphs.RightBracket}";
+        var btn3 = $"{Glyphs.LeftBracket} {btn3Text} {Glyphs.RightBracket}";
         var btn4Text = "never";
         var btn4Text = "never";
-        var btn4 = $"{CM.Glyphs.LeftBracket} {btn4Text} {CM.Glyphs.RightBracket}";
+        var btn4 = $"{Glyphs.LeftBracket} {btn4Text} {Glyphs.RightBracket}";
 
 
-        var buttonRow = $"{CM.Glyphs.VLine} {btn1} {btn2} {btn3} {btn4} {CM.Glyphs.VLine}";
+        var buttonRow = $"{Glyphs.VLine} {btn1} {btn2} {btn3} {btn4} {Glyphs.VLine}";
         int width = buttonRow.Length;
         int width = buttonRow.Length;
         d.SetBufferSize (buttonRow.Length, 3);
         d.SetBufferSize (buttonRow.Length, 3);
 
 
@@ -184,7 +184,7 @@ public class DialogTests
         dlg.Dispose ();
         dlg.Dispose ();
 
 
         // Justify
         // Justify
-        buttonRow = $"{CM.Glyphs.VLine}{btn1}  {btn2}  {btn3} {btn4}{CM.Glyphs.VLine}";
+        buttonRow = $"{Glyphs.VLine}{btn1}  {btn2}  {btn3} {btn4}{Glyphs.VLine}";
         Assert.Equal (width, buttonRow.Length);
         Assert.Equal (width, buttonRow.Length);
 
 
         (runstate, dlg) = BeginButtonTestDialog (
         (runstate, dlg) = BeginButtonTestDialog (
@@ -201,7 +201,7 @@ public class DialogTests
         dlg.Dispose ();
         dlg.Dispose ();
 
 
         // Right
         // Right
-        buttonRow = $"{CM.Glyphs.VLine}  {btn1} {btn2} {btn3} {btn4}{CM.Glyphs.VLine}";
+        buttonRow = $"{Glyphs.VLine}  {btn1} {btn2} {btn3} {btn4}{Glyphs.VLine}";
         Assert.Equal (width, buttonRow.Length);
         Assert.Equal (width, buttonRow.Length);
 
 
         (runstate, dlg) = BeginButtonTestDialog (
         (runstate, dlg) = BeginButtonTestDialog (
@@ -218,7 +218,7 @@ public class DialogTests
         dlg.Dispose ();
         dlg.Dispose ();
 
 
         // Left
         // Left
-        buttonRow = $"{CM.Glyphs.VLine}{btn1} {btn2} {btn3} {btn4}  {CM.Glyphs.VLine}";
+        buttonRow = $"{Glyphs.VLine}{btn1} {btn2} {btn3} {btn4}  {Glyphs.VLine}";
         Assert.Equal (width, buttonRow.Length);
         Assert.Equal (width, buttonRow.Length);
 
 
         (runstate, dlg) = BeginButtonTestDialog (
         (runstate, dlg) = BeginButtonTestDialog (
@@ -249,13 +249,13 @@ public class DialogTests
 
 
         // E.g "|[ yes ][ no ][ maybe ][ never ]|"
         // E.g "|[ yes ][ no ][ maybe ][ never ]|"
         var btn1Text = "yes";
         var btn1Text = "yes";
-        var btn1 = $"{CM.Glyphs.LeftBracket} {btn1Text} {CM.Glyphs.RightBracket}";
+        var btn1 = $"{Glyphs.LeftBracket} {btn1Text} {Glyphs.RightBracket}";
         var btn2Text = "no";
         var btn2Text = "no";
-        var btn2 = $"{CM.Glyphs.LeftBracket} {btn2Text} {CM.Glyphs.RightBracket}";
+        var btn2 = $"{Glyphs.LeftBracket} {btn2Text} {Glyphs.RightBracket}";
         var btn3Text = "maybe";
         var btn3Text = "maybe";
-        var btn3 = $"{CM.Glyphs.LeftBracket} {btn3Text} {CM.Glyphs.RightBracket}";
+        var btn3 = $"{Glyphs.LeftBracket} {btn3Text} {Glyphs.RightBracket}";
         var btn4Text = "never";
         var btn4Text = "never";
-        var btn4 = $"{CM.Glyphs.LeftBracket} {btn4Text} {CM.Glyphs.RightBracket}";
+        var btn4 = $"{Glyphs.LeftBracket} {btn4Text} {Glyphs.RightBracket}";
         var buttonRow = string.Empty;
         var buttonRow = string.Empty;
 
 
         var width = 30;
         var width = 30;
@@ -263,7 +263,7 @@ public class DialogTests
 
 
         // Default - Center
         // Default - Center
         buttonRow =
         buttonRow =
-            $"{CM.Glyphs.VLine} yes {CM.Glyphs.RightBracket}{btn2}{btn3}{CM.Glyphs.LeftBracket} never{CM.Glyphs.VLine}";
+            $"{Glyphs.VLine} yes {Glyphs.RightBracket}{btn2}{btn3}{Glyphs.LeftBracket} never{Glyphs.VLine}";
 
 
         (runstate, Dialog dlg) = BeginButtonTestDialog (
         (runstate, Dialog dlg) = BeginButtonTestDialog (
                                                       title,
                                                       title,
@@ -281,7 +281,7 @@ public class DialogTests
 
 
         // Justify
         // Justify
         buttonRow =
         buttonRow =
-            $"{CM.Glyphs.VLine}{CM.Glyphs.LeftBracket} yes {CM.Glyphs.LeftBracket} no {CM.Glyphs.LeftBracket} maybe {CM.Glyphs.LeftBracket} never {CM.Glyphs.RightBracket}{CM.Glyphs.VLine}";
+            $"{Glyphs.VLine}{Glyphs.LeftBracket} yes {Glyphs.LeftBracket} no {Glyphs.LeftBracket} maybe {Glyphs.LeftBracket} never {Glyphs.RightBracket}{Glyphs.VLine}";
 
 
         (runstate, dlg) = BeginButtonTestDialog (
         (runstate, dlg) = BeginButtonTestDialog (
                                                title,
                                                title,
@@ -297,7 +297,7 @@ public class DialogTests
         dlg.Dispose ();
         dlg.Dispose ();
 
 
         // Right
         // Right
-        buttonRow = $"{CM.Glyphs.VLine}es {CM.Glyphs.RightBracket}{btn2}{btn3}{btn4}{CM.Glyphs.VLine}";
+        buttonRow = $"{Glyphs.VLine}es {Glyphs.RightBracket}{btn2}{btn3}{btn4}{Glyphs.VLine}";
         Assert.Equal (width, buttonRow.Length);
         Assert.Equal (width, buttonRow.Length);
 
 
         (runstate, dlg) = BeginButtonTestDialog (
         (runstate, dlg) = BeginButtonTestDialog (
@@ -314,7 +314,7 @@ public class DialogTests
         dlg.Dispose ();
         dlg.Dispose ();
 
 
         // Left
         // Left
-        buttonRow = $"{CM.Glyphs.VLine}{btn1}{btn2}{btn3}{CM.Glyphs.LeftBracket} neve{CM.Glyphs.VLine}";
+        buttonRow = $"{Glyphs.VLine}{btn1}{btn2}{btn3}{Glyphs.LeftBracket} neve{Glyphs.VLine}";
 
 
         (runstate, dlg) = BeginButtonTestDialog (
         (runstate, dlg) = BeginButtonTestDialog (
                                                title,
                                                title,
@@ -344,17 +344,17 @@ public class DialogTests
 
 
         // E.g "|[ yes ][ no ][ maybe ]|"
         // E.g "|[ yes ][ no ][ maybe ]|"
         var btn1Text = "really long button 1";
         var btn1Text = "really long button 1";
-        var btn1 = $"{CM.Glyphs.LeftBracket} {btn1Text} {CM.Glyphs.RightBracket}";
+        var btn1 = $"{Glyphs.LeftBracket} {btn1Text} {Glyphs.RightBracket}";
         var btn2Text = "really long button 2";
         var btn2Text = "really long button 2";
-        var btn2 = $"{CM.Glyphs.LeftBracket} {btn2Text} {CM.Glyphs.RightBracket}";
+        var btn2 = $"{Glyphs.LeftBracket} {btn2Text} {Glyphs.RightBracket}";
         var btn3Text = "really long button 3";
         var btn3Text = "really long button 3";
-        var btn3 = $"{CM.Glyphs.LeftBracket} {btn3Text} {CM.Glyphs.RightBracket}";
+        var btn3 = $"{Glyphs.LeftBracket} {btn3Text} {Glyphs.RightBracket}";
         var btn4Text = "really long button 44"; // 44 is intentional to make length different than rest
         var btn4Text = "really long button 44"; // 44 is intentional to make length different than rest
-        var btn4 = $"{CM.Glyphs.LeftBracket} {btn4Text} {CM.Glyphs.RightBracket}";
+        var btn4 = $"{Glyphs.LeftBracket} {btn4Text} {Glyphs.RightBracket}";
 
 
         // Note extra spaces to make dialog even wider
         // Note extra spaces to make dialog even wider
         //                         123456                          1234567
         //                         123456                          1234567
-        var buttonRow = $"{CM.Glyphs.VLine}      {btn1} {btn2} {btn3} {btn4}      {CM.Glyphs.VLine}";
+        var buttonRow = $"{Glyphs.VLine}      {btn1} {btn2} {btn3} {btn4}      {Glyphs.VLine}";
         int width = buttonRow.Length;
         int width = buttonRow.Length;
         d.SetBufferSize (buttonRow.Length, 1);
         d.SetBufferSize (buttonRow.Length, 1);
 
 
@@ -373,7 +373,7 @@ public class DialogTests
         dlg.Dispose ();
         dlg.Dispose ();
 
 
         // Justify
         // Justify
-        buttonRow = $"{CM.Glyphs.VLine}{btn1}     {btn2}     {btn3}     {btn4}{CM.Glyphs.VLine}";
+        buttonRow = $"{Glyphs.VLine}{btn1}     {btn2}     {btn3}     {btn4}{Glyphs.VLine}";
         Assert.Equal (width, buttonRow.Length);
         Assert.Equal (width, buttonRow.Length);
 
 
         (runstate, dlg) = BeginButtonTestDialog (
         (runstate, dlg) = BeginButtonTestDialog (
@@ -390,7 +390,7 @@ public class DialogTests
         dlg.Dispose ();
         dlg.Dispose ();
 
 
         // Right
         // Right
-        buttonRow = $"{CM.Glyphs.VLine}            {btn1} {btn2} {btn3} {btn4}{CM.Glyphs.VLine}";
+        buttonRow = $"{Glyphs.VLine}            {btn1} {btn2} {btn3} {btn4}{Glyphs.VLine}";
         Assert.Equal (width, buttonRow.Length);
         Assert.Equal (width, buttonRow.Length);
 
 
         (runstate, dlg) = BeginButtonTestDialog (
         (runstate, dlg) = BeginButtonTestDialog (
@@ -407,7 +407,7 @@ public class DialogTests
         dlg.Dispose ();
         dlg.Dispose ();
 
 
         // Left
         // Left
-        buttonRow = $"{CM.Glyphs.VLine}{btn1} {btn2} {btn3} {btn4}            {CM.Glyphs.VLine}";
+        buttonRow = $"{Glyphs.VLine}{btn1} {btn2} {btn3} {btn4}            {Glyphs.VLine}";
         Assert.Equal (width, buttonRow.Length);
         Assert.Equal (width, buttonRow.Length);
 
 
         (runstate, dlg) = BeginButtonTestDialog (
         (runstate, dlg) = BeginButtonTestDialog (
@@ -438,19 +438,19 @@ public class DialogTests
 
 
         // E.g "|[ yes ][ no ][ maybe ]|"
         // E.g "|[ yes ][ no ][ maybe ]|"
         var btn1Text = "yes";
         var btn1Text = "yes";
-        var btn1 = $"{CM.Glyphs.LeftBracket} {btn1Text} {CM.Glyphs.RightBracket}";
+        var btn1 = $"{Glyphs.LeftBracket} {btn1Text} {Glyphs.RightBracket}";
         var btn2Text = "no";
         var btn2Text = "no";
-        var btn2 = $"{CM.Glyphs.LeftBracket} {btn2Text} {CM.Glyphs.RightBracket}";
+        var btn2 = $"{Glyphs.LeftBracket} {btn2Text} {Glyphs.RightBracket}";
         var btn3Text = "你你你你你"; // This is a wide char
         var btn3Text = "你你你你你"; // This is a wide char
-        var btn3 = $"{CM.Glyphs.LeftBracket} {btn3Text} {CM.Glyphs.RightBracket}";
+        var btn3 = $"{Glyphs.LeftBracket} {btn3Text} {Glyphs.RightBracket}";
 
 
         // Requires a Nerd Font
         // Requires a Nerd Font
         var btn4Text = "\uE36E\uE36F\uE370\uE371\uE372\uE373";
         var btn4Text = "\uE36E\uE36F\uE370\uE371\uE372\uE373";
-        var btn4 = $"{CM.Glyphs.LeftBracket} {btn4Text} {CM.Glyphs.RightBracket}";
+        var btn4 = $"{Glyphs.LeftBracket} {btn4Text} {Glyphs.RightBracket}";
 
 
         // Note extra spaces to make dialog even wider
         // Note extra spaces to make dialog even wider
         //                         123456                           123456
         //                         123456                           123456
-        var buttonRow = $"{CM.Glyphs.VLine}      {btn1} {btn2} {btn3} {btn4}      {CM.Glyphs.VLine}";
+        var buttonRow = $"{Glyphs.VLine}      {btn1} {btn2} {btn3} {btn4}      {Glyphs.VLine}";
         int width = buttonRow.GetColumns ();
         int width = buttonRow.GetColumns ();
         d.SetBufferSize (width, 3);
         d.SetBufferSize (width, 3);
 
 
@@ -469,7 +469,7 @@ public class DialogTests
         dlg.Dispose ();
         dlg.Dispose ();
 
 
         // Justify
         // Justify
-        buttonRow = $"{CM.Glyphs.VLine}{btn1}     {btn2}     {btn3}     {btn4}{CM.Glyphs.VLine}";
+        buttonRow = $"{Glyphs.VLine}{btn1}     {btn2}     {btn3}     {btn4}{Glyphs.VLine}";
         Assert.Equal (width, buttonRow.GetColumns ());
         Assert.Equal (width, buttonRow.GetColumns ());
 
 
         (runstate, dlg) = BeginButtonTestDialog (
         (runstate, dlg) = BeginButtonTestDialog (
@@ -486,7 +486,7 @@ public class DialogTests
         dlg.Dispose ();
         dlg.Dispose ();
 
 
         // Right
         // Right
-        buttonRow = $"{CM.Glyphs.VLine}            {btn1} {btn2} {btn3} {btn4}{CM.Glyphs.VLine}";
+        buttonRow = $"{Glyphs.VLine}            {btn1} {btn2} {btn3} {btn4}{Glyphs.VLine}";
         Assert.Equal (width, buttonRow.GetColumns ());
         Assert.Equal (width, buttonRow.GetColumns ());
 
 
         (runstate, dlg) = BeginButtonTestDialog (
         (runstate, dlg) = BeginButtonTestDialog (
@@ -503,7 +503,7 @@ public class DialogTests
         dlg.Dispose ();
         dlg.Dispose ();
 
 
         // Left
         // Left
-        buttonRow = $"{CM.Glyphs.VLine}{btn1} {btn2} {btn3} {btn4}            {CM.Glyphs.VLine}";
+        buttonRow = $"{Glyphs.VLine}{btn1} {btn2} {btn3} {btn4}            {Glyphs.VLine}";
         Assert.Equal (width, buttonRow.GetColumns ());
         Assert.Equal (width, buttonRow.GetColumns ());
 
 
         (runstate, dlg) = BeginButtonTestDialog (
         (runstate, dlg) = BeginButtonTestDialog (
@@ -535,7 +535,7 @@ public class DialogTests
         var btnText = "ok";
         var btnText = "ok";
 
 
         var buttonRow =
         var buttonRow =
-            $"{CM.Glyphs.VLine}  {CM.Glyphs.LeftBracket} {btnText} {CM.Glyphs.RightBracket}  {CM.Glyphs.VLine}";
+            $"{Glyphs.VLine}  {Glyphs.LeftBracket} {btnText} {Glyphs.RightBracket}  {Glyphs.VLine}";
         int width = buttonRow.Length;
         int width = buttonRow.Length;
 
 
         d.SetBufferSize (width, 1);
         d.SetBufferSize (width, 1);
@@ -554,7 +554,7 @@ public class DialogTests
 
 
         // Justify 
         // Justify 
         buttonRow =
         buttonRow =
-            $"{CM.Glyphs.VLine}{CM.Glyphs.LeftBracket} {btnText} {CM.Glyphs.RightBracket}    {CM.Glyphs.VLine}";
+            $"{Glyphs.VLine}{Glyphs.LeftBracket} {btnText} {Glyphs.RightBracket}    {Glyphs.VLine}";
         Assert.Equal (width, buttonRow.Length);
         Assert.Equal (width, buttonRow.Length);
 
 
         (runstate, dlg) = BeginButtonTestDialog (
         (runstate, dlg) = BeginButtonTestDialog (
@@ -569,7 +569,7 @@ public class DialogTests
 
 
         // Right
         // Right
         buttonRow =
         buttonRow =
-            $"{CM.Glyphs.VLine}    {CM.Glyphs.LeftBracket} {btnText} {CM.Glyphs.RightBracket}{CM.Glyphs.VLine}";
+            $"{Glyphs.VLine}    {Glyphs.LeftBracket} {btnText} {Glyphs.RightBracket}{Glyphs.VLine}";
         Assert.Equal (width, buttonRow.Length);
         Assert.Equal (width, buttonRow.Length);
 
 
         (runstate, dlg) = BeginButtonTestDialog (
         (runstate, dlg) = BeginButtonTestDialog (
@@ -584,7 +584,7 @@ public class DialogTests
 
 
         // Left
         // Left
         buttonRow =
         buttonRow =
-            $"{CM.Glyphs.VLine}{CM.Glyphs.LeftBracket} {btnText} {CM.Glyphs.RightBracket}    {CM.Glyphs.VLine}";
+            $"{Glyphs.VLine}{Glyphs.LeftBracket} {btnText} {Glyphs.RightBracket}    {Glyphs.VLine}";
         Assert.Equal (width, buttonRow.Length);
         Assert.Equal (width, buttonRow.Length);
 
 
         (runstate, dlg) = BeginButtonTestDialog (
         (runstate, dlg) = BeginButtonTestDialog (
@@ -599,7 +599,7 @@ public class DialogTests
 
 
         // Wider
         // Wider
         buttonRow =
         buttonRow =
-            $"{CM.Glyphs.VLine}   {CM.Glyphs.LeftBracket} {btnText} {CM.Glyphs.RightBracket}   {CM.Glyphs.VLine}";
+            $"{Glyphs.VLine}   {Glyphs.LeftBracket} {btnText} {Glyphs.RightBracket}   {Glyphs.VLine}";
         width = buttonRow.Length;
         width = buttonRow.Length;
 
 
         d.SetBufferSize (width, 1);
         d.SetBufferSize (width, 1);
@@ -616,7 +616,7 @@ public class DialogTests
 
 
         // Justify
         // Justify
         buttonRow =
         buttonRow =
-            $"{CM.Glyphs.VLine}{CM.Glyphs.LeftBracket} {btnText} {CM.Glyphs.RightBracket}      {CM.Glyphs.VLine}";
+            $"{Glyphs.VLine}{Glyphs.LeftBracket} {btnText} {Glyphs.RightBracket}      {Glyphs.VLine}";
         Assert.Equal (width, buttonRow.Length);
         Assert.Equal (width, buttonRow.Length);
 
 
         (runstate, dlg) = BeginButtonTestDialog (
         (runstate, dlg) = BeginButtonTestDialog (
@@ -631,7 +631,7 @@ public class DialogTests
 
 
         // Right
         // Right
         buttonRow =
         buttonRow =
-            $"{CM.Glyphs.VLine}      {CM.Glyphs.LeftBracket} {btnText} {CM.Glyphs.RightBracket}{CM.Glyphs.VLine}";
+            $"{Glyphs.VLine}      {Glyphs.LeftBracket} {btnText} {Glyphs.RightBracket}{Glyphs.VLine}";
         Assert.Equal (width, buttonRow.Length);
         Assert.Equal (width, buttonRow.Length);
 
 
         (runstate, dlg) = BeginButtonTestDialog (
         (runstate, dlg) = BeginButtonTestDialog (
@@ -646,7 +646,7 @@ public class DialogTests
 
 
         // Left
         // Left
         buttonRow =
         buttonRow =
-            $"{CM.Glyphs.VLine}{CM.Glyphs.LeftBracket} {btnText} {CM.Glyphs.RightBracket}      {CM.Glyphs.VLine}";
+            $"{Glyphs.VLine}{Glyphs.LeftBracket} {btnText} {Glyphs.RightBracket}      {Glyphs.VLine}";
         Assert.Equal (width, buttonRow.Length);
         Assert.Equal (width, buttonRow.Length);
 
 
         (runstate, dlg) = BeginButtonTestDialog (
         (runstate, dlg) = BeginButtonTestDialog (
@@ -674,13 +674,13 @@ public class DialogTests
 
 
         // E.g "|[ yes ][ no ][ maybe ]|"
         // E.g "|[ yes ][ no ][ maybe ]|"
         var btn1Text = "yes";
         var btn1Text = "yes";
-        var btn1 = $"{CM.Glyphs.LeftBracket} {btn1Text} {CM.Glyphs.RightBracket}";
+        var btn1 = $"{Glyphs.LeftBracket} {btn1Text} {Glyphs.RightBracket}";
         var btn2Text = "no";
         var btn2Text = "no";
-        var btn2 = $"{CM.Glyphs.LeftBracket} {btn2Text} {CM.Glyphs.RightBracket}";
+        var btn2 = $"{Glyphs.LeftBracket} {btn2Text} {Glyphs.RightBracket}";
         var btn3Text = "maybe";
         var btn3Text = "maybe";
-        var btn3 = $"{CM.Glyphs.LeftBracket} {btn3Text} {CM.Glyphs.RightBracket}";
+        var btn3 = $"{Glyphs.LeftBracket} {btn3Text} {Glyphs.RightBracket}";
 
 
-        var buttonRow = $@"{CM.Glyphs.VLine} {btn1} {btn2} {btn3} {CM.Glyphs.VLine}";
+        var buttonRow = $@"{Glyphs.VLine} {btn1} {btn2} {btn3} {Glyphs.VLine}";
         int width = buttonRow.Length;
         int width = buttonRow.Length;
 
 
         d.SetBufferSize (buttonRow.Length, 3);
         d.SetBufferSize (buttonRow.Length, 3);
@@ -698,7 +698,7 @@ public class DialogTests
         dlg.Dispose ();
         dlg.Dispose ();
 
 
         // Justify
         // Justify
-        buttonRow = $@"{CM.Glyphs.VLine}{btn1}  {btn2}  {btn3}{CM.Glyphs.VLine}";
+        buttonRow = $@"{Glyphs.VLine}{btn1}  {btn2}  {btn3}{Glyphs.VLine}";
         Assert.Equal (width, buttonRow.Length);
         Assert.Equal (width, buttonRow.Length);
 
 
         (runstate, dlg) = BeginButtonTestDialog (
         (runstate, dlg) = BeginButtonTestDialog (
@@ -714,7 +714,7 @@ public class DialogTests
         dlg.Dispose ();
         dlg.Dispose ();
 
 
         // Right
         // Right
-        buttonRow = $@"{CM.Glyphs.VLine}  {btn1} {btn2} {btn3}{CM.Glyphs.VLine}";
+        buttonRow = $@"{Glyphs.VLine}  {btn1} {btn2} {btn3}{Glyphs.VLine}";
         Assert.Equal (width, buttonRow.Length);
         Assert.Equal (width, buttonRow.Length);
 
 
         (runstate, dlg) = BeginButtonTestDialog (
         (runstate, dlg) = BeginButtonTestDialog (
@@ -730,7 +730,7 @@ public class DialogTests
         dlg.Dispose ();
         dlg.Dispose ();
 
 
         // Left
         // Left
-        buttonRow = $@"{CM.Glyphs.VLine}{btn1} {btn2} {btn3}  {CM.Glyphs.VLine}";
+        buttonRow = $@"{Glyphs.VLine}{btn1} {btn2} {btn3}  {Glyphs.VLine}";
         Assert.Equal (width, buttonRow.Length);
         Assert.Equal (width, buttonRow.Length);
 
 
         (runstate, dlg) = BeginButtonTestDialog (
         (runstate, dlg) = BeginButtonTestDialog (
@@ -760,11 +760,11 @@ public class DialogTests
 
 
         // E.g "|[ yes ][ no ]|"
         // E.g "|[ yes ][ no ]|"
         var btn1Text = "yes";
         var btn1Text = "yes";
-        var btn1 = $"{CM.Glyphs.LeftBracket} {btn1Text} {CM.Glyphs.RightBracket}";
+        var btn1 = $"{Glyphs.LeftBracket} {btn1Text} {Glyphs.RightBracket}";
         var btn2Text = "no";
         var btn2Text = "no";
-        var btn2 = $"{CM.Glyphs.LeftBracket} {btn2Text} {CM.Glyphs.RightBracket}";
+        var btn2 = $"{Glyphs.LeftBracket} {btn2Text} {Glyphs.RightBracket}";
 
 
-        var buttonRow = $@"{CM.Glyphs.VLine} {btn1} {btn2} {CM.Glyphs.VLine}";
+        var buttonRow = $@"{Glyphs.VLine} {btn1} {btn2} {Glyphs.VLine}";
         int width = buttonRow.Length;
         int width = buttonRow.Length;
 
 
         d.SetBufferSize (buttonRow.Length, 3);
         d.SetBufferSize (buttonRow.Length, 3);
@@ -781,7 +781,7 @@ public class DialogTests
         dlg.Dispose ();
         dlg.Dispose ();
 
 
         // Justify
         // Justify
-        buttonRow = $@"{CM.Glyphs.VLine}{btn1}   {btn2}{CM.Glyphs.VLine}";
+        buttonRow = $@"{Glyphs.VLine}{btn1}   {btn2}{Glyphs.VLine}";
         Assert.Equal (width, buttonRow.Length);
         Assert.Equal (width, buttonRow.Length);
 
 
         (runstate, dlg) = BeginButtonTestDialog (
         (runstate, dlg) = BeginButtonTestDialog (
@@ -796,7 +796,7 @@ public class DialogTests
         dlg.Dispose ();
         dlg.Dispose ();
 
 
         // Right
         // Right
-        buttonRow = $@"{CM.Glyphs.VLine}  {btn1} {btn2}{CM.Glyphs.VLine}";
+        buttonRow = $@"{Glyphs.VLine}  {btn1} {btn2}{Glyphs.VLine}";
         Assert.Equal (width, buttonRow.Length);
         Assert.Equal (width, buttonRow.Length);
 
 
         (runstate, dlg) = BeginButtonTestDialog (
         (runstate, dlg) = BeginButtonTestDialog (
@@ -811,7 +811,7 @@ public class DialogTests
         dlg.Dispose ();
         dlg.Dispose ();
 
 
         // Left
         // Left
-        buttonRow = $@"{CM.Glyphs.VLine}{btn1} {btn2}  {CM.Glyphs.VLine}";
+        buttonRow = $@"{Glyphs.VLine}{btn1} {btn2}  {Glyphs.VLine}";
         Assert.Equal (width, buttonRow.Length);
         Assert.Equal (width, buttonRow.Length);
 
 
         (runstate, dlg) = BeginButtonTestDialog (
         (runstate, dlg) = BeginButtonTestDialog (
@@ -841,11 +841,11 @@ public class DialogTests
 
 
         // E.g "|[ yes ][ no ]|"
         // E.g "|[ yes ][ no ]|"
         var btn1Text = "yes";
         var btn1Text = "yes";
-        var btn1 = $"{CM.Glyphs.LeftBracket} {btn1Text} {CM.Glyphs.RightBracket}";
+        var btn1 = $"{Glyphs.LeftBracket} {btn1Text} {Glyphs.RightBracket}";
         var btn2Text = "no";
         var btn2Text = "no";
-        var btn2 = $"{CM.Glyphs.LeftBracket} {btn2Text} {CM.Glyphs.RightBracket}";
+        var btn2 = $"{Glyphs.LeftBracket} {btn2Text} {Glyphs.RightBracket}";
 
 
-        var buttonRow = $@"{CM.Glyphs.VLine} {btn1} {btn2} {CM.Glyphs.VLine}";
+        var buttonRow = $@"{Glyphs.VLine} {btn1} {btn2} {Glyphs.VLine}";
         int width = buttonRow.Length;
         int width = buttonRow.Length;
 
 
         d.SetBufferSize (buttonRow.Length, 3);
         d.SetBufferSize (buttonRow.Length, 3);
@@ -859,7 +859,7 @@ public class DialogTests
         (runstate, dlg) = BeginButtonTestDialog (title, width, Alignment.Center, button1, button2);
         (runstate, dlg) = BeginButtonTestDialog (title, width, Alignment.Center, button1, button2);
         button1.Visible = false;
         button1.Visible = false;
         RunIteration (ref runstate, firstIteration);
         RunIteration (ref runstate, firstIteration);
-        buttonRow = $@"{CM.Glyphs.VLine}         {btn2} {CM.Glyphs.VLine}";
+        buttonRow = $@"{Glyphs.VLine}         {btn2} {Glyphs.VLine}";
         TestHelpers.AssertDriverContentsWithFrameAre ($"{buttonRow}", _output);
         TestHelpers.AssertDriverContentsWithFrameAre ($"{buttonRow}", _output);
         End (runstate);
         End (runstate);
         dlg.Dispose ();
         dlg.Dispose ();
@@ -871,7 +871,7 @@ public class DialogTests
         (runstate, dlg) = BeginButtonTestDialog (title, width, Alignment.Fill, button1, button2);
         (runstate, dlg) = BeginButtonTestDialog (title, width, Alignment.Fill, button1, button2);
         button1.Visible = false;
         button1.Visible = false;
         RunIteration (ref runstate, firstIteration);
         RunIteration (ref runstate, firstIteration);
-        buttonRow = $@"{CM.Glyphs.VLine}          {btn2}{CM.Glyphs.VLine}";
+        buttonRow = $@"{Glyphs.VLine}          {btn2}{Glyphs.VLine}";
         TestHelpers.AssertDriverContentsWithFrameAre ($"{buttonRow}", _output);
         TestHelpers.AssertDriverContentsWithFrameAre ($"{buttonRow}", _output);
         End (runstate);
         End (runstate);
         dlg.Dispose ();
         dlg.Dispose ();
@@ -894,7 +894,7 @@ public class DialogTests
         (runstate, dlg) = BeginButtonTestDialog (title, width, Alignment.Start, button1, button2);
         (runstate, dlg) = BeginButtonTestDialog (title, width, Alignment.Start, button1, button2);
         button1.Visible = false;
         button1.Visible = false;
         RunIteration (ref runstate, firstIteration);
         RunIteration (ref runstate, firstIteration);
-        buttonRow = $@"{CM.Glyphs.VLine}        {btn2}  {CM.Glyphs.VLine}";
+        buttonRow = $@"{Glyphs.VLine}        {btn2}  {Glyphs.VLine}";
         TestHelpers.AssertDriverContentsWithFrameAre ($"{buttonRow}", _output);
         TestHelpers.AssertDriverContentsWithFrameAre ($"{buttonRow}", _output);
         End (runstate);
         End (runstate);
         dlg.Dispose ();
         dlg.Dispose ();
@@ -924,7 +924,7 @@ public class DialogTests
                              RequestStop ();
                              RequestStop ();
                          }
                          }
                      };
                      };
-        var btn = $"{CM.Glyphs.LeftBracket} Ok {CM.Glyphs.RightBracket}";
+        var btn = $"{Glyphs.LeftBracket} Ok {Glyphs.RightBracket}";
 
 
         win.Loaded += (s, a) =>
         win.Loaded += (s, a) =>
                       {
                       {
@@ -1096,7 +1096,7 @@ public class DialogTests
                        };
                        };
 
 
         var btn =
         var btn =
-            $"{CM.Glyphs.LeftBracket}{CM.Glyphs.LeftDefaultIndicator} Ok {CM.Glyphs.RightDefaultIndicator}{CM.Glyphs.RightBracket}";
+            $"{Glyphs.LeftBracket}{Glyphs.LeftDefaultIndicator} Ok {Glyphs.RightDefaultIndicator}{Glyphs.RightBracket}";
 
 
         int iterations = -1;
         int iterations = -1;
 
 
@@ -1127,7 +1127,7 @@ public class DialogTests
   │                       │
   │                       │
   │                       │
   │                       │
   │                       │
   │                       │
-  │{CM.Glyphs.LeftBracket} Show Sub {CM.Glyphs.RightBracket} {CM.Glyphs.LeftBracket} Close {CM.Glyphs.RightBracket} │
+  │{Glyphs.LeftBracket} Show Sub {Glyphs.RightBracket} {Glyphs.LeftBracket} Close {Glyphs.RightBracket} │
   └───────────────────────┘";
   └───────────────────────┘";
                                  TestHelpers.AssertDriverContentsWithFrameAre (expected, _output);
                                  TestHelpers.AssertDriverContentsWithFrameAre (expected, _output);
 
 
@@ -1145,7 +1145,7 @@ public class DialogTests
   │  │                  │ │
   │  │                  │ │
   │  │     {btn}     │ │
   │  │     {btn}     │ │
   │  └──────────────────┘ │
   │  └──────────────────┘ │
-  │{CM.Glyphs.LeftBracket} Show Sub {CM.Glyphs.RightBracket} {CM.Glyphs.LeftBracket} Close {CM.Glyphs.RightBracket} │
+  │{Glyphs.LeftBracket} Show Sub {Glyphs.RightBracket} {Glyphs.LeftBracket} Close {Glyphs.RightBracket} │
   └───────────────────────┘",
   └───────────────────────┘",
                                                                                _output
                                                                                _output
                                                                               );
                                                                               );
@@ -1266,7 +1266,7 @@ public class DialogTests
         var btnText = "ok";
         var btnText = "ok";
 
 
         var buttonRow =
         var buttonRow =
-            $"{CM.Glyphs.VLine}   {CM.Glyphs.LeftBracket} {btnText} {CM.Glyphs.RightBracket}   {CM.Glyphs.VLine}";
+            $"{Glyphs.VLine}   {Glyphs.LeftBracket} {btnText} {Glyphs.RightBracket}   {Glyphs.VLine}";
 
 
         int width = buttonRow.Length;
         int width = buttonRow.Length;
         d.SetBufferSize (buttonRow.Length, 10);
         d.SetBufferSize (buttonRow.Length, 10);
@@ -1326,7 +1326,7 @@ public class DialogTests
 
 
         var title = "1234";
         var title = "1234";
 
 
-        var buttonRow = $"{CM.Glyphs.VLine}        {CM.Glyphs.VLine}";
+        var buttonRow = $"{Glyphs.VLine}        {Glyphs.VLine}";
         int width = buttonRow.Length;
         int width = buttonRow.Length;
         d.SetBufferSize (buttonRow.Length, 3);
         d.SetBufferSize (buttonRow.Length, 3);
 
 

+ 2 - 2
UnitTests/Dialogs/MessageBoxTests.cs

@@ -192,7 +192,7 @@ public class MessageBoxTests
         ((FakeDriver)Application.Driver!).SetBufferSize (20, 10);
         ((FakeDriver)Application.Driver!).SetBufferSize (20, 10);
 
 
         var btn =
         var btn =
-            $"{CM.Glyphs.LeftBracket}{CM.Glyphs.LeftDefaultIndicator} btn {CM.Glyphs.RightDefaultIndicator}{CM.Glyphs.RightBracket}";
+            $"{Glyphs.LeftBracket}{Glyphs.LeftDefaultIndicator} btn {Glyphs.RightDefaultIndicator}{Glyphs.RightBracket}";
 
 
         // Override CM
         // Override CM
         MessageBox.DefaultButtonAlignment = Alignment.End;
         MessageBox.DefaultButtonAlignment = Alignment.End;
@@ -264,7 +264,7 @@ public class MessageBoxTests
         ((FakeDriver)Application.Driver!).SetBufferSize (20, 10);
         ((FakeDriver)Application.Driver!).SetBufferSize (20, 10);
 
 
         var btn =
         var btn =
-            $"{CM.Glyphs.LeftBracket}{CM.Glyphs.LeftDefaultIndicator} btn {CM.Glyphs.RightDefaultIndicator}{CM.Glyphs.RightBracket}";
+            $"{Glyphs.LeftBracket}{Glyphs.LeftDefaultIndicator} btn {Glyphs.RightDefaultIndicator}{Glyphs.RightBracket}";
 
 
         // Override CM
         // Override CM
         MessageBox.DefaultButtonAlignment = Alignment.End;
         MessageBox.DefaultButtonAlignment = Alignment.End;

+ 43 - 43
UnitTests/Dialogs/WizardTests.cs

@@ -401,44 +401,44 @@ public class WizardTests ()
         d.SetBufferSize (width, height);
         d.SetBufferSize (width, height);
 
 
         //	var btnBackText = "Back";
         //	var btnBackText = "Back";
-        var btnBack = string.Empty; // $"{CM.Glyphs.LeftBracket} {btnBackText} {CM.Glyphs.RightBracket}";
+        var btnBack = string.Empty; // $"{Glyphs.LeftBracket} {btnBackText} {Glyphs.RightBracket}";
         var btnNextText = "Finish"; // "Next";
         var btnNextText = "Finish"; // "Next";
 
 
         var btnNext =
         var btnNext =
             $"{
             $"{
-                CM.Glyphs.LeftBracket
+                Glyphs.LeftBracket
             }{
             }{
-                CM.Glyphs.LeftDefaultIndicator
+                Glyphs.LeftDefaultIndicator
             } {
             } {
                 btnNextText
                 btnNextText
             } {
             } {
-                CM.Glyphs.RightDefaultIndicator
+                Glyphs.RightDefaultIndicator
             }{
             }{
-                CM.Glyphs.RightBracket
+                Glyphs.RightBracket
             }";
             }";
 
 
         var topRow =
         var topRow =
             $"{
             $"{
-                CM.Glyphs.ULCornerDbl
+                Glyphs.ULCornerDbl
             }╡{
             }╡{
                 title
                 title
             } - {
             } - {
                 stepTitle
                 stepTitle
             }╞{
             }╞{
-                new (CM.Glyphs.HLineDbl.ToString () [0], width - title.Length - stepTitle.Length - 7)
+                new (Glyphs.HLineDbl.ToString () [0], width - title.Length - stepTitle.Length - 7)
             }{
             }{
-                CM.Glyphs.URCornerDbl
+                Glyphs.URCornerDbl
             }";
             }";
-        var row2 = $"{CM.Glyphs.VLineDbl}{new (' ', width - 2)}{CM.Glyphs.VLineDbl}";
+        var row2 = $"{Glyphs.VLineDbl}{new (' ', width - 2)}{Glyphs.VLineDbl}";
         string row3 = row2;
         string row3 = row2;
         string row4 = row3;
         string row4 = row3;
 
 
         var separatorRow =
         var separatorRow =
-            $"{CM.Glyphs.VLineDbl}{new (CM.Glyphs.HLine.ToString () [0], width - 2)}{CM.Glyphs.VLineDbl}";
+            $"{Glyphs.VLineDbl}{new (Glyphs.HLine.ToString () [0], width - 2)}{Glyphs.VLineDbl}";
 
 
         var buttonRow =
         var buttonRow =
             $"{
             $"{
-                CM.Glyphs.VLineDbl
+                Glyphs.VLineDbl
             }{
             }{
                 btnBack
                 btnBack
             }{
             }{
@@ -446,16 +446,16 @@ public class WizardTests ()
             }{
             }{
                 btnNext
                 btnNext
             }{
             }{
-                CM.Glyphs.VLineDbl
+                Glyphs.VLineDbl
             }";
             }";
 
 
         var bottomRow =
         var bottomRow =
             $"{
             $"{
-                CM.Glyphs.LLCornerDbl
+                Glyphs.LLCornerDbl
             }{
             }{
-                new (CM.Glyphs.HLineDbl.ToString () [0], width - 2)
+                new (Glyphs.HLineDbl.ToString () [0], width - 2)
             }{
             }{
-                CM.Glyphs.LRCornerDbl
+                Glyphs.LRCornerDbl
             }";
             }";
 
 
         var wizard = new Wizard { Title = title, Width = width, Height = height };
         var wizard = new Wizard { Title = title, Width = width, Height = height };
@@ -494,45 +494,45 @@ public class WizardTests ()
 
 
         var btnNext =
         var btnNext =
             $"{
             $"{
-                CM.Glyphs.LeftBracket
+                Glyphs.LeftBracket
             }{
             }{
-                CM.Glyphs.LeftDefaultIndicator
+                Glyphs.LeftDefaultIndicator
             } {
             } {
                 btnNextText
                 btnNextText
             } {
             } {
-                CM.Glyphs.RightDefaultIndicator
+                Glyphs.RightDefaultIndicator
             }{
             }{
-                CM.Glyphs.RightBracket
+                Glyphs.RightBracket
             }";
             }";
 
 
         var topRow =
         var topRow =
             $"{
             $"{
-                CM.Glyphs.ULCornerDbl
+                Glyphs.ULCornerDbl
             }╡{
             }╡{
                 title
                 title
             }{
             }{
                 stepTitle
                 stepTitle
             }╞{
             }╞{
-                new (CM.Glyphs.HLineDbl.ToString () [0], width - title.Length - stepTitle.Length - 4)
+                new (Glyphs.HLineDbl.ToString () [0], width - title.Length - stepTitle.Length - 4)
             }{
             }{
-                CM.Glyphs.URCornerDbl
+                Glyphs.URCornerDbl
             }";
             }";
 
 
         var separatorRow =
         var separatorRow =
-            $"{CM.Glyphs.VLineDbl}{new (CM.Glyphs.HLine.ToString () [0], width - 2)}{CM.Glyphs.VLineDbl}";
+            $"{Glyphs.VLineDbl}{new (Glyphs.HLine.ToString () [0], width - 2)}{Glyphs.VLineDbl}";
 
 
         // Once this is fixed, revert to commented out line: https://github.com/gui-cs/Terminal.Gui/issues/1791
         // Once this is fixed, revert to commented out line: https://github.com/gui-cs/Terminal.Gui/issues/1791
         var buttonRow =
         var buttonRow =
-            $"{CM.Glyphs.VLineDbl}{new (' ', width - btnNext.Length - 2)}{btnNext}{CM.Glyphs.VLineDbl}";
+            $"{Glyphs.VLineDbl}{new (' ', width - btnNext.Length - 2)}{btnNext}{Glyphs.VLineDbl}";
 
 
-        //var buttonRow = $"{CM.Glyphs.VDLine}{new String (' ', width - btnNext.Length - 2)}{btnNext}{CM.Glyphs.VDLine}";
+        //var buttonRow = $"{Glyphs.VDLine}{new String (' ', width - btnNext.Length - 2)}{btnNext}{Glyphs.VDLine}";
         var bottomRow =
         var bottomRow =
             $"{
             $"{
-                CM.Glyphs.LLCornerDbl
+                Glyphs.LLCornerDbl
             }{
             }{
-                new (CM.Glyphs.HLineDbl.ToString () [0], width - 2)
+                new (Glyphs.HLineDbl.ToString () [0], width - 2)
             }{
             }{
-                CM.Glyphs.LRCornerDbl
+                Glyphs.LRCornerDbl
             }";
             }";
 
 
         var wizard = new Wizard { Title = title, Width = width, Height = height };
         var wizard = new Wizard { Title = title, Width = width, Height = height };
@@ -655,43 +655,43 @@ public class WizardTests ()
         d.SetBufferSize (width, height);
         d.SetBufferSize (width, height);
 
 
         var btnBackText = "Back";
         var btnBackText = "Back";
-        var btnBack = $"{CM.Glyphs.LeftBracket} {btnBackText} {CM.Glyphs.RightBracket}";
+        var btnBack = $"{Glyphs.LeftBracket} {btnBackText} {Glyphs.RightBracket}";
         var btnNextText = "Finish";
         var btnNextText = "Finish";
 
 
         var btnNext =
         var btnNext =
             $"{
             $"{
-                CM.Glyphs.LeftBracket
+                Glyphs.LeftBracket
             }{
             }{
-                CM.Glyphs.LeftDefaultIndicator
+                Glyphs.LeftDefaultIndicator
             } {
             } {
                 btnNextText
                 btnNextText
             } {
             } {
-                CM.Glyphs.RightDefaultIndicator
+                Glyphs.RightDefaultIndicator
             }{
             }{
-                CM.Glyphs.RightBracket
+                Glyphs.RightBracket
             }";
             }";
 
 
         var topRow =
         var topRow =
             $"{
             $"{
-                CM.Glyphs.ULCornerDbl
+                Glyphs.ULCornerDbl
             }╡{
             }╡{
                 title
                 title
             }{
             }{
                 stepTitle
                 stepTitle
             }╞{
             }╞{
-                new (CM.Glyphs.HLineDbl.ToString () [0], width - title.Length - stepTitle.Length - 4)
+                new (Glyphs.HLineDbl.ToString () [0], width - title.Length - stepTitle.Length - 4)
             }{
             }{
-                CM.Glyphs.URCornerDbl
+                Glyphs.URCornerDbl
             }";
             }";
-        var row2 = $"{CM.Glyphs.VLineDbl}{new (' ', width - 2)}{CM.Glyphs.VLineDbl}";
+        var row2 = $"{Glyphs.VLineDbl}{new (' ', width - 2)}{Glyphs.VLineDbl}";
         string row3 = row2;
         string row3 = row2;
 
 
         var separatorRow =
         var separatorRow =
-            $"{CM.Glyphs.VLineDbl}{new (CM.Glyphs.HLine.ToString () [0], width - 2)}{CM.Glyphs.VLineDbl}";
+            $"{Glyphs.VLineDbl}{new (Glyphs.HLine.ToString () [0], width - 2)}{Glyphs.VLineDbl}";
 
 
         var buttonRow =
         var buttonRow =
             $"{
             $"{
-                CM.Glyphs.VLineDbl
+                Glyphs.VLineDbl
             }{
             }{
                 btnBack
                 btnBack
             }{
             }{
@@ -699,16 +699,16 @@ public class WizardTests ()
             }{
             }{
                 btnNext
                 btnNext
             }{
             }{
-                CM.Glyphs.VLineDbl
+                Glyphs.VLineDbl
             }";
             }";
 
 
         var bottomRow =
         var bottomRow =
             $"{
             $"{
-                CM.Glyphs.LLCornerDbl
+                Glyphs.LLCornerDbl
             }{
             }{
-                new (CM.Glyphs.HLineDbl.ToString () [0], width - 2)
+                new (Glyphs.HLineDbl.ToString () [0], width - 2)
             }{
             }{
-                CM.Glyphs.LRCornerDbl
+                Glyphs.LRCornerDbl
             }";
             }";
 
 
         var wizard = new Wizard { Title = title, Width = width, Height = height };
         var wizard = new Wizard { Title = title, Width = width, Height = height };

+ 0 - 29
UnitTests/Drawing/GlyphTests.cs

@@ -1,29 +0,0 @@
-using System.Reflection;
-using System.Text;
-using System.Text.Json;
-
-namespace Terminal.Gui.DrawingTests;
-
-public class GlyphTests
-{
-    [Fact]
-    public void Default_GlyphDefinitions_Deserialize ()
-    {
-        var defs = new GlyphDefinitions ();
-
-        // enumerate all properties in GlyphDefinitions
-        foreach (PropertyInfo prop in typeof (GlyphDefinitions).GetProperties ())
-        {
-            if (prop.PropertyType == typeof (Rune))
-            {
-                // Act
-                var rune = (Rune)prop.GetValue (defs);
-                string json = JsonSerializer.Serialize (rune, ConfigurationManager._serializerOptions);
-                var deserialized = JsonSerializer.Deserialize<Rune> (json, ConfigurationManager._serializerOptions);
-
-                // Assert
-                Assert.Equal (((Rune)prop.GetValue (defs)).Value, deserialized.Value);
-            }
-        }
-    }
-}

+ 1 - 1
UnitTests/Text/TextFormatterTests.cs

@@ -235,7 +235,7 @@ public class TextFormatterTests
     }
     }
 
 
     public static IEnumerable<object []> CMGlyphs =>
     public static IEnumerable<object []> CMGlyphs =>
-        new List<object []> { new object [] { $"{CM.Glyphs.LeftBracket} Say Hello 你 {CM.Glyphs.RightBracket}", 16, 15 } };
+        new List<object []> { new object [] { $"{Glyphs.LeftBracket} Say Hello 你 {Glyphs.RightBracket}", 16, 15 } };
 
 
     [SetupFakeDriver]
     [SetupFakeDriver]
     [Theory]
     [Theory]

+ 1 - 1
UnitTests/View/Layout/Pos.AnchorEndTests.cs

@@ -180,7 +180,7 @@ public class PosAnchorEndTests (ITestOutputHelper output)
         // Override CM
         // Override CM
         Button.DefaultShadow = ShadowStyle.None;
         Button.DefaultShadow = ShadowStyle.None;
 
 
-        var b = $"{CM.Glyphs.LeftBracket} Ok {CM.Glyphs.RightBracket}";
+        var b = $"{Glyphs.LeftBracket} Ok {Glyphs.RightBracket}";
 
 
         var frame = new FrameView { Width = 18, Height = 3 };
         var frame = new FrameView { Width = 18, Height = 3 };
         Assert.Equal (16, frame.Viewport.Width);
         Assert.Equal (16, frame.Viewport.Width);

+ 10 - 10
UnitTests/Views/ButtonTests.cs

@@ -15,7 +15,7 @@ public class ButtonTests (ITestOutputHelper output)
         Assert.Equal ("Hello", view.TitleTextFormatter.Text);
         Assert.Equal ("Hello", view.TitleTextFormatter.Text);
 
 
         Assert.Equal ("Hello", view.Text);
         Assert.Equal ("Hello", view.Text);
-        Assert.Equal ($"{CM.Glyphs.LeftBracket} Hello {CM.Glyphs.RightBracket}", view.TextFormatter.Text);
+        Assert.Equal ($"{Glyphs.LeftBracket} Hello {Glyphs.RightBracket}", view.TextFormatter.Text);
         view.Dispose ();
         view.Dispose ();
     }
     }
 
 
@@ -25,7 +25,7 @@ public class ButtonTests (ITestOutputHelper output)
         var view = new Button ();
         var view = new Button ();
         view.Text = "Hello";
         view.Text = "Hello";
         Assert.Equal ("Hello", view.Text);
         Assert.Equal ("Hello", view.Text);
-        Assert.Equal ($"{CM.Glyphs.LeftBracket} Hello {CM.Glyphs.RightBracket}", view.TextFormatter.Text);
+        Assert.Equal ($"{Glyphs.LeftBracket} Hello {Glyphs.RightBracket}", view.TextFormatter.Text);
 
 
         Assert.Equal ("Hello", view.Title);
         Assert.Equal ("Hello", view.Title);
         Assert.Equal ("Hello", view.TitleTextFormatter.Text);
         Assert.Equal ("Hello", view.TitleTextFormatter.Text);
@@ -158,14 +158,14 @@ public class ButtonTests (ITestOutputHelper output)
         btn.EndInit ();
         btn.EndInit ();
         btn.SetRelativeLayout (new (100, 100));
         btn.SetRelativeLayout (new (100, 100));
 
 
-        Assert.Equal ($"{CM.Glyphs.LeftBracket}  {CM.Glyphs.RightBracket}", btn.TextFormatter.Text);
+        Assert.Equal ($"{Glyphs.LeftBracket}  {Glyphs.RightBracket}", btn.TextFormatter.Text);
         Assert.False (btn.IsDefault);
         Assert.False (btn.IsDefault);
         Assert.Equal (Alignment.Center, btn.TextAlignment);
         Assert.Equal (Alignment.Center, btn.TextAlignment);
         Assert.Equal ('_', btn.HotKeySpecifier.Value);
         Assert.Equal ('_', btn.HotKeySpecifier.Value);
         Assert.True (btn.CanFocus);
         Assert.True (btn.CanFocus);
         Assert.Equal (new (0, 0, 4, 1), btn.Viewport);
         Assert.Equal (new (0, 0, 4, 1), btn.Viewport);
         Assert.Equal (new (0, 0, 4, 1), btn.Frame);
         Assert.Equal (new (0, 0, 4, 1), btn.Frame);
-        Assert.Equal ($"{CM.Glyphs.LeftBracket}  {CM.Glyphs.RightBracket}", btn.TextFormatter.Text);
+        Assert.Equal ($"{Glyphs.LeftBracket}  {Glyphs.RightBracket}", btn.TextFormatter.Text);
         Assert.False (btn.IsDefault);
         Assert.False (btn.IsDefault);
         Assert.Equal (Alignment.Center, btn.TextAlignment);
         Assert.Equal (Alignment.Center, btn.TextAlignment);
         Assert.Equal ('_', btn.HotKeySpecifier.Value);
         Assert.Equal ('_', btn.HotKeySpecifier.Value);
@@ -179,7 +179,7 @@ public class ButtonTests (ITestOutputHelper output)
         btn.Draw ();
         btn.Draw ();
 
 
         var expected = @$"
         var expected = @$"
-{CM.Glyphs.LeftBracket}  {CM.Glyphs.RightBracket}
+{Glyphs.LeftBracket}  {Glyphs.RightBracket}
 ";
 ";
         TestHelpers.AssertDriverContentsWithFrameAre (expected, output);
         TestHelpers.AssertDriverContentsWithFrameAre (expected, output);
         btn.Dispose ();
         btn.Dispose ();
@@ -197,7 +197,7 @@ public class ButtonTests (ITestOutputHelper output)
         Assert.Equal ("_Test", btn.Text);
         Assert.Equal ("_Test", btn.Text);
 
 
         Assert.Equal (
         Assert.Equal (
-                      $"{CM.Glyphs.LeftBracket}{CM.Glyphs.LeftDefaultIndicator} Test {CM.Glyphs.RightDefaultIndicator}{CM.Glyphs.RightBracket}",
+                      $"{Glyphs.LeftBracket}{Glyphs.LeftDefaultIndicator} Test {Glyphs.RightDefaultIndicator}{Glyphs.RightBracket}",
                       btn.TextFormatter.Format ()
                       btn.TextFormatter.Format ()
                      );
                      );
         Assert.True (btn.IsDefault);
         Assert.True (btn.IsDefault);
@@ -224,7 +224,7 @@ public class ButtonTests (ITestOutputHelper output)
         Assert.Equal (Key.A, btn.HotKey);
         Assert.Equal (Key.A, btn.HotKey);
 
 
         Assert.Equal (
         Assert.Equal (
-                      $"{CM.Glyphs.LeftBracket}{CM.Glyphs.LeftDefaultIndicator} abc {CM.Glyphs.RightDefaultIndicator}{CM.Glyphs.RightBracket}",
+                      $"{Glyphs.LeftBracket}{Glyphs.LeftDefaultIndicator} abc {Glyphs.RightDefaultIndicator}{Glyphs.RightBracket}",
                       btn.TextFormatter.Format ()
                       btn.TextFormatter.Format ()
                      );
                      );
         Assert.True (btn.IsDefault);
         Assert.True (btn.IsDefault);
@@ -236,7 +236,7 @@ public class ButtonTests (ITestOutputHelper output)
         btn.Draw ();
         btn.Draw ();
 
 
         expected = @$"
         expected = @$"
- {CM.Glyphs.LeftBracket}{CM.Glyphs.LeftDefaultIndicator} abc {CM.Glyphs.RightDefaultIndicator}{CM.Glyphs.RightBracket}
+ {Glyphs.LeftBracket}{Glyphs.LeftDefaultIndicator} abc {Glyphs.RightDefaultIndicator}{Glyphs.RightBracket}
 ";
 ";
         TestHelpers.AssertDriverContentsWithFrameAre (expected, output);
         TestHelpers.AssertDriverContentsWithFrameAre (expected, output);
 
 
@@ -576,9 +576,9 @@ public class ButtonTests (ITestOutputHelper output)
 
 
         Assert.True (btn.IsInitialized);
         Assert.True (btn.IsInitialized);
         Assert.Equal ("Say Hello 你", btn.Text);
         Assert.Equal ("Say Hello 你", btn.Text);
-        Assert.Equal ($"{CM.Glyphs.LeftBracket} {btn.Text} {CM.Glyphs.RightBracket}", btn.TextFormatter.Text);
+        Assert.Equal ($"{Glyphs.LeftBracket} {btn.Text} {Glyphs.RightBracket}", btn.TextFormatter.Text);
         Assert.Equal (new (0, 0, 16, 1), btn.Viewport);
         Assert.Equal (new (0, 0, 16, 1), btn.Viewport);
-        var btnTxt = $"{CM.Glyphs.LeftBracket} {btn.Text} {CM.Glyphs.RightBracket}";
+        var btnTxt = $"{Glyphs.LeftBracket} {btn.Text} {Glyphs.RightBracket}";
 
 
         var expected = @$"
         var expected = @$"
 ┌────────────────────────────┐
 ┌────────────────────────────┐

+ 16 - 16
UnitTests/Views/CheckBoxTests.cs

@@ -79,7 +79,7 @@ public class CheckBoxTests (ITestOutputHelper output)
         Assert.Equal ("Hello", view.TitleTextFormatter.Text);
         Assert.Equal ("Hello", view.TitleTextFormatter.Text);
 
 
         Assert.Equal ("Hello", view.Text);
         Assert.Equal ("Hello", view.Text);
-        Assert.Equal ($"{CM.Glyphs.CheckStateUnChecked} Hello", view.TextFormatter.Text);
+        Assert.Equal ($"{Glyphs.CheckStateUnChecked} Hello", view.TextFormatter.Text);
     }
     }
 
 
     [Fact]
     [Fact]
@@ -88,7 +88,7 @@ public class CheckBoxTests (ITestOutputHelper output)
         var view = new CheckBox ();
         var view = new CheckBox ();
         view.Text = "Hello";
         view.Text = "Hello";
         Assert.Equal ("Hello", view.Text);
         Assert.Equal ("Hello", view.Text);
-        Assert.Equal ($"{CM.Glyphs.CheckStateUnChecked} Hello", view.TextFormatter.Text);
+        Assert.Equal ($"{Glyphs.CheckStateUnChecked} Hello", view.TextFormatter.Text);
 
 
         Assert.Equal ("Hello", view.Title);
         Assert.Equal ("Hello", view.Title);
         Assert.Equal ("Hello", view.TitleTextFormatter.Text);
         Assert.Equal ("Hello", view.TitleTextFormatter.Text);
@@ -104,7 +104,7 @@ public class CheckBoxTests (ITestOutputHelper output)
         Assert.Equal (CheckState.UnChecked, ckb.CheckedState);
         Assert.Equal (CheckState.UnChecked, ckb.CheckedState);
         Assert.False (ckb.AllowCheckStateNone);
         Assert.False (ckb.AllowCheckStateNone);
         Assert.Equal (string.Empty, ckb.Text);
         Assert.Equal (string.Empty, ckb.Text);
-        Assert.Equal ($"{CM.Glyphs.CheckStateUnChecked} ", ckb.TextFormatter.Text);
+        Assert.Equal ($"{Glyphs.CheckStateUnChecked} ", ckb.TextFormatter.Text);
         Assert.True (ckb.CanFocus);
         Assert.True (ckb.CanFocus);
         Assert.Equal (new (0, 0, 2, 1), ckb.Frame);
         Assert.Equal (new (0, 0, 2, 1), ckb.Frame);
 
 
@@ -115,7 +115,7 @@ public class CheckBoxTests (ITestOutputHelper output)
         Assert.Equal (CheckState.Checked, ckb.CheckedState);
         Assert.Equal (CheckState.Checked, ckb.CheckedState);
         Assert.False (ckb.AllowCheckStateNone);
         Assert.False (ckb.AllowCheckStateNone);
         Assert.Equal ("Test", ckb.Text);
         Assert.Equal ("Test", ckb.Text);
-        Assert.Equal ($"{CM.Glyphs.CheckStateChecked} Test", ckb.TextFormatter.Text);
+        Assert.Equal ($"{Glyphs.CheckStateChecked} Test", ckb.TextFormatter.Text);
         Assert.True (ckb.CanFocus);
         Assert.True (ckb.CanFocus);
         Assert.Equal (new (0, 0, 6, 1), ckb.Frame);
         Assert.Equal (new (0, 0, 6, 1), ckb.Frame);
 
 
@@ -126,7 +126,7 @@ public class CheckBoxTests (ITestOutputHelper output)
         Assert.Equal (CheckState.UnChecked, ckb.CheckedState);
         Assert.Equal (CheckState.UnChecked, ckb.CheckedState);
         Assert.False (ckb.AllowCheckStateNone);
         Assert.False (ckb.AllowCheckStateNone);
         Assert.Equal ("Test", ckb.Text);
         Assert.Equal ("Test", ckb.Text);
-        Assert.Equal ($"{CM.Glyphs.CheckStateUnChecked} Test", ckb.TextFormatter.Text);
+        Assert.Equal ($"{Glyphs.CheckStateUnChecked} Test", ckb.TextFormatter.Text);
         Assert.True (ckb.CanFocus);
         Assert.True (ckb.CanFocus);
         Assert.Equal (new (1, 2, 6, 1), ckb.Frame);
         Assert.Equal (new (1, 2, 6, 1), ckb.Frame);
 
 
@@ -137,7 +137,7 @@ public class CheckBoxTests (ITestOutputHelper output)
         Assert.Equal (CheckState.Checked, ckb.CheckedState);
         Assert.Equal (CheckState.Checked, ckb.CheckedState);
         Assert.False (ckb.AllowCheckStateNone);
         Assert.False (ckb.AllowCheckStateNone);
         Assert.Equal ("Test", ckb.Text);
         Assert.Equal ("Test", ckb.Text);
-        Assert.Equal ($"{CM.Glyphs.CheckStateChecked} Test", ckb.TextFormatter.Text);
+        Assert.Equal ($"{Glyphs.CheckStateChecked} Test", ckb.TextFormatter.Text);
         Assert.True (ckb.CanFocus);
         Assert.True (ckb.CanFocus);
         Assert.Equal (new (3, 4, 6, 1), ckb.Frame);
         Assert.Equal (new (3, 4, 6, 1), ckb.Frame);
     }
     }
@@ -359,7 +359,7 @@ public class CheckBoxTests (ITestOutputHelper output)
         var expected = @$"
         var expected = @$"
 ┌┤Test Demo 你├──────────────┐
 ┌┤Test Demo 你├──────────────┐
 │                            │
 │                            │
-│    {CM.Glyphs.CheckStateUnChecked} Check this out 你     │
+│    {Glyphs.CheckStateUnChecked} Check this out 你     │
 │                            │
 │                            │
 └────────────────────────────┘
 └────────────────────────────┘
 ";
 ";
@@ -373,7 +373,7 @@ public class CheckBoxTests (ITestOutputHelper output)
         expected = @$"
         expected = @$"
 ┌┤Test Demo 你├──────────────┐
 ┌┤Test Demo 你├──────────────┐
 │                            │
 │                            │
-│    {CM.Glyphs.CheckStateChecked} Check this out 你     │
+│    {Glyphs.CheckStateChecked} Check this out 你     │
 │                            │
 │                            │
 └────────────────────────────┘
 └────────────────────────────┘
 ";
 ";
@@ -420,8 +420,8 @@ public class CheckBoxTests (ITestOutputHelper output)
         var expected = @$"
         var expected = @$"
 ┌┤Test Demo 你├──────────────┐
 ┌┤Test Demo 你├──────────────┐
 │                            │
 │                            │
-│ {CM.Glyphs.CheckStateUnChecked}   Check  first  out  你  │
-│ {CM.Glyphs.CheckStateUnChecked}  Check  second  out  你  │
+│ {Glyphs.CheckStateUnChecked}   Check  first  out  你  │
+│ {Glyphs.CheckStateUnChecked}  Check  second  out  你  │
 │                            │
 │                            │
 └────────────────────────────┘
 └────────────────────────────┘
 ";
 ";
@@ -443,8 +443,8 @@ public class CheckBoxTests (ITestOutputHelper output)
         expected = @$"
         expected = @$"
 ┌┤Test Demo 你├──────────────┐
 ┌┤Test Demo 你├──────────────┐
 │                            │
 │                            │
-│ {CM.Glyphs.CheckStateChecked}   Check  first  out  你  │
-│ {CM.Glyphs.CheckStateChecked}  Check  second  out  你  │
+│ {Glyphs.CheckStateChecked}   Check  first  out  你  │
+│ {Glyphs.CheckStateChecked}  Check  second  out  你  │
 │                            │
 │                            │
 └────────────────────────────┘
 └────────────────────────────┘
 ";
 ";
@@ -480,7 +480,7 @@ public class CheckBoxTests (ITestOutputHelper output)
         var expected = @$"
         var expected = @$"
 ┌┤Test Demo 你├──────────────┐
 ┌┤Test Demo 你├──────────────┐
 │                            │
 │                            │
-│ {CM.Glyphs.CheckStateUnChecked} Check this out 你        │
+│ {Glyphs.CheckStateUnChecked} Check this out 你        │
 │                            │
 │                            │
 └────────────────────────────┘
 └────────────────────────────┘
 ";
 ";
@@ -494,7 +494,7 @@ public class CheckBoxTests (ITestOutputHelper output)
         expected = @$"
         expected = @$"
 ┌┤Test Demo 你├──────────────┐
 ┌┤Test Demo 你├──────────────┐
 │                            │
 │                            │
-│ {CM.Glyphs.CheckStateChecked} Check this out 你        │
+│ {Glyphs.CheckStateChecked} Check this out 你        │
 │                            │
 │                            │
 └────────────────────────────┘
 └────────────────────────────┘
 ";
 ";
@@ -531,7 +531,7 @@ public class CheckBoxTests (ITestOutputHelper output)
         var expected = @$"
         var expected = @$"
 ┌┤Test Demo 你├──────────────┐
 ┌┤Test Demo 你├──────────────┐
 │                            │
 │                            │
-│       Check this out 你 {CM.Glyphs.CheckStateUnChecked}  │
+│       Check this out 你 {Glyphs.CheckStateUnChecked}  │
 │                            │
 │                            │
 └────────────────────────────┘
 └────────────────────────────┘
 ";
 ";
@@ -545,7 +545,7 @@ public class CheckBoxTests (ITestOutputHelper output)
         expected = @$"
         expected = @$"
 ┌┤Test Demo 你├──────────────┐
 ┌┤Test Demo 你├──────────────┐
 │                            │
 │                            │
-│       Check this out 你 {CM.Glyphs.CheckStateChecked}  │
+│       Check this out 你 {Glyphs.CheckStateChecked}  │
 │                            │
 │                            │
 └────────────────────────────┘
 └────────────────────────────┘
 ";
 ";

+ 5 - 5
UnitTests/Views/GraphViewTests.cs

@@ -1118,7 +1118,7 @@ public class TextAnnotationTests
         var expected =
         var expected =
             @$"
             @$"
- ┤      {CM.Glyphs.Dot}
+ ┤      {Glyphs.Dot}
 0┼┬┬┬┬┬┬┬┬
 0┼┬┬┬┬┬┬┬┬
  0    5";
  0    5";
@@ -1593,9 +1593,9 @@ public class PathAnnotationTests
   2┤
   2┤
-  1┤{CM.Glyphs.Dot}
+  1┤{Glyphs.Dot}
-  0┼┬┬┬┬{CM.Glyphs.Dot}┬
+  0┼┬┬┬┬{Glyphs.Dot}┬
    0    5
    0    5
          
          
           ";
           ";
@@ -1630,9 +1630,9 @@ public class PathAnnotationTests
         var expected =
         var expected =
             @$"
             @$"
-1┤{CM.Glyphs.Dot}
+1┤{Glyphs.Dot}
-0┼┬┬┬┬{CM.Glyphs.Dot}┬┬┬
+0┼┬┬┬┬{Glyphs.Dot}┬┬┬
  0    5   
  0    5   
           
           
           ";
           ";

+ 4 - 4
UnitTests/Views/MenuBarTests.cs

@@ -107,7 +107,7 @@ public class MenuBarTests (ITestOutputHelper output)
                                                       @$"
                                                       @$"
  Nullable Checked       
  Nullable Checked       
 ┌──────────────────────┐
 ┌──────────────────────┐
-│ {CM.Glyphs.CheckStateNone} Check this out 你  │
+│ {Glyphs.CheckStateNone} Check this out 你  │
 └──────────────────────┘",
 └──────────────────────┘",
                                                       output
                                                       output
                                                      );
                                                      );
@@ -3771,11 +3771,11 @@ Edit
 
 
         public string ExpectedBottomRow (int i)
         public string ExpectedBottomRow (int i)
         {
         {
-            return $"{CM.Glyphs.LLCorner}{new (CM.Glyphs.HLine.ToString () [0], Menus [i].Children [0].TitleLength + 3)}{CM.Glyphs.LRCorner}  \n";
+            return $"{Glyphs.LLCorner}{new (Glyphs.HLine.ToString () [0], Menus [i].Children [0].TitleLength + 3)}{Glyphs.LRCorner}  \n";
         }
         }
 
 
         // The 3 spaces at end are a result of Menu.cs line 1062 where `pos` is calculated (` + spacesAfterTitle`)
         // The 3 spaces at end are a result of Menu.cs line 1062 where `pos` is calculated (` + spacesAfterTitle`)
-        public string ExpectedMenuItemRow (int i) { return $"{CM.Glyphs.VLine} {Menus [i].Children [0].Title}  {CM.Glyphs.VLine}   \n"; }
+        public string ExpectedMenuItemRow (int i) { return $"{Glyphs.VLine} {Menus [i].Children [0].Title}  {Glyphs.VLine}   \n"; }
 
 
         // The full expected string for an open sub menu
         // The full expected string for an open sub menu
         public string ExpectedSubMenuOpen (int i)
         public string ExpectedSubMenuOpen (int i)
@@ -3800,7 +3800,7 @@ Edit
         //   1 space before the Title and 2 spaces after the Title/Check/Help
         //   1 space before the Title and 2 spaces after the Title/Check/Help
         public string ExpectedTopRow (int i)
         public string ExpectedTopRow (int i)
         {
         {
-            return $"{CM.Glyphs.ULCorner}{new (CM.Glyphs.HLine.ToString () [0], Menus [i].Children [0].TitleLength + 3)}{CM.Glyphs.URCorner}  \n";
+            return $"{Glyphs.ULCorner}{new (Glyphs.HLine.ToString () [0], Menus [i].Children [0].TitleLength + 3)}{Glyphs.URCorner}  \n";
         }
         }
 
 
         // Each MenuBar title has a 1 space pad on each side
         // Each MenuBar title has a 1 space pad on each side

文件差异内容过多而无法显示
+ 264 - 264
UnitTests/Views/ProgressBarTests.cs


+ 4 - 4
UnitTests/Views/RadioGroupTests.cs

@@ -543,8 +543,8 @@ public class RadioGroupTests (ITestOutputHelper output)
 
 
         var expected = @$"
         var expected = @$"
 ┌────────────────────────────┐
 ┌────────────────────────────┐
-│{CM.Glyphs.Selected} Test                      │
-│{CM.Glyphs.UnSelected} New Test 你               │
+│{Glyphs.Selected} Test                      │
+│{Glyphs.UnSelected} New Test 你               │
 │                            │
 │                            │
 └────────────────────────────┘
 └────────────────────────────┘
 ";
 ";
@@ -564,7 +564,7 @@ public class RadioGroupTests (ITestOutputHelper output)
 
 
         expected = @$"
         expected = @$"
 ┌────────────────────────────┐
 ┌────────────────────────────┐
-│{CM.Glyphs.Selected} Test  {CM.Glyphs.UnSelected} New Test 你       │
+│{Glyphs.Selected} Test  {Glyphs.UnSelected} New Test 你       │
 │                            │
 │                            │
 │                            │
 │                            │
 └────────────────────────────┘
 └────────────────────────────┘
@@ -585,7 +585,7 @@ public class RadioGroupTests (ITestOutputHelper output)
 
 
         expected = @$"
         expected = @$"
 ┌────────────────────────────┐
 ┌────────────────────────────┐
-│{CM.Glyphs.Selected} Test    {CM.Glyphs.UnSelected} New Test 你     │
+│{Glyphs.Selected} Test    {Glyphs.UnSelected} New Test 你     │
 │                            │
 │                            │
 │                            │
 │                            │
 └────────────────────────────┘
 └────────────────────────────┘

+ 6 - 6
UnitTests/Views/TreeTableSourceTests.cs

@@ -13,16 +13,16 @@ public class TreeTableSourceTests : IDisposable
     {
     {
         _output = output;
         _output = output;
 
 
-        _origChecked = ConfigurationManager.Glyphs.CheckStateChecked;
-        _origUnchecked = ConfigurationManager.Glyphs.CheckStateUnChecked;
-        ConfigurationManager.Glyphs.CheckStateChecked = new Rune ('☑');
-        ConfigurationManager.Glyphs.CheckStateUnChecked = new Rune ('☐');
+        _origChecked = Glyphs.CheckStateChecked;
+        _origUnchecked = Glyphs.CheckStateUnChecked;
+        Glyphs.CheckStateChecked = new Rune ('☑');
+        Glyphs.CheckStateUnChecked = new Rune ('☐');
     }
     }
 
 
     public void Dispose ()
     public void Dispose ()
     {
     {
-        ConfigurationManager.Glyphs.CheckStateChecked = _origChecked;
-        ConfigurationManager.Glyphs.CheckStateUnChecked = _origUnchecked;
+        Glyphs.CheckStateChecked = _origChecked;
+        Glyphs.CheckStateUnChecked = _origUnchecked;
     }
     }
 
 
     [Fact]
     [Fact]

部分文件因为文件数量过多而无法显示