Last active
November 13, 2015 01:45
-
-
Save JamesSkemp/cce67fa7ee4c204b7aff to your computer and use it in GitHub Desktop.
Customized GitHub prompt file.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Inspired by Mark Embling | |
# http://www.markembling.info/view/my-ideal-powershell-prompt-with-git-integration | |
$global:GitPromptSettings = New-Object PSObject -Property @{ | |
DefaultForegroundColor = $Host.UI.RawUI.ForegroundColor | |
BeforeText = ' [' | |
BeforeForegroundColor = [ConsoleColor]::Yellow | |
BeforeBackgroundColor = $Host.UI.RawUI.BackgroundColor | |
DelimText = ' |' | |
DelimForegroundColor = [ConsoleColor]::Yellow | |
DelimBackgroundColor = $Host.UI.RawUI.BackgroundColor | |
AfterText = ']' | |
AfterForegroundColor = [ConsoleColor]::Yellow | |
AfterBackgroundColor = $Host.UI.RawUI.BackgroundColor | |
BranchForegroundColor = [ConsoleColor]::Cyan | |
BranchBackgroundColor = $Host.UI.RawUI.BackgroundColor | |
BranchAheadForegroundColor = [ConsoleColor]::Green | |
BranchAheadBackgroundColor = $Host.UI.RawUI.BackgroundColor | |
BranchBehindForegroundColor = [ConsoleColor]::Red | |
BranchBehindBackgroundColor = $Host.UI.RawUI.BackgroundColor | |
BranchBehindAndAheadForegroundColor = [ConsoleColor]::Yellow | |
BranchBehindAndAheadBackgroundColor = $Host.UI.RawUI.BackgroundColor | |
BeforeIndexText = "" | |
BeforeIndexForegroundColor= [ConsoleColor]::DarkGreen | |
BeforeIndexBackgroundColor= $Host.UI.RawUI.BackgroundColor | |
IndexForegroundColor = [ConsoleColor]::Cyan | |
IndexBackgroundColor = $Host.UI.RawUI.BackgroundColor | |
WorkingForegroundColor = [ConsoleColor]::Yellow | |
WorkingBackgroundColor = $Host.UI.RawUI.BackgroundColor | |
UntrackedText = '' | |
UntrackedForegroundColor = [ConsoleColor]::Yellow | |
UntrackedBackgroundColor = $Host.UI.RawUI.BackgroundColor | |
ShowStatusWhenZero = $true | |
AutoRefreshIndex = $true | |
EnablePromptStatus = !$Global:GitMissing | |
EnableFileStatus = $true | |
RepositoriesInWhichToDisableFileStatus = @( ) # Array of repository paths | |
DescribeStyle = '' | |
EnableWindowTitle = 'posh~git ~ ' | |
Debug = $false | |
} | |
$WindowTitleSupported = $true | |
if (Get-Module NuGet) { | |
$WindowTitleSupported = $false | |
} | |
function Write-Prompt($Object, $ForegroundColor, $BackgroundColor = -1) { | |
if ($BackgroundColor -lt 0) { | |
Write-Host $Object -NoNewLine -ForegroundColor $ForegroundColor | |
} else { | |
Write-Host $Object -NoNewLine -ForegroundColor $ForegroundColor -BackgroundColor $BackgroundColor | |
} | |
} | |
function Write-GitStatus($status) { | |
$s = $global:GitPromptSettings | |
if ($status -and $s) { | |
Write-Prompt $s.BeforeText -BackgroundColor $s.BeforeBackgroundColor -ForegroundColor $s.BeforeForegroundColor | |
$branchBackgroundColor = $s.BranchBackgroundColor | |
$branchForegroundColor = $s.BranchForegroundColor | |
if ($status.BehindBy -gt 0 -and $status.AheadBy -gt 0) { | |
# We are behind and ahead of remote | |
$branchBackgroundColor = $s.BranchBehindAndAheadBackgroundColor | |
$branchForegroundColor = $s.BranchBehindAndAheadForegroundColor | |
} elseif ($status.BehindBy -gt 0) { | |
# We are behind remote | |
$branchBackgroundColor = $s.BranchBehindBackgroundColor | |
$branchForegroundColor = $s.BranchBehindForegroundColor | |
} elseif ($status.AheadBy -gt 0) { | |
# We are ahead of remote | |
$branchBackgroundColor = $s.BranchAheadBackgroundColor | |
$branchForegroundColor = $s.BranchAheadForegroundColor | |
} | |
Write-Prompt $status.Branch -BackgroundColor $branchBackgroundColor -ForegroundColor $branchForegroundColor | |
if($s.EnableFileStatus -and $status.HasIndex) { | |
Write-Prompt $s.BeforeIndexText -BackgroundColor $s.BeforeIndexBackgroundColor -ForegroundColor $s.BeforeIndexForegroundColor | |
if($s.ShowStatusWhenZero -or $status.Index.Added) { | |
Write-Prompt " +$($status.Index.Added.Count)" -BackgroundColor $s.IndexBackgroundColor -ForegroundColor $s.IndexForegroundColor | |
} | |
if($s.ShowStatusWhenZero -or $status.Index.Modified) { | |
Write-Prompt " ~$($status.Index.Modified.Count)" -BackgroundColor $s.IndexBackgroundColor -ForegroundColor $s.IndexForegroundColor | |
} | |
if($s.ShowStatusWhenZero -or $status.Index.Deleted) { | |
Write-Prompt " -$($status.Index.Deleted.Count)" -BackgroundColor $s.IndexBackgroundColor -ForegroundColor $s.IndexForegroundColor | |
} | |
if ($status.Index.Unmerged) { | |
Write-Prompt " !$($status.Index.Unmerged.Count)" -BackgroundColor $s.IndexBackgroundColor -ForegroundColor $s.IndexForegroundColor | |
} | |
if($status.HasWorking) { | |
Write-Prompt $s.DelimText -BackgroundColor $s.DelimBackgroundColor -ForegroundColor $s.DelimForegroundColor | |
} | |
} | |
if($s.EnableFileStatus -and $status.HasWorking) { | |
if($s.ShowStatusWhenZero -or $status.Working.Added) { | |
Write-Prompt " +$($status.Working.Added.Count)" -BackgroundColor $s.WorkingBackgroundColor -ForegroundColor $s.WorkingForegroundColor | |
} | |
if($s.ShowStatusWhenZero -or $status.Working.Modified) { | |
Write-Prompt " ~$($status.Working.Modified.Count)" -BackgroundColor $s.WorkingBackgroundColor -ForegroundColor $s.WorkingForegroundColor | |
} | |
if($s.ShowStatusWhenZero -or $status.Working.Deleted) { | |
Write-Prompt " -$($status.Working.Deleted.Count)" -BackgroundColor $s.WorkingBackgroundColor -ForegroundColor $s.WorkingForegroundColor | |
} | |
if ($status.Working.Unmerged) { | |
Write-Prompt " !$($status.Working.Unmerged.Count)" -BackgroundColor $s.WorkingBackgroundColor -ForegroundColor $s.WorkingForegroundColor | |
} | |
} | |
if ($status.HasUntracked) { | |
Write-Prompt $s.UntrackedText -BackgroundColor $s.UntrackedBackgroundColor -ForegroundColor $s.UntrackedForegroundColor | |
} | |
Write-Prompt $s.AfterText -BackgroundColor $s.AfterBackgroundColor -ForegroundColor $s.AfterForegroundColor | |
if ($WindowTitleSupported -and $s.EnableWindowTitle) { | |
if( -not $Global:PreviousWindowTitle ) { | |
$Global:PreviousWindowTitle = $Host.UI.RawUI.WindowTitle | |
} | |
$repoName = Split-Path -Leaf (Split-Path $status.GitDir) | |
$prefix = if ($s.EnableWindowTitle -is [string]) { $s.EnableWindowTitle } else { '' } | |
$Host.UI.RawUI.WindowTitle = "$prefix$repoName [$($status.Branch)]" | |
} | |
} elseif ( $Global:PreviousWindowTitle ) { | |
$Host.UI.RawUI.WindowTitle = $Global:PreviousWindowTitle | |
} | |
} | |
if(!(Test-Path Variable:Global:VcsPromptStatuses)) { | |
$Global:VcsPromptStatuses = @() | |
} | |
function Global:Write-VcsStatus { $Global:VcsPromptStatuses | foreach { & $_ } } | |
# Add scriptblock that will execute for Write-VcsStatus | |
$Global:VcsPromptStatuses += { | |
$Global:GitStatus = Get-GitStatus | |
Write-GitStatus $GitStatus | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment