Browse Source

feat(docker): add `legacy-completion` option

Carlo Sala 9 months ago
parent
commit
7d5e12500a
2 changed files with 24 additions and 14 deletions
  1. 10 1
      plugins/docker/README.md
  2. 14 13
      plugins/docker/docker.plugin.zsh

+ 10 - 1
plugins/docker/README.md

@@ -30,6 +30,15 @@ file**, but be aware of the side effects:
 > zstyle ':completion:*:*:docker-*:*' option-stacking yes
 > ```
 
+### Use old-style completion
+
+If the current completion does not work well for you, you can enable legacy completion instead with the
+following setting. See https://github.com/ohmyzsh/ohmyzsh/issues/11789 for more information.
+
+```zsh
+zstyle ':omz:plugins:docker' legacy-completion yes
+```
+
 ## Aliases
 
 | Alias   | Command                       | Description                                                                              |
@@ -58,7 +67,7 @@ file**, but be aware of the side effects:
 | drm     | `docker container rm`         | Remove the specified container(s)                                                        |
 | drm!    | `docker container rm -f`      | Force the removal of a running container (uses SIGKILL)                                  |
 | dst     | `docker container start`      | Start one or more stopped containers                                                     |
-| drs     | `docker container restart`    | Restart one or more containers
+| drs     | `docker container restart`    | Restart one or more containers                                                           |
 | dsta    | `docker stop $(docker ps -q)` | Stop all running containers                                                              |
 | dstp    | `docker container stop`       | Stop one or more running containers                                                      |
 | dtop    | `docker top`                  | Display the running processes of a container                                             |

+ 14 - 13
plugins/docker/docker.plugin.zsh

@@ -41,21 +41,22 @@ fi
 0="${${ZERO:-${0:#$ZSH_ARGZERO}}:-${(%):-%N}}"
 0="${${(M)0:#/*}:-$PWD/$0}"
 
+# If the completion file doesn't exist yet, we need to autoload it and
+# bind it to `docker`. Otherwise, compinit will have already done that.
+if [[ ! -f "$ZSH_CACHE_DIR/completions/_docker" ]]; then
+  typeset -g -A _comps
+  autoload -Uz _docker
+  _comps[docker]=_docker
+fi
+
 {
+  # `docker completion` is only available from 23.0.0 on
   # docker version returns `Docker version 24.0.2, build cb74dfcd85`
   # with `s:,:` remove the comma after the version, and select third word of it
-  local _docker_version=${${(s:,:z)"$(command docker --version)"}[3]}
-  # `docker completion` is only available from 23.0.0 on
-  if is-at-least 23.0.0 $_docker_version; then
-    # If the completion file doesn't exist yet, we need to autoload it and
-    # bind it to `docker`. Otherwise, compinit will have already done that.
-    if [[ ! -f "$ZSH_CACHE_DIR/completions/_docker" ]]; then
-      typeset -g -A _comps
-      autoload -Uz _docker
-      _comps[docker]=_docker
-    fi
-    command docker completion zsh >| "$ZSH_CACHE_DIR/completions/_docker"
-  else
-    command cp "${0:h}/completions/_docker" "$ZSH_CACHE_DIR/completions/_docker"
+  if zstyle -t ':omz:plugins:docker' legacy-completion || \
+    ! is-at-least 23.0.0 ${${(s:,:z)"$(command docker --version)"}[3]}; then
+        command cp "${0:h}/completions/_docker" "$ZSH_CACHE_DIR/completions/_docker"
+      else
+        command docker completion zsh >| "$ZSH_CACHE_DIR/completions/_docker"
   fi
 } &|