]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
shell-completion/zsh: improve and expand machinectl completion
authorIvan Shapovalov <intelfx@intelfx.name>
Sat, 20 Jan 2024 10:45:12 +0000 (11:45 +0100)
committerIvan Shapovalov <intelfx@intelfx.name>
Tue, 23 Jan 2024 00:55:05 +0000 (01:55 +0100)
shell-completion/zsh/_machinectl

index 2b675bd77e25e1ce5e1fc520a5e11a82e03e3d97..54afa95bf6870fd7a5ed31a63389b77ef043f6b9 100644 (file)
@@ -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
     }
 
         "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"
     )
         _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
 }