pwsh-conf/Modules/posh-venv/posh-venv.psm1
2022-08-25 13:39:27 +02:00

56 lines
1.6 KiB
PowerShell

if (Get-Module posh-venv) { return }
function CompleteVenvName {
param($commandName, $parameterName, $wordToComplete,
$commandAst, $fakeBoundParameters)
Get-ChildItem -Directory $env:WORKON_HOME
| ForEach-Object { $_.Name }
| Where-Object { $_ -Like "$wordToComplete*" }
| Sort-Object
}
function venv {
[CmdletBinding()]
param(
[Parameter(Mandatory = $true)]
[ValidateSet("list", "activate", "deactivate")]
$command,
[Parameter(Mandatory = $false)]
[ArgumentCompleter({ CompleteVenvName @args })]
$venv)
switch ($command) {
"list" {
@(Get-ChildItem -Directory $env:WORKON_HOME | ForEach-Object {
$name = $_.Name
$version = (& "$_/Scripts/python.exe" --version).Replace("Python ", "")
@{Name = $name; Version = $version; Path = $_ }
}) | ForEach-Object {
New-Object object | Add-Member -NotePropertyMembers $_ -PassThru
}
}
"activate" {
if (Test-Path "$env:WORKON_HOME/$venv/Scripts/activate.ps1") {
& "$env:WORKON_HOME/$venv/Scripts/activate.ps1"
}
elseif ((!$venv -Or !$venv.Trim()) -And (Test-Path "venv/Scripts/activate.ps1")) {
& "venv/Scripts/activate.ps1"
}
else {
Write-Error "Environment '${venv}' does not exists."
}
}
"deactivate" {
deactivate
}
default {
Write-Error "Unknown venv command ${args[0]}."
}
}
}