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 |