From 33a8a6f86cd63a1daf845b269f6c56ea477c891e Mon Sep 17 00:00:00 2001 From: Marko Myllynen Date: Mon, 5 Sep 2016 10:39:16 +0300 Subject: 39179 (plus tweak): More _libvirt (virsh) completion tweaks --- Completion/Unix/Command/_libvirt | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) (limited to 'Completion/Unix') diff --git a/Completion/Unix/Command/_libvirt b/Completion/Unix/Command/_libvirt index ad4c3b8e6..f93778876 100644 --- a/Completion/Unix/Command/_libvirt +++ b/Completion/Unix/Command/_libvirt @@ -127,13 +127,13 @@ case $state in _wanted commands expl 'virsh command' compadd -a _cache_virsh_cmds && ret=0 ;; virsh_cmd_opts) - if [[ $words[-2] == --(dir|emulatorbin|file|mountpoint|*path|script|source-dev) || $words[-1] == (/*|.*) ]]; then + if [[ $words[CURRENT-1] == --(dir|emulatorbin|file|mountpoint|*path|script|source-dev) || $words[CURRENT] == (/*|.*) ]]; then _default return 0 fi local cmd - for (( i = 2; i <= $#words; i++ )); do - [[ -n "${_cache_virsh_cmds[(r)$words[$i]]}" ]] && cmd=$words[$i] && break + for word in ${words:1}; do + [[ -n "${_cache_virsh_cmds[(r)$word]}" ]] && cmd=$word && break done [[ -z $cmd ]] && return 1 local -a values @@ -195,6 +195,13 @@ case $state in fi return 1 fi + # Allow passing domain without --domain with few of the most used commands + if [[ $cmd == (destroy|reboot|reset|start|shutdown) ]]; then + if [[ $words[CURRENT-1] == $cmd ]]; then + values=( $(_call_program domains "virsh $conn_opt list ${dom_opts[$cmd]:-"--all"} --name") ) + [[ -n $values ]] && _wanted domains expl domain compadd ${=values} && return 0 + fi + fi [[ -z $_cache_virsh_cmd_opts[$cmd] ]] && \ _cache_virsh_cmd_opts[$cmd]=${(M)${${${${=${(f)"$(_call_program virsh virsh help $cmd 2>&1)"}}/\[}/\]}/\;}:#-[-0-9A-Za-z]*} [[ -n ${=_cache_virsh_cmd_opts[$cmd]} ]] && \ @@ -205,14 +212,14 @@ case $state in ;; virt_admin_cmd_opts) local cmd - for (( i = 2; i <= $#words; i++ )); do - [[ -n "${_cache_virt_admin_cmds[(r)$words[$i]]}" ]] && cmd=$words[$i] && break + for word in ${words:1}; do + [[ -n "${_cache_virt_admin_cmds[(r)$word]}" ]] && cmd=$word && break done [[ -z $cmd ]] && return 1 - if [[ $words[-2] == --server ]]; then + if [[ $words[CURRENT-1] == --server ]]; then _wanted servers expl server compadd ${=${(S)${${(f)$(sudo virt-admin ${(Q)conn_opt} srv-list)}##*--- }//[0-9]* }} && return 0 fi - if [[ $words[-2] == --client ]]; then + if [[ $words[CURRENT-1] == --client ]]; then local srv ; (( ${(k)words[(I)--server]} > 0 )) && srv=${words[1+${(k)words[(I)--server]}]} [[ -z $srv ]] && return 1 [[ -n ${srv//[[:alnum:]]} ]] && return 1 -- cgit 1.4.1