CDCompletion.ps1
using namespace System.Management.Automation using namespace System.Management.Automation.Language function CompleteCdPath{ param($commandName, $parameterName, $wordToComplete, $commandAst, $fakeBoundParameter) if ($commandAst.CommandElements.Count -ne 2) { return } $cdpath = @('.') if (Test-Path '~\documents\WindowsPowershell\cdpath.txt') { $cdpath += Get-CDPath } $ce = $commandAst.CommandElements[1] if ($ce -isnot [StringConstantExpressionAst]) { return } $pattern = $commandAst.CommandElements[1].Value [CompletionCompleters]::CompleteFilename("$wordToComplete*") | Where-Object ResultType -eq ProviderContainer Join-Path $cdpath "$pattern*" -Resolve -ea:SilentlyContinue | foreach { if (Test-Path -PathType Container $_) { if ($_.Contains(' ')){ $_ = "'$_'" } [CompletionResult]::new($_,$_, [CompletionResultType]::ProviderContainer, $_) } } } function CompleteCdRemaining{ param($commandName, $parameterName, $wordToComplete, $commandAst, $fakeBoundParameter) $cdpath = @('.') if (Test-Path '~\documents\WindowsPowershell\cdpath.txt') { $cdpath += Get-CDPath } $ce = $commandAst.CommandElements[1] if ($ce -isnot [StringConstantExpressionAst]) { return } $el = $commandAst.CommandElements $count = ($el.Count - 1) if ($wordToComplete){ $count-- } if($count -eq 1){ $pattern = $el[1].Value + "*\$wordtoComplete*" } else{ $pattern = $el[1..$count].Value -join '*\' $pattern += "*\$wordtoComplete*" } [CompletionCompleters]::CompleteFilename("$wordToComplete*") | Where-Object ResultType -eq ProviderContainer Join-Path $cdpath $pattern -Resolve -ea:SilentlyContinue | foreach { if (Test-Path -PathType Container $_) { $name = split-path -leaf $_ if ($name.Contains(' ')){ $name = "'$name'" } [CompletionResult]::new($name,$name, [CompletionResultType]::ProviderContainer, $_) } } } if (Get-Command Register-ArgumentCompleter -ErrorAction:SilentlyContinue){ Register-ArgumentCompleter -CommandName Set-CDPathLocation -ParameterName Path -ScriptBlock $function:CompleteCdPath Register-ArgumentCompleter -CommandName Set-CDPathLocation -ParameterName Remaining -ScriptBlock $function:CompleteCdRemaining } # SIG # Begin signature block # MIINLAYJKoZIhvcNAQcCoIINHTCCDRkCAQExCzAJBgUrDgMCGgUAMGkGCisGAQQB # gjcCAQSgWzBZMDQGCisGAQQBgjcCAR4wJgIDAQAABBAfzDtgWUsITrck0sYpfvNR # AgEAAgEAAgEAAgEAAgEAMCEwCQYFKw4DAhoFAAQUqPGiIzNpMwqapG2RJrwm8Dlq # lXKgggpuMIIFMDCCBBigAwIBAgIQBAkYG1/Vu2Z1U0O1b5VQCDANBgkqhkiG9w0B # AQsFADBlMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYD # VQQLExB3d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVk # IElEIFJvb3QgQ0EwHhcNMTMxMDIyMTIwMDAwWhcNMjgxMDIyMTIwMDAwWjByMQsw # CQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cu # ZGlnaWNlcnQuY29tMTEwLwYDVQQDEyhEaWdpQ2VydCBTSEEyIEFzc3VyZWQgSUQg # Q29kZSBTaWduaW5nIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA # +NOzHH8OEa9ndwfTCzFJGc/Q+0WZsTrbRPV/5aid2zLXcep2nQUut4/6kkPApfmJ # 1DcZ17aq8JyGpdglrA55KDp+6dFn08b7KSfH03sjlOSRI5aQd4L5oYQjZhJUM1B0 # sSgmuyRpwsJS8hRniolF1C2ho+mILCCVrhxKhwjfDPXiTWAYvqrEsq5wMWYzcT6s # cKKrzn/pfMuSoeU7MRzP6vIK5Fe7SrXpdOYr/mzLfnQ5Ng2Q7+S1TqSp6moKq4Tz # rGdOtcT3jNEgJSPrCGQ+UpbB8g8S9MWOD8Gi6CxR93O8vYWxYoNzQYIH5DiLanMg # 0A9kczyen6Yzqf0Z3yWT0QIDAQABo4IBzTCCAckwEgYDVR0TAQH/BAgwBgEB/wIB # ADAOBgNVHQ8BAf8EBAMCAYYwEwYDVR0lBAwwCgYIKwYBBQUHAwMweQYIKwYBBQUH # AQEEbTBrMCQGCCsGAQUFBzABhhhodHRwOi8vb2NzcC5kaWdpY2VydC5jb20wQwYI # KwYBBQUHMAKGN2h0dHA6Ly9jYWNlcnRzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydEFz # c3VyZWRJRFJvb3RDQS5jcnQwgYEGA1UdHwR6MHgwOqA4oDaGNGh0dHA6Ly9jcmw0 # LmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydEFzc3VyZWRJRFJvb3RDQS5jcmwwOqA4oDaG # NGh0dHA6Ly9jcmwzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydEFzc3VyZWRJRFJvb3RD # QS5jcmwwTwYDVR0gBEgwRjA4BgpghkgBhv1sAAIEMCowKAYIKwYBBQUHAgEWHGh0 # dHBzOi8vd3d3LmRpZ2ljZXJ0LmNvbS9DUFMwCgYIYIZIAYb9bAMwHQYDVR0OBBYE # FFrEuXsqCqOl6nEDwGD5LfZldQ5YMB8GA1UdIwQYMBaAFEXroq/0ksuCMS1Ri6en # IZ3zbcgPMA0GCSqGSIb3DQEBCwUAA4IBAQA+7A1aJLPzItEVyCx8JSl2qB1dHC06 # GsTvMGHXfgtg/cM9D8Svi/3vKt8gVTew4fbRknUPUbRupY5a4l4kgU4QpO4/cY5j # DhNLrddfRHnzNhQGivecRk5c/5CxGwcOkRX7uq+1UcKNJK4kxscnKqEpKBo6cSgC # PC6Ro8AlEeKcFEehemhor5unXCBc2XGxDI+7qPjFEmifz0DLQESlE/DmZAwlCEIy # sjaKJAL+L3J+HNdJRZboWR3p+nRka7LrZkPas7CM1ekN3fYBIM6ZMWM9CBoYs4Gb # T8aTEAb8B4H6i9r5gkn3Ym6hU/oSlBiFLpKR6mhsRDKyZqHnGKSaZFHvMIIFNjCC # BB6gAwIBAgIQC00BIFzepyXTcMbB+AfaoDANBgkqhkiG9w0BAQsFADByMQswCQYD # VQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGln # aWNlcnQuY29tMTEwLwYDVQQDEyhEaWdpQ2VydCBTSEEyIEFzc3VyZWQgSUQgQ29k # ZSBTaWduaW5nIENBMB4XDTE1MDgxMTAwMDAwMFoXDTE4MDgxNTEyMDAwMFowfTEL # MAkGA1UEBhMCU0UxFzAVBgNVBAgTDlN0b2NraG9sbXMgTGFuMREwDwYDVQQHDAhT # a8O2bmRhbDEgMB4GA1UEChMXUG93ZXJDb2RlIENvbnN1bHRpbmcgQUIxIDAeBgNV # BAMTF1Bvd2VyQ29kZSBDb25zdWx0aW5nIEFCMIIBIjANBgkqhkiG9w0BAQEFAAOC # AQ8AMIIBCgKCAQEA0Yu390VGptjUZIdLxIYQCSG1atPh/tN6qPf/eovS3ohJy+td # XluaPkUXuE3fWeMp+p3Jsj3c/LdsA1iYiQQQnJ/9afqiW2hnmSkNZfgcLQ9mceXl # mmd2otcwfkVhfA6ZuFnpceFgKciLLld7AY1sMiSyc1L5RvEsOR/1S6uBg0AWoSSv # l44vF8EgeArhPCx8GNbUmYfEpeqs1f5LOLlQBwImGCsjv1rmbuPwt0E229XVLerU # auNXJjb+jtrGBTzD384QiLMGtNHWnE4yBStjrLTHHNz4mE0g6jUIYJbFvGLD04Cl # 7WovOkODL+9nmsyreUg2UVBKrO98GK/G8XhG8wIDAQABo4IBuzCCAbcwHwYDVR0j # BBgwFoAUWsS5eyoKo6XqcQPAYPkt9mV1DlgwHQYDVR0OBBYEFAGtca5rM/ejkFdY # 3OVLhIxGkpIBMA4GA1UdDwEB/wQEAwIHgDATBgNVHSUEDDAKBggrBgEFBQcDAzB3 # BgNVHR8EcDBuMDWgM6Axhi9odHRwOi8vY3JsMy5kaWdpY2VydC5jb20vc2hhMi1h # c3N1cmVkLWNzLWcxLmNybDA1oDOgMYYvaHR0cDovL2NybDQuZGlnaWNlcnQuY29t # L3NoYTItYXNzdXJlZC1jcy1nMS5jcmwwQgYDVR0gBDswOTA3BglghkgBhv1sAwEw # KjAoBggrBgEFBQcCARYcaHR0cHM6Ly93d3cuZGlnaWNlcnQuY29tL0NQUzCBhAYI # KwYBBQUHAQEEeDB2MCQGCCsGAQUFBzABhhhodHRwOi8vb2NzcC5kaWdpY2VydC5j # b20wTgYIKwYBBQUHMAKGQmh0dHA6Ly9jYWNlcnRzLmRpZ2ljZXJ0LmNvbS9EaWdp # Q2VydFNIQTJBc3N1cmVkSURDb2RlU2lnbmluZ0NBLmNydDAMBgNVHRMBAf8EAjAA # MA0GCSqGSIb3DQEBCwUAA4IBAQC+nkBDDZo+AvHQdEm2IA9ygsJIQccvEE/ijFoq # RHqje75atqGhfzcVyqjyRdhj7FJ2WGvcWsHahViDq9ZR5W42S6D9OG0c+Wmo6buc # jn1Y8lfaWIngCloNZ0BF7rBcVmR8JLkfKjVZSsHdbBKVxj3x7NYw9cr7nx/UQjXX # jghqtWMetHOlw73BKpDEJGs7LFtb8TZcNLVyWU4GuW1HWhncf5lq2b3WUP82xKIa # Pf7w50P33/xxo+N12nNJJQ82aIhUVhVXcZ+TWlfO2n0yZT7dsa1FFwRf/dGPIpZm # Kn8tanILjQg5K4NWlli2iLonrmRmqXAlXe8NSPTXWPvaNskAMYICKDCCAiQCAQEw # gYYwcjELMAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZMBcGA1UE # CxMQd3d3LmRpZ2ljZXJ0LmNvbTExMC8GA1UEAxMoRGlnaUNlcnQgU0hBMiBBc3N1 # cmVkIElEIENvZGUgU2lnbmluZyBDQQIQC00BIFzepyXTcMbB+AfaoDAJBgUrDgMC # GgUAoHgwGAYKKwYBBAGCNwIBDDEKMAigAoAAoQKAADAZBgkqhkiG9w0BCQMxDAYK # KwYBBAGCNwIBBDAcBgorBgEEAYI3AgELMQ4wDAYKKwYBBAGCNwIBFTAjBgkqhkiG # 9w0BCQQxFgQUKgN09wUOz2CKgXU7g2nchbWTjiowDQYJKoZIhvcNAQEBBQAEggEA # SC7Zf3w9DtsnrgP3s0Q0ufn4+fPliCZcCVvnipCCKHA6n49kStM/wukWRM/4sb5a # fPMogW7FEAcunORtQrhaEgEldUvTTglUQDRzYtQK91CqHvrCPzyKpWR6UmVwhXwj # GRqFnU0v0Ar/uYsUO2sckjOWsqvVsoJVJ8vRefFIXrM2QMZnJQb9jpV30vO9XCqY # d1/uS2g8AGodlrjX43f0DnOE5Jo9cJpdQ9dcg5eoYbQ95UZA3/1AQikSXkOeE/ex # A7+APGl/J4WMAuLRm4296w6E6TbH1QbLe/fVQupxe7NuEFRjQytH4Glb2f51qCo/ # SwmGzt2u124Nvxpf7kMkng== # SIG # End signature block |