Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
46 changes: 46 additions & 0 deletions templates/powershell.txt
Original file line number Diff line number Diff line change
Expand Up @@ -144,6 +144,52 @@ function global:__zoxide_zi {
Set-Alias -Name {{cmd}} -Value __zoxide_z -Option AllScope -Scope Global -Force
Set-Alias -Name {{cmd}}i -Value __zoxide_zi -Option AllScope -Scope Global -Force

filter __zoxide_escapeStringWithSpecialChars {
$_ -replace '\s|#|@|\$|;|,|''|\{|\}|\(|\)|"|`|\||<|>|&','`$&'
}

Register-ArgumentCompleter -Native -CommandName "{{cmd}}" -ScriptBlock {
param(
$WordToComplete,
$CommandAst,
$CursorPosition
)

# Get the current command line and convert into a string
$Command = $CommandAst.CommandElements
$Command = "$Command"

# The user could have moved the cursor backwards on the command-line.
# We only show completions when the cursor is at the end of the line
if ($Command.Length -gt $CursorPosition) {
return
}

$Program,$Arguments = $Command.Split(" ",2)

# If we don't have any parameter, just use the default completion (Which is Set-Location)
if([string]::IsNullOrEmpty($Arguments)) {
return
}

$QueryArgs = $Arguments.Split(" ")

# If the last parameter is complete (there is a space following it)
if ($WordToComplete -eq "" -And ( -Not $IsEqualFlag )) {
# Normally, we would invoke the interactive query. Unfortunally it is not possible to invoke an
# interactive command in a powershell argument completer. Therefore, we just return in that case to the
# default completion strategy.
# zoxide query -i -- @QueryArgs
return
} else {
$result = zoxide query --exclude "$(__zoxide_pwd)" -l -- @QueryArgs
}

$result | ForEach-Object {
[System.Management.Automation.CompletionResult]::new($($_ | __zoxide_escapeStringWithSpecialChars), "$($_)", 'ParameterValue', "$($_)")
}
}

{%- when None %}

{{ not_configured }}
Expand Down