mirror of
https://github.com/cmderdev/cmder.git
synced 2024-11-10 09:49:12 +08:00
c466698d6b
In an effort to speed up the prompt we will only call write-vcsstatus if there is a .git folder in the current or any parent path recursively. As this function is called every new prompt line it needs to be as fast as possible.
53 lines
1.4 KiB
PowerShell
53 lines
1.4 KiB
PowerShell
# Add Cmder modules directory to the autoload path.
|
|
$CmderModulePath = Join-path $PSScriptRoot "psmodules/"
|
|
|
|
if( -not $env:PSModulePath.Contains($CmderModulePath) ){
|
|
$env:PSModulePath = $env:PSModulePath.Insert(0, "$CmderModulePath;")
|
|
}
|
|
|
|
try {
|
|
Get-command -Name "git" -ErrorAction Stop >$null
|
|
Import-Module -Name "posh-git" -ErrorAction Stop >$null
|
|
$gitStatus = $true
|
|
} catch {
|
|
Write-Warning "Missing git support"
|
|
$gitStatus = $false
|
|
}
|
|
|
|
function checkGit($Path) {
|
|
if (Test-Path -Path (Join-Path $Path '.git/') ) {
|
|
Write-VcsStatus
|
|
return
|
|
}
|
|
$SplitPath = split-path $path
|
|
if ($SplitPath) {
|
|
checkGit($SplitPath)
|
|
}
|
|
}
|
|
|
|
# Set up a Cmder prompt, adding the git prompt parts inside git repos
|
|
function global:prompt {
|
|
$realLASTEXITCODE = $LASTEXITCODE
|
|
$Host.UI.RawUI.ForegroundColor = "White"
|
|
Write-Host $pwd.ProviderPath -NoNewLine -ForegroundColor Green
|
|
if($gitStatus){
|
|
checkGit($pwd.ProviderPath)
|
|
}
|
|
$global:LASTEXITCODE = $realLASTEXITCODE
|
|
Write-Host "`nλ" -NoNewLine -ForegroundColor "DarkGray"
|
|
return " "
|
|
}
|
|
|
|
# Load special features come from posh-git
|
|
if ($gitStatus) {
|
|
Enable-GitColors
|
|
Start-SshAgent -Quiet
|
|
}
|
|
|
|
# Move to the wanted location
|
|
if (Test-Path Env:\CMDER_START) {
|
|
Set-Location -Path $Env:CMDER_START
|
|
} elseif ($Env:CMDER_ROOT -and $Env:CMDER_ROOT.StartsWith($pwd)) {
|
|
Set-Location -Path $Env:USERPROFILE
|
|
}
|