mirror of
				https://github.com/KevinMidboe/linguist.git
				synced 2025-10-29 17:50:22 +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 |