diff --git a/shell-completion/zsh/_machinectl b/shell-completion/zsh/_machinectl index 2b675bd77e..54afa95bf6 100644 --- a/shell-completion/zsh/_machinectl +++ b/shell-completion/zsh/_machinectl @@ -12,9 +12,9 @@ _machines=("${(fo)$(__machinectl_get_images)}") typeset -U _machines if [[ -n "$_machines" ]]; then - _describe 'machines' _machines + _describe 'images' _machines else - _message 'no machines' + _message 'no images' fi } @@ -42,13 +42,22 @@ "list-images:Show available container and VM images" "image-status:Show image details" "show-image:Show properties of image" + "edit:Edit settings of one or more VMs/containers" + "cat:Show settings of one or more VMs/containers" "clone:Clone an image" "rename:Rename an image" "read-only:Mark or unmark image read-only" "remove:Remove an image" + "set-limits:Set image or pool size limit (disk quota)" + "clean:Remove hidden (or all) images" "pull-tar:Download a TAR container image" "pull-raw:Download a RAW container or VM image" + "import-tar:Import a local TAR container image" + "import-raw:Import a local RAW container or VM image" + "import-fs:Import a local directory container image" + "export-tar:Export a TAR container image locally" + "export-raw:Export a RAW container or VM image locally" "list-transfers:Show list of downloads in progress" "cancel-transfer:Cancel a download" ) @@ -57,28 +66,98 @@ _describe -t commands 'machinectl command' _machinectl_cmds || compadd "$@" else local curcontext="$curcontext" + local stop=0 cmd="${${_machinectl_cmds[(r)$words[1]:*]%%:*}}" - if (( $#cmd )); then - if (( CURRENT == 2 )); then - case $cmd in - list*|cancel-transfer|pull-tar|pull-raw) - msg="no options" ;; - clone) - _machinectl_images ;; - start) - _machinectl_images ;; - *) - _sd_machines - esac - else - case $cmd in - copy-to|copy-from|bind) - _files ;; - *) msg="no options" - esac - fi - else + case $cmd in + start|enable|disable) + _machinectl_images ;; + + status|show|poweroff|reboot|terminate|kill) + _sd_machines ;; + + login|shell) + if (( CURRENT == 2 )); then _sd_machines + else stop=1 + fi ;; + + copy-to|bind) + if (( CURRENT == 2 )); then _sd_machines + elif (( CURRENT == 3 )); then _files + elif (( CURRENT == 4 )); then _message "path on container" + else stop=1 + fi ;; + + copy-from) + if (( CURRENT == 2 )); then _sd_machines + elif (( CURRENT == 3 )); then _message "path on container" + elif (( CURRENT == 4 )); then _files + else stop=1 + fi ;; + + image-status|show-image|remove) + _machinectl_images ;; + + edit|cat) + if (( CURRENT == 2 )); then _machinectl_images + else stop=1 + fi ;; + + clone|rename) + if (( CURRENT == 2 )); then _machinectl_images + elif (( CURRENT == 3 )); then _message "target image" + else stop=1 + fi ;; + + read-only) + if (( CURRENT == 2 )); then _machinectl_images + elif (( CURRENT == 3 )); then _values 'read-only flag' 'true' 'false' + else stop=1 + fi ;; + + set-limit) + if (( CURRENT == 2 )); then _machinectl_images + elif (( CURRENT == 3 )); then _message "size limit" + else stop=1 + fi ;; + + pull-tar|pull-raw) + if (( CURRENT == 2 )); then _message "${cmd#pull-} file URL" + elif (( CURRENT == 3 )); then _message "target image" + else stop=1 + fi ;; + + import-tar) + if (( CURRENT == 2 )); then _files -g "*.(tar(|.(gz|bz2|xz|zst))|tgz|tbz2|txz|tzst)(.)" + elif (( CURRENT == 3 )); then _message "target image" + else stop=1 + fi ;; + import-raw) + if (( CURRENT == 2 )); then _files -g "*(.)" + elif (( CURRENT == 3 )); then _message "target image" + else stop=1 + fi ;; + import-fs) + if (( CURRENT == 2 )); then _files -/ + elif (( CURRENT == 3 )); then _message "target image" + else stop=1 + fi ;; + + export-tar|export-raw) + if (( CURRENT == 2 )); then _machinectl_images + elif (( CURRENT == 3 )); then _files + else stop=1 + fi ;; + + list*|clean|cancel-transfer) + stop=1 ;; + + '') + stop=1 ;; + esac + + if (( stop )); then _message "no more options" + return 1 fi fi }