More color fixes: background colors set appropriately, and fix the

silly window-shrinking bug. (Cause unknown.)
This commit is contained in:
John Doty 2012-04-05 18:45:12 -07:00
parent c23c4f7f20
commit a68b177143
2 changed files with 98 additions and 65 deletions

View file

@ -52,6 +52,12 @@ function Add-ConsoleHelper()
throw Marshal.GetExceptionForHR( Marshal.GetHRForLastWin32Error() ); throw Marshal.GetExceptionForHR( Marshal.GetHRForLastWin32Error() );
} }
// This appears to correct a bug in the implementation of
// SetConsoleScreenBufferInfoEx.
//
info.srWindow.Right++;
info.srWindow.Bottom++;
info.ColorTable[(int)color] = new COLORREF( newColor ); info.ColorTable[(int)color] = new COLORREF( newColor );
if ( !SetConsoleScreenBufferInfoEx( hConsole, ref info ) ) if ( !SetConsoleScreenBufferInfoEx( hConsole, ref info ) )
{ {
@ -69,10 +75,10 @@ function Add-ConsoleHelper()
[StructLayout( LayoutKind.Sequential )] [StructLayout( LayoutKind.Sequential )]
internal struct SMALL_RECT internal struct SMALL_RECT
{ {
internal short Left; internal ushort Left;
internal short Top; internal ushort Top;
internal short Right; internal ushort Right;
internal short Bottom; internal ushort Bottom;
} }
[StructLayout( LayoutKind.Sequential )] [StructLayout( LayoutKind.Sequential )]
@ -108,10 +114,10 @@ function Add-ConsoleHelper()
internal int cbSize; internal int cbSize;
internal COORD dwSize; internal COORD dwSize;
internal COORD dwCursorPosition; internal COORD dwCursorPosition;
internal ushort wAttributes; internal short wAttributes;
internal SMALL_RECT srWindow; internal SMALL_RECT srWindow;
internal COORD dwMaximumWindowSize; internal COORD dwMaximumWindowSize;
internal ushort wPopupAttributes; internal short wPopupAttributes;
[MarshalAs( UnmanagedType.Bool )] [MarshalAs( UnmanagedType.Bool )]
internal bool bFullscreenSupported; internal bool bFullscreenSupported;
@ -127,68 +133,95 @@ function Add-ConsoleHelper()
# These are the 16 colors for our palette. # These are the 16 colors for our palette.
Add-Type -AssemblyName System.Drawing Add-Type -AssemblyName System.Drawing
$base03 = [System.Drawing.Color]::FromArgb(0x002b36)
$base02 = [System.Drawing.Color]::FromArgb(0x073642) # Here's the solarized table...
$base01 = [System.Drawing.Color]::FromArgb(0x586e75) #
$base00 = [System.Drawing.Color]::FromArgb(0x657b83) # SOLARIZED HEX 16/8 TERMCOL XTERM/HEX L*A*B RGB HSB
$base0 = [System.Drawing.Color]::FromArgb(0x839496) # --------- ------- ---- ------- ----------- ---------- ----------- -----------
$base1 = [System.Drawing.Color]::FromArgb(0x93a1a1) $base03 = "#002b36" # 8/4 brblack 234 #1c1c1c 15 -12 -12 0 43 54 193 100 21
$base2 = [System.Drawing.Color]::FromArgb(0xeee8d5) $base02 = "#073642" # 0/4 black 235 #262626 20 -12 -12 7 54 66 192 90 26
$base3 = [System.Drawing.Color]::FromArgb(0xfdf6e3) $base01 = "#586e75" # 10/7 brgreen 240 #585858 45 -07 -07 88 110 117 194 25 46
$yellow = [System.Drawing.Color]::FromArgb(0xb58900) $base00 = "#657b83" # 11/7 bryellow 241 #626262 50 -07 -07 101 123 131 195 23 51
$orange = [System.Drawing.Color]::FromArgb(0xcb4b16) $base0 = "#839496" # 12/6 brblue 244 #808080 60 -06 -03 131 148 150 186 13 59
$red = [System.Drawing.Color]::FromArgb(0xdc322f) $base1 = "#93a1a1" # 14/4 brcyan 245 #8a8a8a 65 -05 -02 147 161 161 180 9 63
$magenta = [System.Drawing.Color]::FromArgb(0xd33682) $base2 = "#eee8d5" # 7/7 white 254 #e4e4e4 92 -00 10 238 232 213 44 11 93
$violet = [System.Drawing.Color]::FromArgb(0x6c71c4) $base3 = "#fdf6e3" # 15/7 brwhite 230 #ffffd7 97 00 10 253 246 227 44 10 99
$blue = [System.Drawing.Color]::FromArgb(0x268bd2) $yellow = "#b58900" # 3/3 yellow 136 #af8700 60 10 65 181 137 0 45 100 71
$cyan = [System.Drawing.Color]::FromArgb(0x2aa198) $orange = "#cb4b16" # 9/3 brred 166 #d75f00 50 50 55 203 75 22 18 89 80
$green = [System.Drawing.Color]::FromArgb(0x859900) $red = "#dc322f" # 1/1 red 160 #d70000 50 65 45 220 50 47 1 79 86
$magenta = "#d33682" # 5/5 magenta 125 #af005f 50 65 -05 211 54 130 331 74 83
$violet = "#6c71c4" # 13/5 brmagenta 61 #5f5faf 50 15 -45 108 113 196 237 45 77
$blue = "#268bd2" # 4/4 blue 33 #0087ff 55 -10 -45 38 139 210 205 82 82
$cyan = "#2aa198" # 6/6 cyan 37 #00afaf 60 -35 -05 42 161 152 175 74 63
$green = "#859900" # 2/2 green 64 #5f8700 60 -20 65 133 153 0 68 100 60
function Set-SolarizedColors([switch]$Light, [switch]$Dark) function Set-SolarizedColors([switch]$Light, [switch]$Dark)
{
if ( (-not $Light) -and (-not $Dark) )
{
$Light = $true
}
if ($Host.Name -eq "ConsoleHost")
{ {
# Redefine the standard console colors to have the Solarized-Light # Redefine the standard console colors to have the Solarized-Light
# palette. # palette.
# #
# Note that we're doing funny things here, like setting black to # TODO: Check this out as a color palette...
# white, because we are trying to make it so that programs that
# don't redefine the palette still get a coherent scheme.
# #
# We try to map with cognates, but it's not easy.... if ([ConsoleColorHelper]::GetStandardConsoleColor([ConsoleColor]::DarkGray) -ne $base03)
# {
[ConsoleColorHelper]::SetStandardConsoleColor([ConsoleColor]::Black, $base03) [ConsoleColorHelper]::SetStandardConsoleColor([ConsoleColor]::DarkGray, $base03)
[ConsoleColorHelper]::SetStandardConsoleColor([ConsoleColor]::DarkGray, $base02) [ConsoleColorHelper]::SetStandardConsoleColor([ConsoleColor]::Black, $base02)
[ConsoleColorHelper]::SetStandardConsoleColor([ConsoleColor]::Gray, $base01) [ConsoleColorHelper]::SetStandardConsoleColor([ConsoleColor]::Green, $base01)
[ConsoleColorHelper]::SetStandardConsoleColor([ConsoleColor]::DarkBlue, $base00) [ConsoleColorHelper]::SetStandardConsoleColor([ConsoleColor]::Yellow, $base00)
[ConsoleColorHelper]::SetStandardConsoleColor([ConsoleColor]::DarkGreen, $base0) [ConsoleColorHelper]::SetStandardConsoleColor([ConsoleColor]::Blue, $base0)
[ConsoleColorHelper]::SetStandardConsoleColor([ConsoleColor]::DarkCyan, $base1) [ConsoleColorHelper]::SetStandardConsoleColor([ConsoleColor]::Cyan, $base1)
[ConsoleColorHelper]::SetStandardConsoleColor([ConsoleColor]::DarkRed, $base2) [ConsoleColorHelper]::SetStandardConsoleColor([ConsoleColor]::Gray, $base2)
[ConsoleColorHelper]::SetStandardConsoleColor([ConsoleColor]::White, $base3) [ConsoleColorHelper]::SetStandardConsoleColor([ConsoleColor]::White, $base3)
[ConsoleColorHelper]::SetStandardConsoleColor([ConsoleColor]::Yellow, $yellow) [ConsoleColorHelper]::SetStandardConsoleColor([ConsoleColor]::DarkYellow, $yellow)
[ConsoleColorHelper]::SetStandardConsoleColor([ConsoleColor]::DarkYellow, $orange) [ConsoleColorHelper]::SetStandardConsoleColor([ConsoleColor]::Red, $orange)
[ConsoleColorHelper]::SetStandardConsoleColor([ConsoleColor]::Red, $red) [ConsoleColorHelper]::SetStandardConsoleColor([ConsoleColor]::DarkRed, $red)
[ConsoleColorHelper]::SetStandardConsoleColor([ConsoleColor]::Magenta, $magenta) [ConsoleColorHelper]::SetStandardConsoleColor([ConsoleColor]::DarkMagenta, $magenta)
[ConsoleColorHelper]::SetStandardConsoleColor([ConsoleColor]::DarkMagenta, $violet) [ConsoleColorHelper]::SetStandardConsoleColor([ConsoleColor]::Magenta, $violet)
[ConsoleColorHelper]::SetStandardConsoleColor([ConsoleColor]::Blue, $blue) [ConsoleColorHelper]::SetStandardConsoleColor([ConsoleColor]::DarkBlue, $blue)
[ConsoleColorHelper]::SetStandardConsoleColor([ConsoleColor]::Cyan, $cyan) [ConsoleColorHelper]::SetStandardConsoleColor([ConsoleColor]::DarkCyan, $cyan)
[ConsoleColorHelper]::SetStandardConsoleColor([ConsoleColor]::Green, $green) [ConsoleColorHelper]::SetStandardConsoleColor([ConsoleColor]::DarkGreen, $green)
}
if ($Light) if ($Light)
{ {
$themefg = [ConsoleColor]::White # $base3 $Host.UI.RawUI.BackgroundColor = [ConsoleColor]::White
$themebg = [ConsoleColor]::DarkBlue # $base00 $Host.UI.RawUI.ForegroundColor = [ConsoleColor]::Yellow
$Host.PrivateData.VerboseForegroundColor = [ConsoleColor]::Cyan
$Host.PrivateData.ProgressBackgroundColor = [ConsoleColor]::DarkGray
$Host.PrivateData.ProgressForegroundColor = [ConsoleColor]::Blue
}
else
{
$Host.UI.RawUI.BackgroundColor = [ConsoleColor]::DarkGray
$Host.UI.RawUI.ForegroundColor = [ConsoleColor]::Blue
$Host.PrivateData.VerboseForegroundColor = [ConsoleColor]::Green
$Host.PrivateData.ProgressBackgroundColor = [ConsoleColor]::White
$Host.PrivateData.ProgressForegroundColor = [ConsoleColor]::Yellow
} }
if ($Dark) $Host.PrivateData.ErrorForegroundColor = [ConsoleColor]::DarkRed
{ $Host.PrivateData.WarningForegroundColor = [ConsoleColor]::DarkYellow
$themefg = [ConsoleColor]::DarkGreen # $base0 $Host.PrivateData.DebugForegroundColor = [ConsoleColor]::DarkBlue
$themebg = [ConsoleColor]::Black # $base03
}
if ($Light -or $Dark) $Host.PrivateData.ErrorBackgroundColor =
{ $Host.PrivateData.WarningBackgroundColor =
(Get-Host).UI.RawUI.BackgroundColor = $themebg $Host.PrivateData.DebugBackgroundColor =
(Get-Host).UI.RawUI.ForegroundColor = $themefg $Host.PrivateData.VerboseBackgroundColor =
$Host.UI.RawUI.BackgroundColor
Clear-Host
} }
} }

View file

@ -33,9 +33,9 @@ function prompt
# solarized colors. # solarized colors.
# #
$cdelim = [ConsoleColor]::DarkCyan $cdelim = [ConsoleColor]::DarkCyan
$chost = [ConsoleColor]::Green $chost = [ConsoleColor]::DarkGreen
$cloc = $csym = [ConsoleColor]::Cyan $cloc = $csym = [ConsoleColor]::DarkCyan
if (-not $ok) { $csym = [ConsoleColor]::Red; } if (-not $ok) { $csym = [ConsoleColor]::DarkRed; }
write-host "$([char]0x0A7) " -n -f $csym write-host "$([char]0x0A7) " -n -f $csym
write-host ([net.dns]::GetHostName()) -n -f $chost write-host ([net.dns]::GetHostName()) -n -f $chost