155 lines
		
	
	
		
			4.1 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
			
		
		
	
	
			155 lines
		
	
	
		
			4.1 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
| {%- let section = "# =============================================================================\n#" -%}
 | |
| {%- let not_configured = "# -- not configured --" -%}
 | |
| 
 | |
| {{ section }}
 | |
| # Utility functions for zoxide.
 | |
| #
 | |
| 
 | |
| # Call zoxide binary, returning the output as UTF-8.
 | |
| function global:__zoxide_bin {
 | |
|     $encoding = [Console]::OutputEncoding
 | |
|     try {
 | |
|         [Console]::OutputEncoding = [System.Text.Utf8Encoding]::new()
 | |
|         $result = zoxide @args
 | |
|         return $result
 | |
|     } finally {
 | |
|         [Console]::OutputEncoding = $encoding
 | |
|     }
 | |
| }
 | |
| 
 | |
| # pwd based on zoxide's format.
 | |
| function global:__zoxide_pwd {
 | |
|     $cwd = Get-Location
 | |
|     if ($cwd.Provider.Name -eq "FileSystem") {
 | |
|         $cwd.ProviderPath
 | |
|     }
 | |
| }
 | |
| 
 | |
| # cd + custom logic based on the value of _ZO_ECHO.
 | |
| function global:__zoxide_cd($dir, $literal) {
 | |
|     $dir = if ($literal) {
 | |
|         Set-Location -LiteralPath $dir -Passthru -ErrorAction Stop
 | |
|     } else {
 | |
|         if ($dir -eq '-' -and ($PSVersionTable.PSVersion -lt 6.1)) {
 | |
|             Write-Error "cd - is not supported below PowerShell 6.1. Please upgrade your version of PowerShell."
 | |
|         }
 | |
|         elseif ($dir -eq '+' -and ($PSVersionTable.PSVersion -lt 6.2)) {
 | |
|             Write-Error "cd + is not supported below PowerShell 6.2. Please upgrade your version of PowerShell."
 | |
|         }
 | |
|         else {
 | |
|             Set-Location -Path $dir -Passthru -ErrorAction Stop
 | |
|         }
 | |
|     }
 | |
| {%- if echo %}
 | |
|     Write-Output $dir.Path
 | |
| {%- endif %}
 | |
| }
 | |
| 
 | |
| {{ section }}
 | |
| # Hook configuration for zoxide.
 | |
| #
 | |
| 
 | |
| {% if hook == InitHook::None -%}
 | |
| {{ not_configured }}
 | |
| 
 | |
| {%- else -%}
 | |
| {#-
 | |
|   Initialize $__zoxide_hooked if it does not exist. Removing this will cause an
 | |
|   unset variable error in StrictMode.
 | |
| -#}
 | |
| {%- if hook == InitHook::Prompt -%}
 | |
| # Hook to add new entries to the database.
 | |
| function global:__zoxide_hook {
 | |
|     $result = __zoxide_pwd
 | |
|     if ($null -ne $result) {
 | |
|         zoxide add -- $result
 | |
|     }
 | |
| }
 | |
| {%- else if hook == InitHook::Pwd -%}
 | |
| # Hook to add new entries to the database.
 | |
| $global:__zoxide_oldpwd = __zoxide_pwd
 | |
| function global:__zoxide_hook {
 | |
|     $result = __zoxide_pwd
 | |
|     if ($result -ne $global:__zoxide_oldpwd) {
 | |
|         if ($null -ne $result) {
 | |
|             zoxide add -- $result
 | |
|         }
 | |
|         $global:__zoxide_oldpwd = $result
 | |
|     }
 | |
| }
 | |
| {%- endif %}
 | |
| 
 | |
| # Initialize hook.
 | |
| $global:__zoxide_hooked = (Get-Variable __zoxide_hooked -ErrorAction SilentlyContinue -ValueOnly)
 | |
| if ($global:__zoxide_hooked -ne 1) {
 | |
|     $global:__zoxide_hooked = 1
 | |
|     $global:__zoxide_prompt_old = $function:prompt
 | |
| 
 | |
|     function global:prompt {
 | |
|         if ($null -ne $__zoxide_prompt_old) {
 | |
|             & $__zoxide_prompt_old
 | |
|         }
 | |
|         $null = __zoxide_hook
 | |
|     }
 | |
| }
 | |
| {%- endif %}
 | |
| 
 | |
| {{ section }}
 | |
| # When using zoxide with --no-cmd, alias these internal functions as desired.
 | |
| #
 | |
| 
 | |
| # Jump to a directory using only keywords.
 | |
| function global:__zoxide_z {
 | |
|     if ($args.Length -eq 0) {
 | |
|         __zoxide_cd ~ $true
 | |
|     }
 | |
|     elseif ($args.Length -eq 1 -and ($args[0] -eq '-' -or $args[0] -eq '+')) {
 | |
|         __zoxide_cd $args[0] $false
 | |
|     }
 | |
|     elseif ($args.Length -eq 1 -and (Test-Path $args[0] -PathType Container)) {
 | |
|         __zoxide_cd $args[0] $true
 | |
|     }
 | |
|     else {
 | |
|         $result = __zoxide_pwd
 | |
|         if ($null -ne $result) {
 | |
|             $result = __zoxide_bin query --exclude $result -- @args
 | |
|         }
 | |
|         else {
 | |
|             $result = __zoxide_bin query -- @args
 | |
|         }
 | |
|         if ($LASTEXITCODE -eq 0) {
 | |
|             __zoxide_cd $result $true
 | |
|         }
 | |
|     }
 | |
| }
 | |
| 
 | |
| # Jump to a directory using interactive search.
 | |
| function global:__zoxide_zi {
 | |
|     $result = __zoxide_bin query -i -- @args
 | |
|     if ($LASTEXITCODE -eq 0) {
 | |
|         __zoxide_cd $result $true
 | |
|     }
 | |
| }
 | |
| 
 | |
| {{ section }}
 | |
| # Commands for zoxide. Disable these using --no-cmd.
 | |
| #
 | |
| 
 | |
| {%- match cmd %}
 | |
| {%- when Some with (cmd) %}
 | |
| 
 | |
| 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
 | |
| 
 | |
| {%- when None %}
 | |
| 
 | |
| {{ not_configured }}
 | |
| 
 | |
| {%- endmatch %}
 | |
| 
 | |
| {{ section }}
 | |
| # To initialize zoxide, add this to your configuration (find it by running
 | |
| # `echo $profile` in PowerShell):
 | |
| #
 | |
| # Invoke-Expression (& { (zoxide init powershell | Out-String) })
 |