[O] RGB prompt

This commit is contained in:
2026-05-09 23:14:19 +00:00
parent 1808ec04b8
commit 3f9cda6402
+73 -26
View File
@@ -644,7 +644,7 @@ function Get-PromptPrState {
$prLine = Invoke-ExternalCommand gh pr list --head $Branch --state all --limit 20 --json number,state,updatedAt --jq $jq 2>$null
$prNumber = $prLine | Select-Object -First 1
$prState = $prLine | Select-Object -Skip 1 -First 1
$prColor = if ($prState -eq 'MERGED') { 'Magenta' } else { 'Green' }
$prColor = if ($prState -eq 'MERGED') { 'AF87FF' } else { '00FF00' }
$global:__PwshRcPromptPrCacheKey = $cacheKey
$global:__PwshRcPromptPrCacheTime = $now
@@ -712,7 +712,7 @@ function Get-GitPromptState {
return [pscustomobject]@{
Segment = $segment
Color = if ($changed) { 'Yellow' } else { 'DarkGray' }
Color = if ($changed) { 'FFFF00' } else { '777777' }
Pr = $pr
}
}
@@ -732,7 +732,7 @@ function Get-JjPromptState {
return [pscustomobject]@{
Segment = "jj:$info"
Color = if ($diffSummary) { 'Yellow' } else { 'DarkGray' }
Color = if ($diffSummary) { 'FFFF00' } else { '777777' }
Pr = Get-PromptPrState $bookmark
}
}
@@ -767,54 +767,101 @@ function pcolor {
}
}
function Convert-PromptRgbColor {
param([Parameter(Mandatory = $true)][string]$Color)
$namedColors = @{
blue = '0000FF'
cyan = '55CDFC'
green = '00FF00'
gray = '777777'
magenta = 'F7A8B8'
pink = 'F7A8B8'
purple = 'AF87FF'
white = 'FFFFFF'
yellow = 'FFFF00'
}
$normalized = $Color.Trim().TrimStart([char]'#')
$lower = $normalized.ToLowerInvariant()
if ($namedColors.ContainsKey($lower)) {
$normalized = $namedColors[$lower]
}
if ($normalized -notmatch '^[0-9A-Fa-f]{6}$') { return $null }
return [pscustomobject]@{
R = [Convert]::ToInt32($normalized.Substring(0, 2), 16)
G = [Convert]::ToInt32($normalized.Substring(2, 2), 16)
B = [Convert]::ToInt32($normalized.Substring(4, 2), 16)
}
}
function Write-PromptText {
param(
[AllowEmptyString()][string]$Text,
[Parameter(Mandatory = $true)][string]$Color
)
$rgb = Convert-PromptRgbColor $Color
if (-not $rgb) {
[Console]::Write($Text)
return
}
$esc = [char]27
[Console]::Write("$esc[38;2;$($rgb.R);$($rgb.G);$($rgb.B)m$Text$esc[0m")
}
function global:prompt {
$hostName = [System.Net.Dns]::GetHostName() -replace '^HyDEV-', ''
$date = Get-Date
Write-Host ''
[Console]::WriteLine()
if ($hostName -eq 'HyDEV') {
Write-Host ($date.ToString('ddd MM-dd HH:mm')) -NoNewline -ForegroundColor Magenta
Write-Host ' ' -NoNewline
Write-PromptText ($date.ToString('ddd MM-dd HH:mm')) 'F7A8B8'
[Console]::Write(' ')
} else {
Write-Host ($date.ToString('ddd ')) -NoNewline -ForegroundColor Cyan
Write-Host ($date.ToString('MM-')) -NoNewline -ForegroundColor Magenta
Write-Host ($date.ToString('dd ')) -NoNewline -ForegroundColor White
Write-Host ($date.ToString('HH:')) -NoNewline -ForegroundColor Magenta
Write-Host ($date.ToString('mm ')) -NoNewline -ForegroundColor Cyan
Write-PromptText ($date.ToString('ddd ')) '55CDFC'
Write-PromptText ($date.ToString('MM-')) 'F7A8B8'
Write-PromptText ($date.ToString('dd ')) 'FFFFFF'
Write-PromptText ($date.ToString('HH:')) 'F7A8B8'
Write-PromptText ($date.ToString('mm ')) '55CDFC'
}
if ($hostName -eq 'HyDEV') {
Write-Host 'H' -NoNewline -ForegroundColor Cyan
Write-Host 'y' -NoNewline -ForegroundColor Magenta
Write-Host 'D' -NoNewline -ForegroundColor White
Write-Host 'E' -NoNewline -ForegroundColor Magenta
Write-Host 'V ' -NoNewline -ForegroundColor Cyan
Write-PromptText 'H' '55CDFC'
Write-PromptText 'y' 'F7A8B8'
Write-PromptText 'D' 'FFFFFF'
Write-PromptText 'E' 'F7A8B8'
Write-PromptText 'V ' '55CDFC'
} else {
Write-Host "$hostName " -NoNewline -ForegroundColor Blue
Write-PromptText "$hostName " '0000FF'
}
if ($global:__PwshRcGitIdSegment) {
Write-Host $global:__PwshRcGitIdSegment -NoNewline -ForegroundColor Yellow
Write-PromptText $global:__PwshRcGitIdSegment 'FFFF00'
} else {
$userName = if ($env:USERNAME) { $env:USERNAME } else { $env:USER }
Write-Host "$userName " -NoNewline -ForegroundColor Yellow
Write-PromptText "$userName " 'FFFF00'
}
if ($global:__PwshRcProxySegment) {
Write-Host $global:__PwshRcProxySegment -NoNewline -ForegroundColor Green
Write-PromptText $global:__PwshRcProxySegment '00FF00'
}
Write-Host (pwdd) -NoNewline
[Console]::Write((pwdd))
$vcs = Get-VcsPromptState
if ($vcs) {
Write-Host ' [' -NoNewline
Write-Host $vcs.Segment -NoNewline -ForegroundColor $vcs.Color
[Console]::Write(' ')
Write-PromptText '[' $vcs.Color
Write-PromptText $vcs.Segment $vcs.Color
if ($vcs.Pr) {
Write-Host ' ' -NoNewline -ForegroundColor $vcs.Color
Write-Host "#$($vcs.Pr.Number)" -NoNewline -ForegroundColor $vcs.Pr.Color
Write-PromptText ' ' $vcs.Color
Write-PromptText "#$($vcs.Pr.Number)" $vcs.Pr.Color
}
Write-Host ']' -NoNewline -ForegroundColor $vcs.Color
Write-PromptText ']' $vcs.Color
}
return "`n> "