shell-completion/zsh: improve and expand machinectl completion

This commit is contained in:
Ivan Shapovalov 2024-01-20 11:45:12 +01:00
parent d4c8de21a0
commit 57d389c3fb

View file

@ -12,9 +12,9 @@
_machines=("${(fo)$(__machinectl_get_images)}") _machines=("${(fo)$(__machinectl_get_images)}")
typeset -U _machines typeset -U _machines
if [[ -n "$_machines" ]]; then if [[ -n "$_machines" ]]; then
_describe 'machines' _machines _describe 'images' _machines
else else
_message 'no machines' _message 'no images'
fi fi
} }
@ -42,13 +42,22 @@
"list-images:Show available container and VM images" "list-images:Show available container and VM images"
"image-status:Show image details" "image-status:Show image details"
"show-image:Show properties of image" "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" "clone:Clone an image"
"rename:Rename an image" "rename:Rename an image"
"read-only:Mark or unmark image read-only" "read-only:Mark or unmark image read-only"
"remove:Remove an image" "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-tar:Download a TAR container image"
"pull-raw:Download a RAW container or VM 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" "list-transfers:Show list of downloads in progress"
"cancel-transfer:Cancel a download" "cancel-transfer:Cancel a download"
) )
@ -57,28 +66,98 @@
_describe -t commands 'machinectl command' _machinectl_cmds || compadd "$@" _describe -t commands 'machinectl command' _machinectl_cmds || compadd "$@"
else else
local curcontext="$curcontext" local curcontext="$curcontext"
local stop=0
cmd="${${_machinectl_cmds[(r)$words[1]:*]%%:*}}" cmd="${${_machinectl_cmds[(r)$words[1]:*]%%:*}}"
if (( $#cmd )); then case $cmd in
if (( CURRENT == 2 )); then start|enable|disable)
case $cmd in _machinectl_images ;;
list*|cancel-transfer|pull-tar|pull-raw)
msg="no options" ;; status|show|poweroff|reboot|terminate|kill)
clone) _sd_machines ;;
_machinectl_images ;;
start) login|shell)
_machinectl_images ;; if (( CURRENT == 2 )); then _sd_machines
*) else stop=1
_sd_machines fi ;;
esac
else copy-to|bind)
case $cmd in if (( CURRENT == 2 )); then _sd_machines
copy-to|copy-from|bind) elif (( CURRENT == 3 )); then _files
_files ;; elif (( CURRENT == 4 )); then _message "path on container"
*) msg="no options" else stop=1
esac fi ;;
fi
else 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" _message "no more options"
return 1
fi fi
fi fi
} }