From 7d5e12500a2ba0b575ffafcbb516568973528730 Mon Sep 17 00:00:00 2001 From: Carlo Sala Date: Thu, 20 Jul 2023 10:43:56 +0200 Subject: [PATCH] feat(docker): add `legacy-completion` option --- plugins/docker/README.md | 11 ++++++++++- plugins/docker/docker.plugin.zsh | 27 ++++++++++++++------------- 2 files changed, 24 insertions(+), 14 deletions(-) diff --git a/plugins/docker/README.md b/plugins/docker/README.md index 512b5d17c..0ab2e41fb 100644 --- a/plugins/docker/README.md +++ b/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 | diff --git a/plugins/docker/docker.plugin.zsh b/plugins/docker/docker.plugin.zsh index 7777048a3..7e657f2df 100644 --- a/plugins/docker/docker.plugin.zsh +++ b/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 } &|