Pārlūkot izejas kodu

Merge pull request #24273 from sdurrheimer/zsh-completion-plugin

Add zsh completion for 'docker plugin' commands
Antonio Murdaca 9 gadi atpakaļ
vecāks
revīzija
687c15f518
1 mainītis faili ar 98 papildinājumiem un 4 dzēšanām
  1. 98 4
      contrib/completion/zsh/_docker

+ 98 - 4
contrib/completion/zsh/_docker

@@ -138,7 +138,7 @@ __docker_containers_names() {
     __docker_get_containers all names "$@"
     __docker_get_containers all names "$@"
 }
 }
 
 
-__docker_plugins() {
+__docker_complete_info_plugins() {
     [[ $PREFIX = -* ]] && return 1
     [[ $PREFIX = -* ]] && return 1
     integer ret=1
     integer ret=1
     emulate -L zsh
     emulate -L zsh
@@ -451,7 +451,7 @@ __docker_network_complete_ls_filters() {
     if compset -P '*='; then
     if compset -P '*='; then
         case "${${words[-1]%=*}#*=}" in
         case "${${words[-1]%=*}#*=}" in
             (driver)
             (driver)
-                __docker_plugins Network && ret=0
+                __docker_complete_info_plugins Network && ret=0
                 ;;
                 ;;
             (id)
             (id)
                 __docker_networks_ids && ret=0
                 __docker_networks_ids && ret=0
@@ -697,7 +697,6 @@ __docker_nodes() {
     [[ $filter != "none") ]] && args=("-f $filter")
     [[ $filter != "none") ]] && args=("-f $filter")
 
 
     lines=(${(f)"$(_call_program commands docker $docker_options node ls $args)"})
     lines=(${(f)"$(_call_program commands docker $docker_options node ls $args)"})
-
     # Parse header line to find columns
     # Parse header line to find columns
     local i=1 j=1 k header=${lines[1]}
     local i=1 j=1 k header=${lines[1]}
     declare -A begin end
     declare -A begin end
@@ -848,6 +847,84 @@ __docker_node_subcommand() {
 
 
 # EO node
 # EO node
 
 
+# BO plugin
+
+__docker_complete_plugins() {
+    [[ $PREFIX = -* ]] && return 1
+    integer ret=1
+    local line s
+    declare -a lines plugins
+
+    lines=(${(f)"$(_call_program commands docker $docker_options plugin ls)"})
+
+    # Parse header line to find columns
+    local i=1 j=1 k header=${lines[1]}
+    declare -A begin end
+    while (( j < ${#header} - 1 )); do
+        i=$(( j + ${${header[$j,-1]}[(i)[^ ]]} - 1 ))
+        j=$(( i + ${${header[$i,-1]}[(i)  ]} - 1 ))
+        k=$(( j + ${${header[$j,-1]}[(i)[^ ]]} - 2 ))
+        begin[${header[$i,$((j-1))]}]=$i
+        end[${header[$i,$((j-1))]}]=$k
+    done
+    end[${header[$i,$((j-1))]}]=-1
+    lines=(${lines[2,-1]})
+
+    # Name
+    for line in $lines; do
+        s="${line[${begin[NAME]},${end[NAME]}]%% ##}"
+        s="$s:${(l:7:: :::)${${line[${begin[TAG]},${end[TAG]}]}%% ##}}"
+        plugins=($plugins $s)
+    done
+
+    _describe -t plugins-list "plugins" plugins "$@" && ret=0
+    return ret
+}
+
+__docker_plugin_commands() {
+    local -a _docker_plugin_subcommands
+    _docker_plugin_subcommands=(
+        "disable:Disable a plugin"
+        "enable:Enable a plugin"
+        "inspect:Return low-level information about a plugin"
+        "install:Install a plugin"
+        "ls:List plugins"
+        "push:Push a plugin"
+        "rm:Remove a plugin"
+        "set:Change settings for a plugin"
+    )
+    _describe -t docker-plugin-commands "docker plugin command" _docker_plugin_subcommands
+}
+
+__docker_plugin_subcommand() {
+    local -a _command_args opts_help
+    local expl help="--help"
+    integer ret=1
+
+    opts_help=("(: -)--help[Print usage]")
+
+    case "$words[1]" in
+        (disable|enable|inspect|install|ls|push|rm)
+            _arguments $(__docker_arguments) \
+                $opts_help \
+                "($help -)1:plugin:__docker_complete_plugins" && ret=0
+            ;;
+        (set)
+            _arguments $(__docker_arguments) \
+                $opts_help \
+                "($help -)1:plugin:__docker_complete_plugins" \
+                "($help-)*:key=value: " && ret=0
+            ;;
+        (help)
+            _arguments $(__docker_arguments) ":subcommand:__docker_plugin_commands" && ret=0
+            ;;
+    esac
+
+    return ret
+}
+
+# EO plugin
+
 # BO swarm
 # BO swarm
 
 
 __docker_swarm_commands() {
 __docker_swarm_commands() {
@@ -927,7 +1004,7 @@ __docker_volume_complete_ls_filters() {
                 _describe -t dangling-filter-opts "Dangling Filter Options" dangling_opts && ret=0
                 _describe -t dangling-filter-opts "Dangling Filter Options" dangling_opts && ret=0
                 ;;
                 ;;
             (driver)
             (driver)
-                __docker_plugins Volume && ret=0
+                __docker_complete_info_plugins Volume && ret=0
                 ;;
                 ;;
             (name)
             (name)
                 __docker_volumes && ret=0
                 __docker_volumes && ret=0
@@ -1470,6 +1547,23 @@ __docker_subcommand() {
                 $opts_help \
                 $opts_help \
                 "($help -)*:containers:__docker_runningcontainers" && ret=0
                 "($help -)*:containers:__docker_runningcontainers" && ret=0
             ;;
             ;;
+        (plugin)
+            local curcontext="$curcontext" state
+            _arguments $(__docker_arguments) \
+                $opts_help \
+                "($help -): :->command" \
+                "($help -)*:: :->option-or-argument" && ret=0
+
+            case $state in
+                (command)
+                    __docker_plugin_commands && ret=0
+                    ;;
+                (option-or-argument)
+                    curcontext=${curcontext%:*:*}:docker-${words[-1]}:
+                    __docker_plugin_subcommand && ret=0
+                    ;;
+            esac
+            ;;
         (port)
         (port)
             _arguments $(__docker_arguments) \
             _arguments $(__docker_arguments) \
                 $opts_help \
                 $opts_help \