mirror of
https://github.com/KevinMidboe/linguist.git
synced 2025-10-29 09:40:21 +00:00
91 lines
2.0 KiB
PowerShell
91 lines
2.0 KiB
PowerShell
#
|
|
# Weight function.
|
|
#
|
|
function Update-ZLocation([string]$path)
|
|
{
|
|
$now = [datetime]::Now
|
|
if (Test-Path variable:global:__zlocation_current)
|
|
{
|
|
$prev = $global:__zlocation_current
|
|
$weight = $now.Subtract($prev.Time).TotalSeconds
|
|
Add-ZWeight ($prev.Location) $weight
|
|
}
|
|
|
|
$global:__zlocation_current = @{
|
|
Location = $path
|
|
Time = [datetime]::Now
|
|
}
|
|
|
|
# populate folder immidiatly after the first cd
|
|
Add-ZWeight $path 0
|
|
}
|
|
|
|
# this approach hurts `cd` performance (0.0008 sec vs 0.025 sec).
|
|
# Consider replace it with OnIdle Event.
|
|
(Get-Variable pwd).attributes.Add((new-object ValidateScript { Update-ZLocation $_.Path; return $true }))
|
|
#
|
|
# End of weight function.
|
|
#
|
|
|
|
|
|
#
|
|
# Tab complention.
|
|
#
|
|
if (Test-Path Function:\TabExpansion) {
|
|
Rename-Item Function:\TabExpansion PreZTabExpansion
|
|
}
|
|
|
|
function Get-EscapedPath
|
|
{
|
|
param(
|
|
[Parameter(
|
|
Position=0,
|
|
Mandatory=$true,
|
|
ValueFromPipeline=$true,
|
|
ValueFromPipelineByPropertyName=$true)
|
|
]
|
|
[string]$path
|
|
)
|
|
|
|
process {
|
|
if ($path.Contains(' '))
|
|
{
|
|
return '"' + $path + '"'
|
|
}
|
|
return $path
|
|
}
|
|
}
|
|
|
|
function global:TabExpansion($line, $lastWord) {
|
|
switch -regex ($line) {
|
|
"^(Set-ZLocation|z) .*" {
|
|
$arguments = $line -split ' ' | Where { $_.length -gt 0 } | select -Skip 1
|
|
Find-Matches (Get-ZLocation) $arguments | Get-EscapedPath
|
|
}
|
|
default {
|
|
if (Test-Path Function:\PreZTabExpansion) {
|
|
PreZTabExpansion $line $lastWord
|
|
}
|
|
}
|
|
}
|
|
}
|
|
#
|
|
# End of tab completion.
|
|
#
|
|
|
|
function Set-ZLocation()
|
|
{
|
|
if (-not $args) {
|
|
$args = @()
|
|
}
|
|
$matches = Find-Matches (Get-ZLocation) $args
|
|
if ($matches) {
|
|
Push-Location ($matches | Select-Object -First 1)
|
|
} else {
|
|
Write-Warning "Cannot find matching location"
|
|
}
|
|
}
|
|
|
|
|
|
Set-Alias -Name z -Value Set-ZLocation
|
|
Export-ModuleMember -Function Set-ZLocation, Get-ZLocation -Alias z |