diff --git a/contrib/completion/powershell/posh-docker.psm1 b/contrib/completion/powershell/posh-docker.psm1 deleted file mode 100644 index c0d6cc6b22..0000000000 --- a/contrib/completion/powershell/posh-docker.psm1 +++ /dev/null @@ -1,179 +0,0 @@ -# Powershell completion for docker - -### Prerequisite -# Docker.exe needs to be in your PATH. -# If the command is not found, you will need to add a docker alias or add the docker installation folder (e.g. `%ProgramFiles%\Docker Toolbox`) to your PATH environment variable. - -### Installation (Latest stable) -# Windows 10 / Windows Server 2016: -# 1. Open a powershell prompt -# 2. Run `Install-Module -Scope CurrentUser posh-docker` -# -# Earlier Windows versions: -# 1. Install [PackageManagement PowerShell Modules Preview](https://www.microsoft.com/en-us/download/details.aspx?id=49186) -# 2. Open a powershell prompt -# 3. Run `Install-Module -Scope CurrentUser posh-docker` - -### Installation (From source) -# Copy this file to the %userprofile%\Documents\WindowsPowerShell\Modules\posh-docker directory (create directories as needed) - -### Usage -# After installation, execute the following line to enable autocompletion for the current powershell session: -# -# Import-Module posh-docker -# -# To make it persistent, add the above line to your profile. For example, run `notepad $PROFILE` and insert the line above. - -$global:DockerCompletion = @{} - -$script:flagRegex = "^ (-[^, =]+),? ?(--[^= ]+)?" - -function script:Get-Containers($filter) -{ - if ($filter -eq $null) - { - docker ps -a --no-trunc --format "{{.Names}}" - } else { - docker ps -a --no-trunc --format "{{.Names}}" --filter $filter - } -} - -function script:Get-AutoCompleteResult -{ - param([Parameter(ValueFromPipeline=$true)] $value) - - Process - { - New-Object System.Management.Automation.CompletionResult $value - } -} - -filter script:MatchingCommand($commandName) -{ - if ($_.StartsWith($commandName)) - { - $_ - } -} - -$completion_Docker = { - param($commandName, $commandAst, $cursorPosition) - - $command = $null - $commandParameters = @{} - $state = "Unknown" - $wordToComplete = $commandAst.CommandElements | Where-Object { $_.ToString() -eq $commandName } | Foreach-Object { $commandAst.CommandElements.IndexOf($_) } - - for ($i=1; $i -lt $commandAst.CommandElements.Count; $i++) - { - $p = $commandAst.CommandElements[$i].ToString() - - if ($p.StartsWith("-")) - { - if ($state -eq "Unknown" -or $state -eq "Options") - { - $commandParameters[$i] = "Option" - $state = "Options" - } - else - { - $commandParameters[$i] = "CommandOption" - $state = "CommandOptions" - } - } - else - { - if ($state -ne "CommandOptions") - { - $commandParameters[$i] = "Command" - $command = $p - $state = "CommandOptions" - } - else - { - $commandParameters[$i] = "CommandOther" - } - } - } - - if ($global:DockerCompletion.Count -eq 0) - { - $global:DockerCompletion["commands"] = @{} - $global:DockerCompletion["options"] = @() - - docker --help | ForEach-Object { - Write-Output $_ - if ($_ -match "^ (\w+)\s+(.+)") - { - $global:DockerCompletion["commands"][$Matches[1]] = @{} - - $currentCommand = $global:DockerCompletion["commands"][$Matches[1]] - $currentCommand["options"] = @() - } - elseif ($_ -match $flagRegex) - { - $global:DockerCompletion["options"] += $Matches[1] - if ($Matches[2] -ne $null) - { - $global:DockerCompletion["options"] += $Matches[2] - } - } - } - - } - - if ($wordToComplete -eq $null) - { - $commandToComplete = "Command" - if ($commandParameters.Count -gt 0) - { - if ($commandParameters[$commandParameters.Count] -eq "Command") - { - $commandToComplete = "CommandOther" - } - } - } else { - $commandToComplete = $commandParameters[$wordToComplete] - } - - switch ($commandToComplete) - { - "Command" { $global:DockerCompletion["commands"].Keys | MatchingCommand -Command $commandName | Sort-Object | Get-AutoCompleteResult } - "Option" { $global:DockerCompletion["options"] | MatchingCommand -Command $commandName | Sort-Object | Get-AutoCompleteResult } - "CommandOption" { - $options = $global:DockerCompletion["commands"][$command]["options"] - if ($options.Count -eq 0) - { - docker $command --help | % { - if ($_ -match $flagRegex) - { - $options += $Matches[1] - if ($Matches[2] -ne $null) - { - $options += $Matches[2] - } - } - } - } - - $global:DockerCompletion["commands"][$command]["options"] = $options - $options | MatchingCommand -Command $commandName | Sort-Object | Get-AutoCompleteResult - } - "CommandOther" { - $filter = $null - switch ($command) - { - "start" { $filter = "status=exited" } - "stop" { $filter = "status=running" } - } - Get-Containers $filter | MatchingCommand -Command $commandName | Sort-Object | Get-AutoCompleteResult - } - default { $global:DockerCompletion["commands"].Keys | MatchingCommand -Command $commandName } - } -} - -# Register the TabExpension2 function -if (-not $global:options) { $global:options = @{CustomArgumentCompleters = @{};NativeArgumentCompleters = @{}}} -$global:options['NativeArgumentCompleters']['docker'] = $Completion_Docker - -$function:tabexpansion2 = $function:tabexpansion2 -replace 'End\r\n{','End { if ($null -ne $options) { $options += $global:options} else {$options = $global:options}' \ No newline at end of file diff --git a/contrib/completion/powershell/readme.txt b/contrib/completion/powershell/readme.txt new file mode 100644 index 0000000000..18e1b53c13 --- /dev/null +++ b/contrib/completion/powershell/readme.txt @@ -0,0 +1 @@ +See https://github.com/samneirinck/posh-docker \ No newline at end of file