ShellServer.psm1
$LocalHost = '127.0.0.1' $Port = 5432 $Enc = [System.Text.Encoding]::UTF8 $Sock = New-Object System.Net.Sockets.UdpClient $Sock.Connect($LocalHost, $Port) $Address = [System.Net.IpAddress]::Parse($LocalHost) $End = New-Object System.Net.IPEndPoint $Address, $Port $Buffer = $Enc.GetBytes('#Init') $Sock.Send($Buffer) > $nul $esc = $([char]27) $cyan = '[96m' $reset = '[0m' $Symbols = @{ 'Python' = '🐍' 'Branch' = '' # untracked = ?, staged = + } function global:prompt { $origLastError = $? if (-Not (Test-Path 'ENV:VIRTUAL_ENV')) { Write-Host "" # new line from previous prompt } $Buffer = $Enc.GetBytes('%' + (Get-Location).Path) $Sock.Send($Buffer) > $nul $response = $Enc.GetString($Sock.Receive([ref] $End)) if ($response -Like '*&*') { $arr = $response.Split('&') $cwd = $arr[0] Write-Host "$esc$cyan$cwd$esc$reset" -NoNewLine foreach ($entry in $arr[1..$arr.Length]){ $parcials = $entry.Split(';') $symbol = $Symbols[$parcials[0]] $version = $parcials[1] $color = $DefaultThemeColors['Command'] Write-Host " [$symbol $color$version$esc$reset] " -NoNewLine } } else { $cwd = $response Write-Host "$esc$cyan$cwd$esc$reset" -NoNewLine } Write-Host '' if ($origLastError) { $color = 'Green' } else { $color = 'Red' } Write-Host "❯" -NoNewLine -ForegroundColor $color ' ' } function global:p { $Buffer = $Enc.GetBytes('!' + $args -join ' ') $Sock.Send($Buffer) > $nul $response = $Enc.GetString($Sock.Receive([ref] $End)) if ($response) { Invoke-Expression "Set-Location '$response'" } else { Write-Host "ShellServer: No match found." } } function global:pz { $Buffer = $Enc.GetBytes('*') $Sock.Send($Buffer) > $nul $response = $Enc.GetString($Sock.Receive([ref] $End)) $query = $args -Join ' ' if ($query) { $answer = Write-Output $response | fzf --height=~20 --layout=reverse -q $query } else { $answer = Write-Output $response | fzf --height=~20 --layout=reverse } $Sock.Send($Enc.GetBytes('*' + $answer)) > $nul Invoke-Expression "Set-Location $answer" } Register-EngineEvent PowerShell.Exiting -action { $Sock = New-Object System.Net.Sockets.UdpClient $Sock.Connect('127.0.0.1', 5432) $Sock.Send([System.Text.Encoding]::UTF8.GetBytes('#Exit')) } > $nul Export-ModuleMember -Function prompt Export-ModuleMember -Function p Export-ModuleMember -Function pz |