Examples/GitStatus.ps1

#Requires -Modules DynamicTitle

$modulePath = Join-Path (Get-Module DynamicTitle).ModuleBase 'DynamicTitle.psd1'

$initializationScript = {
    param ($modulePath)
    Import-Module $modulePath
}

$promptJob = Start-DTJobPromptCallback -ScriptBlock {
    (Get-Location).Path
}

$gitJob = Start-DTJobBackgroundThreadTimer -ScriptBlock {
    param ($promptJob)
    $location = Get-DTJobLatestOutput $promptJob
    if (-not $location)
    {
        return
    }

    Set-Location $location
    $branch = git branch --show-current
    if ($LastExitCode -ne 0)
    {
        # not a git repository
        return
    }
    if (-not $branch)
    {
        $branch = '❔'
    }

    $statusLines = git --no-optional-locks status -s
    $modifiedCount = 0
    $unversionedCount = 0
    foreach ($line in $statusLines)
    {
        $type = $line.Substring(0, 2)
        if (($type -eq ' M') -or ($type -eq ' R'))
        {
            $modifiedCount++
        }
        elseif ($type -eq '??')
        {
            $unversionedCount++
        }
    }

    $gitStatus = '🌿[{0}] ✏️{1}❔{2}' -f $branch, $modifiedCount, $unversionedCount
    $gitStatus, $location

} -IntervalMilliseconds 1000 -ArgumentList $promptJob -InitializationScript $initializationScript -InitializationArgumentList $modulePath

$scriptBlock = {
    param($promptJob, $gitJob)

    $location = Get-DTJobLatestOutput $promptJob
    $gitStatus, $gitLocation = Get-DTJobLatestOutput $gitJob

    if ($location)
    {
        $folderName = Split-Path $location -Leaf
    }
    if ($gitLocation -ne $location)
    {
        $gitStatus = $null
    }

    '🗂️{0} {1}' -f $folderName, $gitStatus
}

$params = @{
    ScriptBlock = $scriptBlock
    ArgumentList = $promptJob, $gitJob
    InitializationScript = $initializationScript
    InitializationArgumentList = $modulePath
}

Start-DTTitle @params