Private/Set-TokenColorConfiguration.ps1
function Set-TokenColorConfiguration { # [Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseShouldProcessForStateChangingFunctions', '')] param( [Parameter(Mandatory=$false)] $TokenColors, [Parameter(Mandatory=$false)] [switch] $Reset ) if(Get-Module PSReadLine) { if ($Reset.IsPresent -or !$TokenColors) { # Set-PSReadlineOption -ResetTokenColors could be used, but is set to be deprecated in 2.0 $TokenColors = [PSCustomObject]@{ 'ContinuationPrompt' = 'Gray' 'DefaultToken' = 'Gray' 'Comment' = 'DarkGreen' 'Keyword' = 'Green' 'String' = 'DarkCyan' 'Operator' = 'DarkGray' 'Variable' = 'Green' 'Command' = 'Yellow' 'Parameter' = 'DarkGray' 'Type' = 'Gray' 'Number' = 'White' 'Member' = 'White' 'Emphasis' = 'Cyan' 'Error' = 'Red' } } # Breaking changes are coming in PSReadLine 2.0. Colors should be set via the -Color parameter with a hashtable foreach ($token in @('ContinuationPrompt','DefaultToken','Comment','Keyword','String','Operator','Variable','Command','Parameter','Type','Number','Member','Emphasis','Error')) { if (Get-Member $token -InputObject $TokenColors) { if ($token -in @('ContinuationPrompt','Emphasis','Error')) { $expression = "Set-PSReadlineOption -$($token)ForegroundColor $($TokenColors.($token))" Invoke-Expression $expression } elseif ($token -eq 'DefaultToken') { Set-PSReadlineOption 'None' -ForegroundColor $TokenColors.($token) } else { Set-PSReadlineOption $token -ForegroundColor $TokenColors.($token) } } } } } |