diff --git a/PSReadLine/Cmdlets.cs b/PSReadLine/Cmdlets.cs index 70de1a71..73ed7009 100644 --- a/PSReadLine/Cmdlets.cs +++ b/PSReadLine/Cmdlets.cs @@ -84,6 +84,7 @@ public class PSConsoleReadLineOptions public const ConsoleColor DefaultMemberColor = ConsoleColor.Gray; public const ConsoleColor DefaultEmphasisColor = ConsoleColor.Cyan; public const ConsoleColor DefaultErrorColor = ConsoleColor.Red; + public const ConsoleColor DefaultAttributeColor = ConsoleColor.Gray; // Use dark black by default for the suggestion text. // Find the most suitable color using https://stackoverflow.com/a/33206814 @@ -457,6 +458,24 @@ public object PredictionColor set => _predictionColor = VTColorUtils.AsEscapeSequence(value); } + public object AttributeColor + { + get => _attributeColor; + set => _attributeColor = VTColorUtils.AsEscapeSequence(value); + } + + public object CommandArgumentColor + { + get => _commandArgumentColor; + set => _commandArgumentColor = VTColorUtils.AsEscapeSequence(value); + } + + public object LoopLabelColor + { + get => _loopLabelColor; + set => _loopLabelColor = VTColorUtils.AsEscapeSequence(value); + } + internal string _defaultTokenColor; internal string _commentColor; internal string _keywordColor; @@ -472,24 +491,30 @@ public object PredictionColor internal string _errorColor; internal string _selectionColor; internal string _predictionColor; + internal string _attributeColor; + internal string _commandArgumentColor; + internal string _loopLabelColor; internal void ResetColors() { var fg = Console.ForegroundColor; - DefaultTokenColor = fg; - CommentColor = DefaultCommentColor; - KeywordColor = DefaultKeywordColor; - StringColor = DefaultStringColor; - OperatorColor = DefaultOperatorColor; - VariableColor = DefaultVariableColor; - CommandColor = DefaultCommandColor; - ParameterColor = DefaultParameterColor; - TypeColor = DefaultTypeColor; - NumberColor = DefaultNumberColor; - MemberColor = DefaultNumberColor; - EmphasisColor = DefaultEmphasisColor; - ErrorColor = DefaultErrorColor; - PredictionColor = DefaultPredictionColor; + DefaultTokenColor = fg; + CommentColor = DefaultCommentColor; + KeywordColor = DefaultKeywordColor; + StringColor = DefaultStringColor; + OperatorColor = DefaultOperatorColor; + VariableColor = DefaultVariableColor; + CommandColor = DefaultCommandColor; + ParameterColor = DefaultParameterColor; + TypeColor = DefaultTypeColor; + NumberColor = DefaultNumberColor; + MemberColor = DefaultNumberColor; + EmphasisColor = DefaultEmphasisColor; + ErrorColor = DefaultErrorColor; + PredictionColor = DefaultPredictionColor; + AttributeColor = DefaultAttributeColor; + CommandArgumentColor = fg; + LoopLabelColor = fg; var bg = Console.BackgroundColor; if (fg == VTColorUtils.UnknownColor || bg == VTColorUtils.UnknownColor) @@ -527,6 +552,9 @@ internal void SetColor(string property, object value) {"Member", (o, v) => o.MemberColor = v}, {"Selection", (o, v) => o.SelectionColor = v}, {"Prediction", (o, v) => o.PredictionColor = v}, + {"Attribute", (o, v) => o.AttributeColor = v}, + {"CommandArgument", (o, v) => o.CommandArgumentColor = v}, + {"LoopLabel", (o, v) => o.LoopLabelColor = v}, }; Interlocked.CompareExchange(ref ColorSetters, setters, null); diff --git a/PSReadLine/PSReadLine.format.ps1xml b/PSReadLine/PSReadLine.format.ps1xml index 9b239328..d1cd46d7 100644 --- a/PSReadLine/PSReadLine.format.ps1xml +++ b/PSReadLine/PSReadLine.format.ps1xml @@ -161,10 +161,18 @@ $d = [Microsoft.PowerShell.KeyHandler]::GetGroupingDescription($_.Group) PredictionSource + + + [Microsoft.PowerShell.VTColorUtils]::FormatColor($_.AttributeColor) + [Microsoft.PowerShell.VTColorUtils]::FormatColor($_.CommandColor) + + + [Microsoft.PowerShell.VTColorUtils]::FormatColor($_.CommandArgumentColor) + [Microsoft.PowerShell.VTColorUtils]::FormatColor($_.CommentColor) @@ -189,6 +197,10 @@ $d = [Microsoft.PowerShell.KeyHandler]::GetGroupingDescription($_.Group) [Microsoft.PowerShell.VTColorUtils]::FormatColor($_.KeywordColor) + + + [Microsoft.PowerShell.VTColorUtils]::FormatColor($_.LoopLabelColor) + [Microsoft.PowerShell.VTColorUtils]::FormatColor($_.MemberColor) diff --git a/PSReadLine/Render.cs b/PSReadLine/Render.cs index 970e3f77..108b2e03 100644 --- a/PSReadLine/Render.cs +++ b/PSReadLine/Render.cs @@ -952,6 +952,9 @@ private string GetTokenColor(Token token) case TokenKind.Number: return _options._numberColor; + + case TokenKind.Label: + return _options._loopLabelColor; } if ((token.TokenFlags & TokenFlags.Keyword) != 0) @@ -964,6 +967,11 @@ private string GetTokenColor(Token token) return _options._operatorColor; } + if ((token.TokenFlags & TokenFlags.AttributeName) != 0) + { + return _options._attributeColor; + } + if ((token.TokenFlags & TokenFlags.TypeName) != 0) { return _options._typeColor; @@ -974,6 +982,11 @@ private string GetTokenColor(Token token) return _options._memberColor; } + if ((token.Kind == TokenKind.Identifier || token.Kind == TokenKind.Generic) && token.TokenFlags == TokenFlags.None) + { + return _options._commandArgumentColor; + } + return _options._defaultTokenColor; } diff --git a/test/HistoryTest.cs b/test/HistoryTest.cs index 8b071ea1..65dbd5bb 100644 --- a/test/HistoryTest.cs +++ b/test/HistoryTest.cs @@ -781,14 +781,14 @@ public void InteractiveHistorySearch() TokenClassification.Command, "echo", TokenClassification.None, " ", emphasisColors, 'a', - TokenClassification.None, "aa", + TokenClassification.CommandArgument, "aa", NextLine, statusColors, "bck-i-search: a_")), 'b', CheckThat(() => AssertScreenIs(2, TokenClassification.Command, "echo", TokenClassification.None, " ", emphasisColors, "ab", - TokenClassification.None, 'b', + TokenClassification.CommandArgument, 'b', NextLine, statusColors, "bck-i-search: ab_")), 'c', CheckThat(() => AssertScreenIs(2, @@ -806,21 +806,21 @@ public void InteractiveHistorySearch() TokenClassification.Command, "echo", TokenClassification.None, " ", emphasisColors, 'a', - TokenClassification.None, "aa", + TokenClassification.CommandArgument, "aa", NextLine, statusColors, "bck-i-search: a_")), _.Ctrl_r, CheckThat(() => AssertScreenIs(2, TokenClassification.Command, "echo", TokenClassification.None, " ", emphasisColors, 'a', - TokenClassification.None, "bb", + TokenClassification.CommandArgument, "bb", NextLine, statusColors, "bck-i-search: a_")), _.Ctrl_r, CheckThat(() => AssertScreenIs(2, TokenClassification.Command, "echo", TokenClassification.None, " ", emphasisColors, 'a', - TokenClassification.None, "bc", + TokenClassification.CommandArgument, "bc", NextLine, statusColors, "bck-i-search: a_")))); @@ -833,7 +833,7 @@ public void InteractiveHistorySearch() TokenClassification.Command, "echo", TokenClassification.None, " ", emphasisColors, 'a', - TokenClassification.None, "bc", + TokenClassification.CommandArgument, "bc", NextLine, statusColors, "bck-i-search: a_")), 'b', @@ -841,7 +841,7 @@ public void InteractiveHistorySearch() TokenClassification.Command, "echo", TokenClassification.None, " ", emphasisColors, "ab", - TokenClassification.None, 'c', + TokenClassification.CommandArgument, 'c', NextLine, statusColors, "bck-i-search: ab_")))); @@ -853,14 +853,14 @@ public void InteractiveHistorySearch() TokenClassification.Command, "echo", TokenClassification.None, " ", emphasisColors, 'a', - TokenClassification.None, "bc", + TokenClassification.CommandArgument, "bc", NextLine, statusColors, "bck-i-search: a_")), _.Ctrl_g, CheckThat(() => AssertScreenIs(2, TokenClassification.Command, "echo", TokenClassification.None, " ", - TokenClassification.None, "zed", + TokenClassification.CommandArgument, "zed", NextLine)))); // Test that a random function terminates the search and has an @@ -872,7 +872,7 @@ public void InteractiveHistorySearch() TokenClassification.Command, "echo", TokenClassification.None, " ", emphasisColors, 'a', - TokenClassification.None, "bc", + TokenClassification.CommandArgument, "bc", NextLine, statusColors, "bck-i-search: a_")), _.Alt_d, "zed")); @@ -886,7 +886,7 @@ public void InteractiveHistorySearch() TokenClassification.Command, "echo", TokenClassification.None, " ", emphasisColors, 'a', - TokenClassification.None, "bc", + TokenClassification.CommandArgument, "bc", NextLine, statusColors, "bck-i-search: a_")), _.Escape, "y")); @@ -900,7 +900,7 @@ public void InteractiveHistorySearch() TokenClassification.Command, "echo", TokenClassification.None, " ", emphasisColors, "ab", - TokenClassification.None, 'b', + TokenClassification.CommandArgument, 'b', NextLine, statusColors, "bck-i-search: ab_")), _.Backspace, @@ -908,7 +908,7 @@ public void InteractiveHistorySearch() TokenClassification.Command, "echo", TokenClassification.None, " ", emphasisColors, 'a', - TokenClassification.None, "aa", + TokenClassification.CommandArgument, "aa", NextLine, statusColors, "bck-i-search: a_")))); @@ -919,7 +919,7 @@ public void InteractiveHistorySearch() TokenClassification.Command, "echo", TokenClassification.None, " ", emphasisColors, 'a', - TokenClassification.None, "bc", + TokenClassification.CommandArgument, "bc", NextLine, statusColors, "bck-i-search: a_")), _.Ctrl_r, @@ -927,14 +927,14 @@ public void InteractiveHistorySearch() TokenClassification.Command, "echo", TokenClassification.None, " ", emphasisColors, 'a', - TokenClassification.None, "bzz", + TokenClassification.CommandArgument, "bzz", NextLine, statusColors, "bck-i-search: a_")), _.Ctrl_r, CheckThat(() => AssertScreenIs(2, TokenClassification.Command, "echo", TokenClassification.None, " ", - TokenClassification.None, "abzz", + TokenClassification.CommandArgument, "abzz", NextLine, statusColors, "failed-bck-i-search: a_")), _.Ctrl_s, @@ -942,7 +942,7 @@ public void InteractiveHistorySearch() TokenClassification.Command, "echo", TokenClassification.None, " ", emphasisColors, 'a', - TokenClassification.None, "bzz", + TokenClassification.CommandArgument, "bzz", NextLine, statusColors, "fwd-i-search: a_")), _.Ctrl_g)); @@ -952,7 +952,8 @@ public void InteractiveHistorySearch() Test("echo aa1", Keys(_.Ctrl_r, "zz", _.Backspace, _.Backspace, "a1", CheckThat(() => AssertScreenIs(2, TokenClassification.Command, "echo", - TokenClassification.None, " a", + TokenClassification.None, " ", + TokenClassification.CommandArgument, "a", emphasisColors, "a1", NextLine, statusColors, "bck-i-search: a1_")) @@ -967,7 +968,7 @@ public void InteractiveHistorySearch() TokenClassification.Command, "echo", TokenClassification.None, " ", emphasisColors, "aa", - TokenClassification.None, "2", + TokenClassification.CommandArgument, "2", NextLine, statusColors, "bck-i-search: aa_")), _.Ctrl_r, @@ -975,7 +976,7 @@ public void InteractiveHistorySearch() TokenClassification.Command, "echo", TokenClassification.None, " ", emphasisColors, "aa", - TokenClassification.None, "1", + TokenClassification.CommandArgument, "1", NextLine, statusColors, "bck-i-search: aa_")), _.Backspace, @@ -983,7 +984,7 @@ public void InteractiveHistorySearch() TokenClassification.Command, "echo", TokenClassification.None, " ", emphasisColors, "a", - TokenClassification.None, "a2", + TokenClassification.CommandArgument, "a2", NextLine, statusColors, "bck-i-search: a_")), 'a', _.Ctrl_r, @@ -991,7 +992,7 @@ public void InteractiveHistorySearch() TokenClassification.Command, "echo", TokenClassification.None, " ", emphasisColors, "aa", - TokenClassification.None, "1", + TokenClassification.CommandArgument, "1", NextLine, statusColors, "bck-i-search: aa_")), _.Backspace)); diff --git a/test/KillYankTest.cs b/test/KillYankTest.cs index 72677d51..cd098418 100644 --- a/test/KillYankTest.cs +++ b/test/KillYankTest.cs @@ -392,6 +392,7 @@ public void SelectBackwardWord() CheckThat(() => AssertScreenIs(1, TokenClassification.Command, "echo", TokenClassification.None, " ", + TokenClassification.CommandArgument, Selected("foo "), "bar")), _.Delete)); } @@ -406,7 +407,9 @@ public void SelectNextWord() CheckThat(() => AssertScreenIs(1, TokenClassification.Command, Selected("foo"), TokenClassification.None, Selected(" "), - TokenClassification.None, "echo bar")), + TokenClassification.CommandArgument,"echo", + TokenClassification.None," ", + TokenClassification.CommandArgument, "bar")), _.Delete)); } @@ -419,7 +422,10 @@ public void SelectForwardWord() "foo echo bar", _.Home, _.Alt_F, CheckThat(() => AssertScreenIs(1, TokenClassification.Command, Selected("foo"), - TokenClassification.None, " echo bar")), + TokenClassification.None, " ", + TokenClassification.CommandArgument, "echo", + TokenClassification.None, " ", + TokenClassification.CommandArgument, "bar")), _.Delete)); } @@ -432,7 +438,10 @@ public void SelectShellForwardWord() "a\\b\\c echo bar", _.Home, _.Ctrl_z, CheckThat(() => AssertScreenIs(1, TokenClassification.Command, Selected("a\\b\\c"), - TokenClassification.None, " echo bar")), + TokenClassification.None, " ", + TokenClassification.CommandArgument, "echo", + TokenClassification.None, " ", + TokenClassification.CommandArgument, "bar")), _.Delete)); } @@ -445,7 +454,9 @@ public void SelectShellNextWord() "a\\b\\c echo bar", _.Home, _.Ctrl_z, CheckThat(() => AssertScreenIs(1, TokenClassification.Command, Selected("a\\b\\c "), - TokenClassification.None, "echo bar")), + TokenClassification.CommandArgument, "echo", + TokenClassification.None, " ", + TokenClassification.CommandArgument, "bar")), _.Delete)); } @@ -458,7 +469,9 @@ public void SelectShellBackwardWord() "echo bar 'a b c'", _.Ctrl_z, CheckThat(() => AssertScreenIs(1, TokenClassification.Command, "echo", - TokenClassification.None, " bar ", + TokenClassification.None, " ", + TokenClassification.CommandArgument, "bar", + TokenClassification.None, " ", TokenClassification.String, Selected("'a b c'"))), _.Delete)); } diff --git a/test/RenderTest.cs b/test/RenderTest.cs index 1ef7b263..23d8274b 100644 --- a/test/RenderTest.cs +++ b/test/RenderTest.cs @@ -61,6 +61,34 @@ public void Render() InputAcceptedNow )); + Test("", Keys( + "[AllowNull()]$R=ls C:\\;:Label while($true){break Label}", + _.Home, + CheckThat(() => + AssertScreenIs(1, + TokenClassification.None, "[", + TokenClassification.Attribute, "AllowNull", + TokenClassification.None, "()]", + TokenClassification.Variable, "$R", + TokenClassification.Operator, "=", + TokenClassification.Command, "ls", + TokenClassification.None, " ", + TokenClassification.CommandArgument, "C:\\", + TokenClassification.None, ";", + TokenClassification.LoopLabel, ":Label", + TokenClassification.None, " ", + TokenClassification.Keyword, "while", + TokenClassification.None, "(", + TokenClassification.Variable, "$true", + TokenClassification.None, "){", + TokenClassification.Keyword, "break", + TokenClassification.None, " ", + TokenClassification.Member, "Label", + TokenClassification.None, "}")), + _.Ctrl_c, + InputAcceptedNow + )); + // This tests for priority to highlight a command regardless of token kind and nested tokens potential to bleed the parent token color to the next token Test("", Keys( ". -abc def;. abc$name -def", @@ -69,7 +97,9 @@ public void Render() AssertScreenIs(1, TokenClassification.None, ". ", TokenClassification.Command, "-abc", - TokenClassification.None, " def;. ", + TokenClassification.None, " ", + TokenClassification.CommandArgument, "def", + TokenClassification.None, ";. ", TokenClassification.Command, "abc", TokenClassification.Variable, "$name", TokenClassification.None, " ", @@ -86,7 +116,8 @@ public void Render() AssertScreenIs(1, TokenClassification.None, ". ", TokenClassification.Command, "++", - TokenClassification.None, " abc", + TokenClassification.None, " ", + TokenClassification.CommandArgument, "abc", TokenClassification.Variable, "$name", TokenClassification.None, " ", TokenClassification.Parameter, "-def")), @@ -103,7 +134,8 @@ public void Render() TokenClassification.Keyword, "process", TokenClassification.None, " ", TokenClassification.Variable, "$abc", - TokenClassification.None, "\\name | def")), + TokenClassification.CommandArgument, "\\name", + TokenClassification.None, " | def")), _.Ctrl_c, InputAcceptedNow )); @@ -113,7 +145,9 @@ public void Render() CheckThat(() => AssertScreenIs(1, TokenClassification.Keyword, "process", - TokenClassification.None, " out put")), + TokenClassification.None, " ", + TokenClassification.CommandArgument, "out", + TokenClassification.None, " put")), _.Ctrl_c, InputAcceptedNow )); diff --git a/test/SuggestionTest.cs b/test/SuggestionTest.cs index 95070bee..de757764 100644 --- a/test/SuggestionTest.cs +++ b/test/SuggestionTest.cs @@ -146,7 +146,11 @@ public void AcceptNextSuggestionWordCanAcceptMoreThanOneWords() _.Alt_3, _.Ctrl_f, CheckThat(() => AssertScreenIs(1, TokenClassification.Command, "abc", - TokenClassification.None, " def ghi ", + TokenClassification.None, " ", + TokenClassification.CommandArgument, "def", + TokenClassification.None, " ", + TokenClassification.CommandArgument, "ghi", + TokenClassification.None, " ", TokenClassification.Prediction, "jkl")), _.Ctrl_z, CheckThat(() => AssertScreenIs(1, TokenClassification.Command, 'a', @@ -154,7 +158,11 @@ public void AcceptNextSuggestionWordCanAcceptMoreThanOneWords() _.Alt_3, _.Alt_f, CheckThat(() => AssertScreenIs(1, TokenClassification.Command, "abc", - TokenClassification.None, " def ghi ", + TokenClassification.None, " ", + TokenClassification.CommandArgument, "def", + TokenClassification.None, " ", + TokenClassification.CommandArgument, "ghi", + TokenClassification.None, " ", TokenClassification.Prediction, "jkl")), _.Ctrl_z, CheckThat(() => AssertScreenIs(1, TokenClassification.Command, 'a', @@ -162,7 +170,12 @@ public void AcceptNextSuggestionWordCanAcceptMoreThanOneWords() _.Alt_8, _.Alt_f, CheckThat(() => AssertScreenIs(1, TokenClassification.Command, "abc", - TokenClassification.None, " def ghi jkl")) + TokenClassification.None, " ", + TokenClassification.CommandArgument, "def", + TokenClassification.None, " ", + TokenClassification.CommandArgument, "ghi", + TokenClassification.None, " ", + TokenClassification.CommandArgument, "jkl")) )); } @@ -179,11 +192,13 @@ public void AcceptSuggestionWithSelection() TokenClassification.Prediction, " diff")), _.RightArrow, CheckThat(() => AssertScreenIs(1, TokenClassification.Command, "git", - TokenClassification.None, " diff")), + TokenClassification.None, " ", + TokenClassification.CommandArgument, "diff")), _.Ctrl_z, CheckThat(() => AssertCursorLeftIs(3)), _.Ctrl_f, CheckThat(() => AssertScreenIs(1, TokenClassification.Command, "git", - TokenClassification.None, " diff", + TokenClassification.None, " ", + TokenClassification.CommandArgument, "diff", TokenClassification.Prediction, " --cached")), // Perform visual selection and then accept suggestion. @@ -199,7 +214,8 @@ public void AcceptSuggestionWithSelection() }), _.RightArrow, CheckThat(() => AssertScreenIs(1, TokenClassification.Command, "git", - TokenClassification.None, " diff")), + TokenClassification.None, " ", + TokenClassification.CommandArgument, "diff")), // Perform visual selection and then accept next suggestion word. _.Ctrl_z, CheckThat(() => AssertScreenIs(1, @@ -214,7 +230,8 @@ public void AcceptSuggestionWithSelection() }), _.Ctrl_f, CheckThat(() => AssertScreenIs(1, TokenClassification.Command, "git", - TokenClassification.None, " diff", + TokenClassification.None, " ", + TokenClassification.CommandArgument, "diff", TokenClassification.Prediction, " --cached")) )); } @@ -270,15 +287,20 @@ public void HistoryEditsCanUndoProperly() Test("git checkout ", Keys( "git ch", CheckThat(() => AssertScreenIs(1, TokenClassification.Command, "git", - TokenClassification.None, " ch", + TokenClassification.None, " ", + TokenClassification.CommandArgument, "ch", TokenClassification.Prediction, "eckout -b branch origin/bbbb")), _.Ctrl_f, CheckThat(() => AssertScreenIs(1, TokenClassification.Command, "git", - TokenClassification.None, " checkout ", + TokenClassification.None, " ", + TokenClassification.CommandArgument, "checkout", + TokenClassification.None, " ", TokenClassification.Prediction, "-b branch origin/bbbb")), _.Enter, CheckThat(() => AssertScreenIs(1, TokenClassification.Command, "git", - TokenClassification.None, " checkout ")) + TokenClassification.None, " ", + TokenClassification.CommandArgument, "checkout", + TokenClassification.None, " ")) )); // Get the last command line from history, and revert the line. @@ -286,7 +308,9 @@ public void HistoryEditsCanUndoProperly() Test("", Keys( _.UpArrow, CheckThat(() => AssertScreenIs(1, TokenClassification.Command, "git", - TokenClassification.None, " checkout ")), + TokenClassification.None, " ", + TokenClassification.CommandArgument, "checkout", + TokenClassification.None, " ")), _.Escape)); } diff --git a/test/UnitTestReadLine.cs b/test/UnitTestReadLine.cs index 8abbef29..32f5b814 100644 --- a/test/UnitTestReadLine.cs +++ b/test/UnitTestReadLine.cs @@ -51,6 +51,9 @@ public enum TokenClassification Member, Selection, Prediction, + Attribute, + CommandArgument, + LoopLabel, } public abstract partial class ReadLine @@ -90,36 +93,42 @@ private enum KeyMode // so the tests aren't sensitive to tweaks to the default colors. internal static readonly ConsoleColor[] Colors = new [] { - /*None*/ ConsoleColor.DarkRed, - /*Comment*/ ConsoleColor.Blue, - /*Keyword*/ ConsoleColor.Cyan, - /*String*/ ConsoleColor.Gray, - /*Operator*/ ConsoleColor.Green, - /*Variable*/ ConsoleColor.Magenta, - /*Command*/ ConsoleColor.Red, - /*Parameter*/ ConsoleColor.White, - /*Type*/ ConsoleColor.Yellow, - /*Number*/ ConsoleColor.DarkBlue, - /*Member*/ ConsoleColor.DarkMagenta, - /*Selection*/ ConsoleColor.Black, - /*Prediction*/ConsoleColor.DarkGreen, + /*None*/ ConsoleColor.DarkRed, + /*Comment*/ ConsoleColor.Blue, + /*Keyword*/ ConsoleColor.Cyan, + /*String*/ ConsoleColor.Gray, + /*Operator*/ ConsoleColor.Green, + /*Variable*/ ConsoleColor.Magenta, + /*Command*/ ConsoleColor.Red, + /*Parameter*/ ConsoleColor.White, + /*Type*/ ConsoleColor.Yellow, + /*Number*/ ConsoleColor.DarkBlue, + /*Member*/ ConsoleColor.DarkMagenta, + /*Selection*/ ConsoleColor.Black, + /*Prediction*/ ConsoleColor.DarkGreen, + /*Attribute*/ ConsoleColor.DarkCyan, + /*CommandArgument*/ConsoleColor.DarkYellow, + /*LoopLabel*/ ConsoleColor.DarkGray, }; internal static readonly ConsoleColor[] BackgroundColors = new[] { - /*None*/ ConsoleColor.DarkGray, - /*Comment*/ ConsoleColor.DarkBlue, - /*Keyword*/ ConsoleColor.DarkCyan, - /*String*/ ConsoleColor.DarkGray, - /*Operator*/ ConsoleColor.DarkGreen, - /*Variable*/ ConsoleColor.DarkMagenta, - /*Command*/ ConsoleColor.DarkRed, - /*Parameter*/ ConsoleColor.DarkYellow, - /*Type*/ ConsoleColor.Black, - /*Number*/ ConsoleColor.Gray, - /*Member*/ ConsoleColor.Yellow, - /*Selection*/ ConsoleColor.Gray, - /*Prediction*/ConsoleColor.Cyan, + /*None*/ ConsoleColor.DarkGray, + /*Comment*/ ConsoleColor.DarkBlue, + /*Keyword*/ ConsoleColor.DarkCyan, + /*String*/ ConsoleColor.DarkGray, + /*Operator*/ ConsoleColor.DarkGreen, + /*Variable*/ ConsoleColor.DarkMagenta, + /*Command*/ ConsoleColor.DarkRed, + /*Parameter*/ ConsoleColor.DarkYellow, + /*Type*/ ConsoleColor.Black, + /*Number*/ ConsoleColor.Gray, + /*Member*/ ConsoleColor.Yellow, + /*Selection*/ ConsoleColor.Gray, + /*Prediction*/ ConsoleColor.Cyan, + /*Attribute*/ ConsoleColor.White, + /*CommandArgument*/ConsoleColor.Red, + /*LoopLabel*/ ConsoleColor.Magenta, }; class KeyHandler @@ -509,7 +518,8 @@ private void TestSetup(KeyMode keyMode, params KeyHandler[] keyHandlers) var tokenTypes = new[] { "Default", "Comment", "Keyword", "String", "Operator", "Variable", - "Command", "Parameter", "Type", "Number", "Member", "Selection", "Prediction" + "Command", "Parameter", "Type", "Number", "Member", "Selection", + "Prediction","Attribute","CommandArgument","LoopLabel" }; var colors = new Hashtable(); for (var i = 0; i < tokenTypes.Length; i++)